如何在不继承的情况下跨多个类引用JFrame文本框变量
解决方法
1. 用静态工具类存变量(简单直接)
写一个专门存全局变量的工具类,把科目变量放在这里:
public class SubjectStorage { private static String currentSubject; // 获取科目 public static String getCurrentSubject() { return currentSubject; } // 设置科目 public static void setCurrentSubject(String subject) { currentSubject = subject; } }
在之前的页面确定科目时,调用SubjectStorage.setCurrentSubject(用户输入的科目);需要用的Swing类里直接拿SubjectStorage.getCurrentSubject()就行。如果是多线程场景,给变量加volatile关键字保证可见性。
2. 构造方法传参(更贴合OOP)
如果你的Swing类是在确定科目之后才创建的,直接把科目作为构造参数传进去:
public class EventTablePanel extends JPanel { private String targetSubject; // 带参数的构造方法 public EventTablePanel(String subject) { this.targetSubject = subject; } // 添加事件到表格的示例方法 private void addNewEvent() { // 创建事件时把targetSubject作为属性之一 Event newEvent = new Event(targetSubject, "事件内容", ...); // 将newEvent加入表格逻辑 } }
确定科目后创建实例:new EventTablePanel(用户选择的科目)。
3. Setter方法注入(适合已创建好的类)
如果Swing类已经实例化了,没法改构造方法,就加个setter方法传科目:
public class EventTableFrame extends JFrame { private String subject; public void setSubject(String subject) { this.subject = subject; } // 添加事件时直接用this.subject }
确定科目后,拿到这个类的实例调用frame.setSubject(用户选的科目)。
不用抱歉问基础问题,刚接触OOP遇到继承限制很正常,多写几次不同场景的代码,就能慢慢搞懂这些传值方式的区别了。
内容的提问来源于stack exchange,提问作者S3mi_Ko
相关产品推荐
相关产品推荐

