【问题标题】:JFrame is not showing up in ubuntuJFrame 没有出现在 ubuntu 中
【发布时间】:2017-10-27 14:17:40
【问题描述】:

当我在 ubuntu 中运行这段代码时,窗口被最小化了。当我点击它的图标时,它保持最小化。 但它在 Windows 中运行良好。

这是我的代码。

import javax.swing.*;

public class FrameTest
{
    public static void main(String args[])
    {
        JPanel p = new JPanel();
        JButton b = new JButton("Button 1");
        p.add(b);

        JFrame f = new JFrame("TestFrame");
        f.add(p);

        f.setVisible(true);
        f.setSize(500,500);
    }
}

请帮忙。

【问题讨论】:

  • f.pack() ?应该做的伎俩
  • 您需要致电f.pack() 或。 f.setSize(...) 之前 f.setVisible(true)setVisible() 应该是使您的 GUI 可见时的最后一行...这是我第一眼看到的内容,但由于我没有在此处安装 Ubuntu,因此无法测试
  • Swing/AWT GUI 应该在事件调度线程上启动。这可能不是问题,但无论如何都要使用最佳实践。此外,正如@mko 所提到的,我们应该使用pack() 来调整GUI,在添加所有组件之后,但在setVisible(true) 之前。删除 f.setSize(500,500); - 这只是猜测。
  • 您的代码没有什么特别的问题(但我同意 Andrew,您应该在 EDT 上启动 UI),我无法复制您的问题

标签: java swing ubuntu


【解决方案1】:

f.setSize(500, 500); 放在JFrame f = new JFrame("TestFrame");f.add(p); 之间。在完全构建和初始化 JFrame 之前,您不能调用 f.setVisible(true);。我还建议在 JPanel/JFrame 中使用 LayoutManager,例如 BorderLayout。

import java.awt.BorderLayout;

import javax.swing.*;

public class FrameTest
{
    public static void main(String args[])
    {
        JPanel p = new JPanel();
        BorderLayout bl = new BorderLayout(0, 0);
        p.setLayout(bl);

        JButton b = new JButton("Button 1");
        p.add(b, BorderLayout.CENTER);

        JFrame f = new JFrame("TestFrame");
        f.setSize(500,500);
        f.getContentPane().add(p);
        f.setVisible(true);
    }
}

【讨论】:

  • “在 JFrame 完全构建之前,您不能调用 f.setVisible(true);” - 可以,但是您需要重新验证并重新绘制组件。 “我还建议在 JPanel/JFrame 中使用 LayoutManager,例如 BorderLayout。” - 所有基于窗口的类默认为 BorderLayout;我们不必使用getContentPane().add,因为Java 1.6、JFrame#add 将调用转发到contentPane;在窗口可见后更改窗口的大小应该与结果无关,否则可能会使框架在第一次加载时看起来像是“弹出”
猜你喜欢
  • 2015-01-03
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多