有没有办法在主类(在JFrame
之外)创建在该类之外创建的组件?我正在使用netbeans生成器,我想:textArea.setText("")
但我无法访问主类
答案 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("");
希望这有帮助!