2016-07-22 9 views
0

私はクラスを書きました。私はこの質問のためにこのDrawCardを呼び出して、デッキクラスにランダムに描画されたトランプカードを表示します。私はトランプカード、スーツ、値、色などに関連する情報を含むグラフィックスオブジェクトを作成しました。メインメソッドでオブジェクトを初期化し、JFrameに追加すると、すべて100%正しく表示され描画されます。次に、アクションリスナーが新しいDrawCardオブジェクトを作成し、最初のフレームをフレームから削除し、新しいフレームをフレームに追加するボタンが付いたツールバーを追加しました。プログラムはコンパイルされて正常に動作しますが、ボタンをクリックするとフレームに新しいカードが描画されません。最初のものは削除されますが、再描画メソッドを呼び出した場合でも、新しいフレームはフレームに追加されません。ここでJava Graphicsオブジェクトが更新されていませんか?

は私が私のメインメソッドを持っているコードです:

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); 

私はmainメソッドの周りと運と私のActionListener内のいくつかの異なる場所に私のJFrameにrepaintメソッドを呼び出して試してみました。私はまた、別の注文で私のオブジェクトを追加しようとしましたが、何も動作するようです。どんな助けでも大歓迎です!

+0

ポスト[mcve] .. – user1803551

+0

私は過去に書かれたすべてのクラスを提供して、私は私の質問であまりにも多くのコードを提供するために投票した。担当者がここに築き上げるのが難しいので、私はどのように投票し、担当者を失うことなくこれを行うだろう。 –

答えて

1

actionPerformedで、2番目のカードを追加する前にrepaintを実行します。再ペイントする前に2枚目のカードを追加してみてください。

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(); 

EDIT:私の答えは不完全でした。再ペイントの前にframe.validate()に電話してみてください。新しいコンポーネントをペイントして再描画する必要があることをフレームが知る必要があります。同様の質問:repaint() in Java

+0

OPは次のよ​​うに書いています* "メインメソッドの周りのいくつかの異なる場所で、私のJFrameでrepaintメソッドを呼び出そうとしました。推測の代わりに、あなたが示唆したことを試していないかどうか尋ねてください。あなたはそれを自分で試して、それが動作することを確認しましたか? – user1803551

+0

私は自分自身の完全な例を試していませんでした。試してみるといいですか?ありがとう! – Davis

+0

一般的にはyesです。あなたの答えが間違っているなら、それは正当な理由で下降表示されます。アイデアがあるとは思うが確実ではない場合は、本当の答えを書く必要があるまでOPから詳細を尋ねてください。 )。私はそれを一例としてここで行った(http://stackoverflow.com/questions/38502480/how-to-bend-an-image-in-java)。 – user1803551

関連する問題