Java,从单独的类访问 swing 元素

标签 java swing

只是一个简单的问题......

我正在使用 Java 工作。我有 2 个单独的类(class):

public class MulticastChatGUI extends javax.swing.JFrame{
}

public class MulticastThread extends Thread{
}

所以,我真正想做的就是从 Thread 类中的 GUI 访问一个元素,即文本区域。这可能吗?预先感谢您提出的问题可能非常简单。

最佳答案

这可能吗?是的,但必须小心谨慎。

例如,您可以为 MulticastThread 类提供一个 MulticastChatGUI 变量,然后通过构造函数参数或 setter 方法将当前 MulticastChatGUI 实例的引用传递到 MulticastThread 对象中。

例如,

// constructor
public MulticastThread(MulticastChatGUI multicastChatGui) {
  this.multicastChatGui = multicastChatGui;
}

// or setter
public void setMulticastChatGUI(MulticastChatGUI multicastChatGui) {
  this.multicastChatGui = multicastChatGui;
}

到目前为止,对于任何您希望一个类与另一个类对话的程序,问题和解决方案都是相同的。

但是必须注意,每当您在 JTextArea 上调用 Swing 方法时,只能在 Swing 事件线程上执行此操作,否则您将面临发生有害的、难以调试的和间歇性的风险线程异常。

请注意,不要让一个对象直接访问另一个对象的字段(此处为 JTextArea),而是让带有 JTextArea 的类将其设为私有(private),这样会更简洁,并为其提供公共(public)方法,允许外部类以受控方式更改其形状。

关于Java,从单独的类访问 swing 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19850948/

相关文章:

java - JScrollPane 在行标题上显示图形故障。如何避免这种情况?

java - KeyListener 没有被调用

java - 如何检查特定单词旁边是否有数字?

java - Builder 中的 Builder (Context) 无法应用于 (Context, java.lang.String)

java - Facebook SDK 授权适用于手机,但不适用于平板电脑

java - JLabel 键盘替代品

Java:JOptionPane 对象的属性是什么,可以防止在其下方单击?

java - 如果没有 Maven,则无法解析 org.springframework.beans.factory.support.BeanNameGenerator 类型

java - 调用 dispose 时,自定义对话框不会释放

java - 让JScrollPane在JList里面改变的时候显示滚动条