Java - setVisible(true)对GUI没有影响

时间:2010-08-08 09:37:24

标签: java user-interface netbeans

我使用Netbeans GUI Builder创建了一个GUI(称为ParameterUI),现在我想创建它的一个实例并显示它。但是,使用

ParameterUI gui = new ParameterUI();
gui.setVisible(true);

不会导致出现任何窗口...... 测试表明,在这些命令之后,gui.isVisible()返回true,但gui.isValid()为false。调用gui.revalidate()也没有效果。

在ParameterUI类中,构造函数方法由Netbeans生成,只是

public class ParameterUI extends javax.swing.JPanel {
    public ParameterUI() {
        initComponents();
    }
}

initComponents只是列出每个jPanel等的位置。

奇怪的是,当我使用http://netbeans.org/kb/docs/java/gui-functionality.html的教程制作练习GUI时,尽管没有主要方法且GUI自动出现,但GUI被设置为主类。

不幸的是我是GUI的新手(我正在使用构建器因为我没有时间学习如何制作一个正确的手工制作的GUI),但有人可以告诉我如何使我的GUI可见吗?如有必要,我可以提供更多代码......

编辑:我试过

JFrame window = new JFrame();
ParameterUI gui = new ParameterUI();
window.setContentPane(gui);
window.pack();
window.setVisible(true);

阅读了关于JFrames的简短教程,但它似乎没有改变任何东西......

2 个答案:

答案 0 :(得分:3)

Component上的{p> setVisible()在该组件中设置了一个标志(此时您还不关心其他事项)。此标志由包含组件的容器检查,以查看是否需要显示该组件。

Window上的

setVisible()控制窗口是否显示在屏幕上。现在,它所做的就是让你的窗口显示或消失。通常,您希望在使其可见之前给它一些大小和位置。 pack()setLocationRelativeTo()在这里很有用。

为了看到您的gui,ParameterUI要么必须延长Window(可能是JFrameJDialog),要么必须包含在窗口中,您应该致电窗口上的setVisible(true)而不是ParameterUI实例。 这样做的一个简单示例是(未经测试):

// expected to be called on the AWT/Event Dispatch Thread
public void show(ParameterUI ui) {
  JFrame frame = new JFrame();
  frame.setLayout(new BorderLayout());
  frame.add(ui, BorderLayout.CENTER);
  frame.pack();
  frame.setLocationRelativeTo(null); // position in the center of the screen
  frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  frame.setVisible(true);
}

答案 1 :(得分:1)

您使用的是JFrame还是使用Netbeans创建了桌面应用程序?因为如果你创建了一个桌面应用程序,Netbeans有自己的类,它也有很多问题......因此,我建议你使用JFrame。如何,您可以尝试这样看看UI是否启动:

SwingUtilities.invokeLater(new Runnable() {
           public void run()
           {
               ParameterUI gui = new ParameterUI();
               gui.setVisible(true);
           }
       });

由于您正在扩展JPanel,因此您需要将面板放在JFrame上以便可见。要做到这一点,在netbeans中,只需创建一个新的JFrame(右键单击包并选择“New JFrame”。现在,返回到您的面板,在左边缘(在Project,Files等)下你应该有一个项目命名为“Inspector”单击它,您应该看到组件的树视图。右键单击要显示的JPanels并选择“Copy”。返回刚刚创建的JFrame,找到“Inspector”按钮从左边距,单击它,在顶部你应该有一个名为“[JFrame]”的项目。右键单击该项目并选择粘贴。现在你应该看到你创建的面板。

要查看面板,只需输入JFrame的名称而不是ParameterUI