JFrame无法更新其内容

时间:2016-01-18 23:43:34

标签: java swing user-interface awt

我一直在努力让我的JFrame重新绘制其内容。在我将新组件添加到JFrame中后,我尝试同时使用revaluate()和repaint()方法,但我没有看到帧更改。

这是我试图制作的扫雷游戏的简单图形用户界面。 enter image description here

当用户点击前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方法对应用程序没有影响。

我还可以尝试让应用程序刷新并显示其新内容。

2 个答案:

答案 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。