【问题标题】:Accessing components created in GUI designer on IntelliJ访问在 IntelliJ 上的 GUI 设计器中创建的组件
【发布时间】:2012-03-03 19:39:45
【问题描述】:

虽然我在从未使用过 GUI 设计器之前使用过 Swing,并且在访问从源代码中拖放到面板上的组件时遇到了问题。

我创建了一个新项目并选择创建一个 GUI 表单。然后我使用“生成”选项创建了主要方法,现在我的“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);
    }
}

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

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

如果我创建一个不带参数的 JLabel 并在其上调用 setText,然后在 JFrame 上重新绘制,则不会发生任何事情。

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

【问题讨论】:

    标签: java swing user-interface intellij-idea


    【解决方案1】:

    首先,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 会自动为您修改源代码或修改类文件(您可以进入 Settings / GUI Builder 来测试这两个选项和看看他们做了什么)。

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多