我在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,0),直到您调用布局管理器。所以没有什么可画的。
删除/添加组件到面板的一般代码是:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
只有在对面板完成所有更新后,您才会执行重新验证()和重新绘制(),因此您只调用一次布局管理器。