当前位置: 首页 > 知识库问答 >
问题:

JFrame不更新其内容

白刚洁
2023-03-14

我一直在努力让我的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方法对应用程序没有影响。

我还可以尝试什么来让应用程序刷新和显示其新内容。

共有1个答案

祁永嘉
2023-03-14

JFrame调用RemoveAll是危险的,可能会产生意想不到的结果,这也是不鼓励直接在顶级容器上扩展UI或管理UI的另一个原因。

首先使用JPanel作为基本UI组件,然后使用CardLayout管理视图之间的切换。

将每个视图分离到它自己的类中(从jpanel或其他模拟器扩展而来),以便于管理

 类似资料:
  • 问题内容: 我正在使用GUI和JFrames / JPanels创建棋盘游戏,您可以在计算机上玩该游戏。我有一个名为showPieces()的方法,该方法通过更改按钮数组(以网格格式布置)上的图像图标来更新板子GUI。一旦图标已更新,则和方法将更新GUI。showPieces()方法具有一个参数,每次调用它时都需要将其传递给它。 我遇到的主要问题是,我希望人类采取行动,更新GUI,等待1秒钟,计算

  • 我想做一个象棋游戏,我想在游戏循环中的一个jFrame上调用方法。这个特殊的JFrame显示了每个玩家的总击杀数。我很确定确实调用了repaint(),但由于某种原因,它似乎没有正确更新我的jlabel,jlabel应该保存每个玩家的击杀数值。 这是我为自定义JFrame扩展类编写的代码,该类包含代表kill的JLabel。 然后我只是在不同类的main方法中调用这个框架的repaint(): 非

  • 问题内容: 下面显示的以下代码会将3个JLabel添加到JFrame中,然后删除3个JLabel。2秒后,它将重新绘制3个JLabel。 我面临的一个小问题是,它正在重新绘制到新的frame(frameTwo)而不是旧的frame(frameOne)。 如何使它重新绘制现有框架而不是重新绘制到新框架? 问题答案: Simpy使用CardLayout来交换视图。 请使用Swing计时器,而不要使用当

  • 我正在尝试制作一个带有GUI的Mandelbrot集渲染器,您可以在其中单击并拖动以放大到特定区域。运行时,它将进行初始计算并进行精细渲染,但当您尝试单击并拖动以放大时,控制台会说它正在进行计算,但JFrame的内容不会更新。 然而,我甚至不确定它是否正在重新计算,因为初始计算需要大约8秒,但当您单击/拖动以缩放时,需要大约6毫秒。 我在下面发布了我的代码。 复数类 可运行的MandelbrotT

  • 我有一个带有卡布局组件的JFrame。我正在使用卡布局在应用程序执行的不同时刻在不同的JPanel之间切换。在某些时候,我正在使用摇摆工人对象来生成一些XML文件。在这段时间里,我想在我的窗口中显示另一个JPanel,告诉用户等待。在这个JPanel上,我想在3个标签之间切换。 吉列布尔1会说:“请稍候。 吉拉贝尔2会说:“请稍候..” 吉拉贝尔3会是:“请稍候...” 现在代码如下: Swing

  • 编辑:当我拖动边框时,某种刷新被发送,我需要弄清楚并手动发送相同的刷新。 请注意,我已经尝试使用revalidate()和repaint()。 当使用JFrame和JPanel来显示一个框架时,我试图使框架的大小易于改变。 null 此外,一个重要的注意事项是,当您拖动边框时,白条会消失,并正确地重新加载/刷新内容(即使您只是少量拖动)