打开一个新的JFrame窗口。

10
我有一个主JFrame,其中包含各种面板,用于不同的功能和人们可以在其中计算事物。当用户点击第一个计算按钮时,我想打开一个新的JFrame,并作为输出窗口(如果您熟悉SPSS输出窗口,则类似)。
新的JFrame将是完全独立的,将有自己的菜单栏...这里不适合使用简单的JDialog。

那么问题在哪里?只需要在第一次点击计算按钮时使JFrame可见即可..!!! - Vishal K
这是另一个可以回答你问题的线程。 - Joe
5个回答

13
  • 无法抵制,仅对JFrame frame = new JFrame()frame.setVisible(true)的答案持不同意见

当用户点击第一个计算按钮时,我想打开一个新的JFrame,并作为输出窗口(如果您熟悉SPSS输出窗口,则类似于它们)。

  • 不要这样做,只创建两个JFrames, 重用第二个。通过使用getContentPane.removeAll(),为来自JButton的其他操作使用JFrame

  • 然后所有的生命周期都将只涉及setVisible(true) / setVisible(false)

  • DefaultCloseOperations更改为HIDE_ON_CLOSE

新的JFrame将完全独立,并拥有自己的菜单栏。简单的JDialog不适用于此处。

  • JDialog有什么问题,与JFrame相比,在Toolbar中只有一个按钮,而JFrame有三个按钮,很简单地不同意。

输出窗口(如果您熟悉SPSS输出窗口)。

  • 对于放置在JDialog中的JComponents获取值,使用SwingWorkerRunnable#Thread(需要包装到invokeLater中),如果所有更改都完成,则调用invokeLater()包装的JDialog.setVisible(true)

11
JFrame newFrame = new JFrame();
newFrame.setVisible(true);

3
请将 "setVisible(true)" 包装在 "invokeLater" 中。 - mKorbel
3
在同一Swing应用程序中拥有多个JFrame不是一个好的做法,这就是为什么我们有JDialog的原因。 - Eng.Fouad
@Vishal K(我的观点)默认情况下,多个屏幕需要多个实例,这个想法是正确的,但并不是所有方法都可以在两个或更多JFrames之间访问,正如API所描述的那样。 - mKorbel
@SLaks 正确,而且按钮单击处理程序在EDT上执行,所以你的答案是正确的+1。不过,我不同意有多个JFrame - Eng.Fouad
@SLaks,你是对的,无论从Swing监听器调用什么,都会在EDT上完成。 - mKorbel
显示剩余12条评论

5

(几乎)每个规则都有例外 - 不过指出来还是好的 ;) - MadProgrammer

4
我可能误解了你的问题,但是:
JFrame frame = new JFrame();
frame.setVisible(true);

1
不是同一个问题,请查看@SLaks的答案评论。 - mKorbel
问题可能会导致人们产生误解。哈哈 - Andy McRae

0

我使用了代码 JFrame frame = new JFrame(); frame.setVisible(true);。这段代码只是创建了一个空白窗口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接