【问题标题】:Accessing same HashMap from MainGUI (jDialog) into another jDialog class从 MainGUI (jDialog) 访问相同的 HashMap 到另一个 jDialog 类
【发布时间】:2015-03-13 22:15:27
【问题描述】:

Main GUI(jDialog) - 创建一个类的实例,该类在此 GUI 中具有 HashMap(我们称之为 HashMapClass)。能够访问该类中返回HashMap的方法。

辅助 GUI(jDialog) - 想要访问具有 HashMap 的类的同一实例,而不是在此 jDialog 中创建新实例。 (想访问同一个HashMap里面的数据一样)

这是我迄今为止尝试过的。这是主 GUI 中用于打开辅助 GUI 的按钮。

主界面

private HashMapClass hashMapClassNo;

jButton1.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent evt) {
        SecondaryGUI sec = new SecondaryGUI(null);
        sec.setModal(true);
        sec.setLocationRelativeTo(null);
        sec.setVisible(true);
    }

    private ActionListener init(HashMapClass hashMapClass) {
         hashMapClass = hashMapClassNo;
         return this;
    }

}.init(hashMapClassNo));

这可以编译,但我仍然无法使用外部方法调用或 SecondaryGUI 中的 HashMap 访问方法。

如何将方法从一个 jDialog 访问到另一个?

【问题讨论】:

    标签: java user-interface jdialog


    【解决方案1】:

    您正在向匿名内部类添加一个新方法,但这永远不会奏效。我什至不确定你想用init() 方法实现什么。我自己,如果我想让另一个类 direct 访问一个对象,我会通过构造函数参数或 setter 方法将该对象传递给另一个类。

    例如,

    jButton1.addActionListener(new ActionListener() {
    
        public void actionPerformed(ActionEvent evt) {
            SecondaryGUI sec = new SecondaryGUI(hashMapClassNo); // pass it in
            sec.setModal(true);
            sec.setLocationRelativeTo(null);
            sec.setVisible(true);
        }
    };
    

    更好的解决方案是使用 MVC 设计模式,但这需要您进行更多的前期工作,但如果这是一个大型复杂程序,那么这是值得的,因此您绝对需要创建高度内聚的低耦合可测试的类。

    【讨论】:

    • 试过这样做,它让我在 SecondaryGUI 中改变了很多东西,改变了构造函数和东西,仍然得到 NullPointerException 错误。
    • @james11:那么您的概念是正确的,但您的实现不正确。如果您需要帮助,请随时显示该代码和该错误。不确定,但您可能需要了解如何调试 NPE (NullPointerException) 的一般概念。 您应该仔细阅读异常的堆栈跟踪,找出出错的代码行、引发异常的行,然后仔细检查该行,找出哪个变量为空,然后回溯到您的代码看看为什么。你会一次又一次地遇到这些,相信我。
    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多