我一直在努力让我的JFrame重新绘制其内容。在我将新组件添加到JFrame中后,我尝试同时使用revaluate()和repaint()方法,但我没有看到帧更改。
当用户点击前3个按钮中的任何一个时,他们会输入以下代码块
private void drawGrid()
{
removeAll();
setLayout(new GridLayout(2,1));
add(new JButton("button"));
setVisible(true);
revalidate();
repaint();
setVisible(false);
setVisible(true);
}
单击按钮时,整个应用程序变为白色,但我无法看到我添加的新按钮。当我删除两个setVisible()方法行时,单击一个按钮肯定会删除组件,因为我现在无法点击任何组件,但仍然可以看到4个初始按钮。删除revalidate或repaint方法对应用程序没有影响。
我还可以尝试让应用程序刷新并显示其新内容。
答案 0 :(得分:1)
在removeAll
上拨打JFrame
是危险的,可能会产生意想不到的结果,这也是他们不鼓励直接在顶级容器上扩展或管理用户界面的另一个原因。
首先使用JPanel
作为基础UI组件,然后使用CardLayout
管理视图之间的切换。
将每个视图分成它自己的类(从JPanel
延伸或类似的东西)以便于管理
答案 1 :(得分:0)
如果您使用此
,也许效果会更好easyBtn.setVisible( false );
medBtn.setVisible( false );
hardBtn.setVisible( false );
customBtn.setVisible( false );
newBtn.setVisible( true );
如果这不起作用,请尝试将其放入SwingWorker。