2016-07-22 53 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