我在JScrollPane中有一个JPanel。我在JPanel的一个列中添加了一些JButton,这很好用;我可以轻松向下滚动并按下我想要的任何按钮。 按下按钮时我想更改JPanel的内容。假设我想用一组新的JButton替换JButton。
这是我的做法(简化):
private void replace(String[] newButtonNames){
panel.removeAll(); //Removing all old buttons from my JPanel
JButton button;
for(int i=0; i<newButtonNames.length; i++){
button = new JButton(newButtonNames[i]); //Create a new button
panel.add(button); //Add the button to the panel
}
panel.repaint(); //Repainting it so that the results show up
}
我遇到的问题是“重新绘制”方法似乎只删除旧按钮,留下一个空白的JPanel。然而,第二个我滚动新按钮立即出现,所以看起来JPanel根本没有正确重新绘制。
我试着寻找这个,但没有得到任何东西。如果你知道答案,请告诉我(如果你知道这里的另一篇帖子有相同的问题,有答案,那么链接也会非常感激)
非常感谢你!
答案 0 :(得分:3)
默认情况下,在调用布局管理器之前,组件的大小/位置为(0,0)。所以没有什么可画的。
删除/添加组件到面板的一般代码是:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
只有在对面板完成所有更新后才会执行revalidate()和repaint(),因此您只需调用一次布局管理器。