访问IntelliJ上GUI设计器中创建的组件

时间:2012-02-11 18:44:14

标签: java swing user-interface intellij-idea

虽然在我从未使用过GUI设计器之前我已经使用过Swing,而且我在访问组件时遇到问题,但是我已经从源代码中删除了我的面板。

我创建了一个新项目,并选择创建一个GUI表单。然后我使用'generate'选项创建了main方法,现在我在'helloWorld.java'文件中有了这个代码。

public class helloWorld {


private JPanel myForm;
private JLabel text;

public static void main(String[] args) {
    JFrame frame = new JFrame("helloWorld");
    frame.setContentPane(new helloWorld().myForm);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setPreferredSize(new Dimension(800, 600));
    frame.pack();
    frame.setVisible(true);
    }
}

然后我在设计器中添加了一个JLabel,其字段名为title,它为我的helloWorld类的头部添加了一个属性。我现在想在程序运行后在字段名称上设置文本。

如果我使用新字符串作为参数创建JLabel实例并将其添加到我的JFrame,则程序会因空指针异常而崩溃。

如果我创建一个没有参数的JLabel并在其上调用setText然后在JFrame上重新绘制,则没有任何反应。

我想在一行中解决我的问题:如何访问我使用GUI设计器创建的组件?

2 个答案:

答案 0 :(得分:12)

首先,IntelliJ有点特别之处在于它为您隐藏了很多样板代码,因此您的源代码看起来实际上比实际情况下更简单。

基本上,当您使用IntelliJ GUI构建器时,最终会得到与您的表单相对应的源代码,如下所示:

public class DialogEditView {

    private JPanel mainPanel;
    private JLabel labelDescription;
    private JLabel labelExample;
    private JComboBox comboboxDEJC;

}

为了能够访问这些,您只需将getter添加到该源文件:

public class DialogEditView {

    private JPanel mainPanel;
    private JLabel labelDescription;
    private JLabel labelExample;
    private JComboBox comboboxDEJC;

    public JPanel getMainPanel() {
        return mainPanel;
    }

    // etc.

}

IntelliJ再次修改源代码或自动修改类文件(您可以进入设置 / GUI Builder 来测试两个选项和看看他们做了什么。)

  

如何访问我使用GUI创建的组件   设计师?

您可以转到与GUI对应的源代码文件并添加getter。确保为您的组件命名......

答案 1 :(得分:0)

绑定类中自动生成的初始化代码如下所示:

 private void $$$setupUI$$$() {}

有关IntelliJ初始化代码的更多信息,请参阅此Jetbrains文档:Creating Form Initialization Code