【问题标题】:Netbeans Swing GUINetbeans Swing 图形用户界面
【发布时间】:2016-06-18 15:07:47
【问题描述】:

我使用 Swing 在 Netbeans 中创建了一个 GUI,但无法理解在 GUI 中设置文本区域值的最佳方法。

此 GUI 的 netbeans 类称为 JFrameTest,并且有一个公共静态 void main 方法可在此 JFrameTestClass 中显示 GUI:

    public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new JFrameTest().setVisible(true);
        }
    });
}

现在我想从另一个名为 GetFiles 的类中显示此 GUI,并将名为 JTextFiles 的文本区域设置为字符串值。

从 GetFiles 显示 GUI 的代码是:

    JFrameTest newwindow = new JFrameTest();
    newwindow.setVisible(true);

我明白这一点,但我无法引用我的文本区域 newwindow.JTextFiles,因为 netbeans 将所有 init 组件设置在:

private void iniComponents() 

保持私密!

我不明白为什么 Netbeans 设计器制作 GUI,这样您就无法从类外设置文本字段等的值。

什么是最好的前进方式?将 GUI 放在 GetFiles 类中还是....?

谢谢

-AL

像这样:

    public String assigntext(String directorystring) {
    JTextFiles.setText(directorystring);
}

【问题讨论】:

    标签: java swing netbeans


    【解决方案1】:

    我不明白为什么 Netbeans 设计器制作 GUI,这样您就无法从类外设置文本字段等的值。

    出于同样的原因,当您创建自己的类时,应该为它们提供私有字段,这些字段不能被外部类直接访问和随意操作。它被称为information hiding 或封装,是面向对象编程原则的支柱,因为它有助于降低代码复杂性,从而减少错误。如果您需要更改字段的状态,请通过公共方法以受控方式进行 - 您可以使用 NetBeans 生成的 GUI 执行此操作。

    如果您确实使用公共方法,请尽可能少地公开您的类的字段。因此,例如,如果您希望外部类从 JTextField、fooTextField 中获取文本,则更喜欢这样:

    public String getFooTextFieldText() {
        return fooTextField.getText();
    }
    

    在此:

    public JTextField getFooTextField {
        return fooTextField;
    }
    

    你的问题是:

    public String assigntext(String directorystring) {
        JTextFiles.setText(directorystring);
    }
    

    这类似于 ssetter 方法,由于使用 setter 类型的方法,您正在更改实例的状态,但通常不期望任何回报,您会将其设为 void:

    // note the difference?
    public void assigntext(String directorystring) {
        JTextFiles.setText(directorystring);
    }
    

    【讨论】:

    • 所以设置文本字段值的方法的语法是:
    • @AlGrant:我不清楚你在上面问的是什么,也不确定“来上课”是什么——你的意思是“同一”课吗?这一切都取决于,有时代码需要放在同一个类中,有时需要放在不同的类中,具体取决于您的代码和问题的具体情况(我们目前对此知之甚少)。但请始终记住关于类的一条关键规则,single responsibility principle:每个类都应负责单一功能。
    • 所以设置文本字段值的方法的语法是: [code] public String setFooTextFieldText(String text) { setText(FooTextFieldText); } [/code] 干杯
    • 很抱歉,这个新手 - 试图弄清楚如何格式化代码。
    • @AlGrant:是的,您不想在 cmets 中发布代码,因为它会丢失格式使其无法读取。相反,请通过editing your question 将任何新代码发布到原始问题的底部。
    猜你喜欢
    • 2011-08-15
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多