如何在 JPanel Java Gui 中通过单个按钮删除和添加内容?

问题描述 投票:0回答:1

我编写了一个代码,如果我按下按钮 RandomB,则可以用随机 x 和 y 值可视化一些城市。首先,我希望它清除屏幕,所以我使用

Screen.removeAll();  Screen.revalidate();  Screen.repaint();
为了工作。 然后我返回 forLoop 中的函数来创建一些城市 getSA 是城市数量。但问题是在我运行程序并按下按钮后,我看到了城市,但它们消失得很快。有时我什至看不到它们可能是什么问题??

@Override
    public void actionPerformed(ActionEvent e) {
       
        //if (e.getSource() == starButton) {
            
        //}
        
        if (e.getSource() == randomB) {
            Screen.removeAll();
            Screen.revalidate();
            Screen.repaint();
            getSA = StadtAnzahl.getSelectedItem().toString();
            
            for (int i = 0; i < Integer.parseInt(getSA); i++) {
                int x = r.nextInt((int) Math.round(0.77 * screenSize.width)) + 10;
                int y = r.nextInt((int) Math.round(0.82 * screenSize.height)) + 10;
                ZeichneStadt(x, y, Screen.getGraphics());                
            }
        
        }
    }
    public void ZeichneStadt(int x,int y,Graphics g)
    {
       Graphics2D g2=(Graphics2D)g.create();
       g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
       g2.setColor(Color.red);
       g2.fillOval(x, y, 10, 10);
       salesman.hinzufügen(x, y);
    }

我尝试替换removeall()、revalidiate()和repaint()。

java swing user-interface jpanel j
1个回答
0
投票

首先创建一个

paintComponent()
方法,它将变量中的数据绘制到屏幕上。请注意,
paintComponent()
不是由您调用的。由 Swing 决定何时需要绘制组件。

在您的

actionPerformed()
方法中准备要绘制的数据(=将它们放入变量中),然后您只需调用
repaint()
。这向 Swing 表明数据已更改并且应重新绘制组件。 Swing 将检查组件是否完全可见,然后才调用
paintComponent()

© www.soinside.com 2019 - 2024. All rights reserved.