2016-07-22 7 views
0

클래스를 작성했습니다.이 질문에 대해이 DrawCard를 호출하여 데크 클래스에서 임의로 그린 카드를 표시합니다. 나는 게임 카드, 슈트, 밸류, 컬러 등과 관련된 정보를 담고있는 그래픽 객체를 작성했다. 메인 메소드에서 객체를 초기화하고 JFrame에 추가하면 모든 것을 100 % 올바르게 표시하고 그려 준다. 그런 다음 액션 리스너가 새 DrawCard 객체를 만들고, 프레임에서 첫 번째를 제거하고 새 프레임을 프레임에 추가하는 버튼이있는 툴바를 추가했습니다. 프로그램은 컴파일되고 실행되지만 버튼을 클릭하면 프레임에 새 카드가 그려지지 않습니다. 첫 번째 프레임을 제거하지만 프레임에 새 프레임을 추가하지 않습니다. 단, 다시 페인트 메서드를 호출하더라도 마찬가지입니다. 나는 주요 방법 주위 행운 내 ActionListener를 내부에 몇 가지 다른 장소에서 내 JFrame의에 다시 그리기 메소드를 호출 시도Java 그래픽 객체가 업데이트되지 않습니까?

JFrame frame = new JFrame("Paying Card"); 
JButton button = new JButton("Button 1"); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    int width = 330; 
    int height = 500; 

    frame.setSize(width, height); 


DrawPlayingCard drawCard = new DrawPlayingCard(1, 1,width,height,1, frame); 
    JToolBar toolBar = new JToolBar("This Tool Bar Does Nothing."); 
    toolBar.add(button); 
    toolBar.addSeparator(); 


    Container contentPane = frame.getContentPane(); 
    contentPane.add(toolBar, BorderLayout.NORTH); 


    frame.add(drawCard); 
    button.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) 
     { 
      //Execute when button is pressed 
      frame.remove(drawCard); 
      frame.repaint(); 
      //method signature: 
      //public DrawPlayingCard(int x, int y, int width, int height, int arcSize, JFrame frame); 
      DrawPlayingCard drawCard2 = new DrawPlayingCard(1, 1, width, height, 1, frame); 

      System.out.println("Card drawn"); 

      frame.add(drawCard2); 



     } 
    }); 

    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

: 여기

내가 내 주요 방법에있는 코드입니다. 나는 또한 다른 주문에 내 물건을 추가하려고했지만 아무것도 작동하지 않는 것 같습니다. 어떤 도움이라도 대단히 감사하겠습니다!

+0

게시물 [mcve] .. – user1803551

+0

나는 과거에 쓰여진 모든 수업을 제공했고, 나는 내 질문에 너무 많은 코드를 제공 한 것으로 나타났습니다. 대리인이 여기에 세우지 않기 때문에 투표를하지 않고 대표를 잃지 않고 어떻게이를 수행 할 수 있습니까? –

답변

1

actionPerformed에서 두 번째 카드를 추가하기 전에 repaint을 수행하십시오. 다시 칠하기 전에 두 번째 카드를 추가하십시오 (예 :

frame.remove(drawCard); 
DrawPlayingCard drawCard 2 = new DrawPlayingCard(1, 1, width, height, 1, frame); 
frame.add(drawCard2); 
frame.validate(); // this is what needs to be called to actually paint drawCard2 
frame.repaint(); 

편집 : 내 대답이 불완전했습니다. 다시 칠하기 전에 frame.validate()으로 전화 해보십시오. 프레임이 다시 그리기 할 때 새 구성 요소를 칠할 필요가 있음을 프레임이 알아야합니다. 비슷한 질문에 대한 참조 : repaint() in Java

+0

OP는 * "JFrame의 메인 메소드를 둘러싼 몇 개의 다른 장소에서 재 작업 메서드를 호출하고 행운을 빌어 내 actionListener 내부에서 호출하려고했습니다."*. 추측하는 대신, 당신이 제안한 것을 시도하지 않았는지 물어보십시오. 직접 해보고 작동하는지 확인 했습니까? – user1803551

+0

나는 완전한 예를 직접 시도하지 않았다. 시도 할 제안이나 제안을하고 싶다면 그냥 코멘트를 게시해야합니까? 감사! – Davis

+0

일반적으로 예. 당신의 대답이 틀린다면 정당하게 downvoted 될 것입니다. 생각이 있지만 확신 할 수 없다고 생각하는 경우 실제 답변을 작성할 때까지 OP에서 자세한 내용을 요청하십시오 (시도하지 않거나 어쩌면 또는 말할 수도 있음).). 나는 그 자신을 [여기] (http://stackoverflow.com/questions/38502480/how-to-bend-an-image-in-java)를 예로 들었다. – user1803551