2016-07-22 39 views
0

我已經寫了一個課,我們將這個問題叫做Draw​​Card,以顯示從我的甲板課中隨機抽取的一張紙牌。我寫了一個圖形對象,其中包含與撲克牌,套裝,值,顏色等相關的信息。我在我的主要方法中初始化對象,並將其添加到JFrame中,它將100%正確顯示並繪製所有內容。然後我添加了一個工具欄,其中的按鈕的動作偵聽器應該創建一個新的DrawCard對象,從框架中刪除第一個並將新框架添加到框架。該程序編譯並運行得很好,但是當我點擊按鈕時,它不會在框架上繪製新的卡。它將刪除第一個,但不會將新的添加到框架,即使我調用repaint方法。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); 

我已經打過電話我的JFrame重繪方法在各地的主要方法和我的ActionListener沒有運氣內幾個不同的地方。我也嘗試以不同的順序添加我的對象,但似乎沒有任何工作。任何幫助將不勝感激!

+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

一般是的。如果你的答案是錯誤的,那麼它會被合理地降低。如果你認爲自己有一個想法但無法確定,那麼可以從OP獲得更多詳細信息,直到你有了需要寫出真實答案的內容(這不會告訴他們嘗試,或者可能,或者可能是.. )。我自己做了[這裏](http://stackoverflow.com/questions/38502480/how-to-bend-an-image-in-java)爲例。 – user1803551