如何将JPanel中的JButton替换为另一个JButton

4

我正在尝试在Java中使用以下代码片段,但它似乎以某种奇怪的方式无法正常工作:

JFrame myFrame = new JFrame("Test Frame");
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFrame.setLayout(new GridLayout());

JPanel myPanel = new JPanel();
myPanel.setLayout(new BorderLayout());
myFrame.add(myPanel);

JButton firstButton = new JButton();
myPanel.add(firstButton);

JButton secondButton = new JButton();
myPanel.remove(firstButton);
myPanel.add(secondButton);
myFrame.repaint();

我做错了什么?


你认为会发生什么?如果你没有将 myPanel 添加到 myFrame 中,并且在同一个可运行对象中在 EDT 上调用 addremoveadd,那么你永远看不到第一个添加的按钮。 - Robin
1
抱歉,我在输入上述代码时错过了那一部分。请将其视为已经存在。 - NlightNFotis
2个回答

3
不要对JFrame进行重新绘制(myFrame.repaint();),你需要对最近的容器进行(重新)验证重绘,在你的情况下是JPanel
JButton secondButton = new JButton();
myPanel.remove(firstButton);
myPanel.add(secondButton);
myPanel.revalidate();
myPanel.repaint();

在发生更改的JPanel上调用revalidate()/repaint()是关键 :-) 对此加1 - nIcE cOw
谢谢您的回答。看起来revalidate()然后repaint()就是我所需要的。 - NlightNFotis

2
您可以使用getComponents()方法查找JButton的索引,然后使用addComponent(Component component, int index)方法将旧按钮添加到指定位置。之后,您可以删除要替换的按钮。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接