在主类之外使用组件

时间:2014-01-13 01:44:16

标签: java swing netbeans

有没有办法在主类(在JFrame之外)创建在该类之外创建的组件?我正在使用netbeans生成器,我想:textArea.setText("") 但我无法访问主类

之外的textArea组件

4 个答案:

答案 0 :(得分:3)

有几种方法可以做到这一点。一个是公共访问对象(不推荐):

public JTextArea textArea; //when you declare the object

但我建议在主类中提供一个方法,例如:

public void clearTextArea(){
    textArea.setText("");
}

这通常是最好的,因为您提供对组件的最小访问权限;您可以确保主类是处理组件的类,而不是其他类。

或者您可以在MouseListener类中创建一个以文本区域为参数的构造函数:

private JTextArea textArea;

public MyMouseListener(JTextArea toChangeOnAction){
    textArea = toChangeOnAction;
}

当您想要使用文本区域中的许多方法时,这种方式会更容易,而不必在主类中创建许多方法。

答案 1 :(得分:2)

提供访问文本区域的getter:

import javax.swing.JFrame;
import javax.swing.JTextArea;
// ...

public class Main extends JFrame {
    private JTextArea textArea;

    private void createUI() {
        // ...
        textArea = new JTextArea();
        // ...
    }

    public JTextArea getTextArea() {
        return textArea;
    }
}

public class Other {
    // ...
    public void update(Main main, String message) {
        main.getTextArea().setText(message);
    }
    // ...
}

答案 2 :(得分:1)

JTextFeild传递给第二个班级的构造函数。

public class MainClass {
    private JTextField textField = new JTextField();
    private SecondClass secondClass;

    public MainClass() {
        secondClass = new SecondClass(textField);
    }
}

public class SecondClass {
    private JTextField textField;

    public SecondClass(JTextField textField) {
        this.textField = textField;
    }
}

现在可以在MainClass中使用SecondClass中的相同文本字段,因为它是通过引用传递的


另见this answer示例

答案 3 :(得分:-2)

在主课程中,请确保您已设置:

public static JTextArea textArea;

然后你可以这样做:

MainClass.textArea.setText("");

希望这有帮助!