首页 > 解决方案 > 从容器类访问属性

问题描述

我有一个 A 级和一个 B 级

在 A 类中,我有多个 B 实例。从 A 类,在定义 B 之后,我为 B 类编写了一个 mouseListener 事件,它可以工作。现在我意识到我必须为我实例化的每个 B 类编写相同的 mouseListener,它们所做的一切都是一样的:打开一个对话框询问一个数字,所以我决定在 B 类构造函数中编写那个 mouseListener。

当 mouseListener 必须访问 A 的私有属性时,问题就出现了。在这一点上,我考虑过在触发 mouseEvent 时使用函数式接口/回调将值从 B 发送到 A,但我觉得代码会有点乱,就像我使用错误的工具到达我想要的功能,也许我错了......

有什么建议或建议吗?我将发布一些代码,以便您更好地理解它。这是我的 A 类:此代码有效,但现在认为我必须一次又一次地编写相同的代码行

PowerConfigPanel 是 A 类。PTextField 是 B 类。connectionListener 是我所说的 A 私有属性。

public class PowerConfigPanel extends JPanel {

    private ConnectionListener connectionListener;

    public PowerConfigPanel(){
        PTextField SUSPEND_CHARGER_BF= new PTextField(7);
        SUSPEND_CHARGER_BF.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                JPanel insertValuePanel = new JPanel();
                insertValuePanel.setLayout(new GridLayout(3,2,1,1));
                PTextField field = new PTextField(7);
                insertValuePanel.add(UtilsService.createComponentPanel(field,"Insert Value "));

                int result = JOptionPane.showConfirmDialog(null, insertValuePanel,
                        "Please Enter a new Value", JOptionPane.OK_CANCEL_OPTION);

                if(result  == JOptionPane.OK_OPTION){
                    JOptionPane.showMessageDialog(null, "Invalid input for seconds", "Error", JOptionPane.ERROR_MESSAGE);
                    connectionListener.connect("a","b",Integer.valueOf(field.getText()));
                }

            }
        });
    }
}

我的意思是: mouseClick 返回 void ... 是否有可能让它返回一个整数并在单击 B 类时在 A 类中收集该整数?

标签: javaswing

解决方案


推荐阅读