Java 图形对象未更新?

Java Graphics Object Not Updating?

我已经写了一个class,我们将在这个问题中称这个为DrawCard,用于显示从我的牌组中随机抽取的一张扑克牌class。我编写了一个图形对象,其中包含与扑克牌、花色、价值、颜色等相关的信息。我在我的主要方法中初始化该对象并将其添加到 JFrame 中,它 100% 正确地显示和绘制所有内容。然后我添加了一个带有按钮的工具栏,其动作侦听器应该创建一个新的 DrawCard 对象,从框架中删除第一个对象并将新的添加到框架中。该程序编译并运行得很好,但是当我单击按钮时,它不会在框架上绘制新卡片。它会删除第一个,但不会将新的添加到框架中,即使我调用重绘方法也是如此。

这是我的主要方法中的代码:

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 方法,但没有成功。我也尝试过以不同的顺序添加我的对象,但似乎没有任何效果。任何帮助将不胜感激!

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