Java查找对象引用

时间:2015-07-08 19:43:10

标签: java

我的面板上有更多ButtonClass按钮,名称不同。当我点击首先点击哪个按钮的完成按钮(ButtonClass的哪个对象)并修改他的名字时,我怎么能找到?

public class ButtonClass extends JButton{
    public String name;

    public ButtonClass(String name){
            this.name = name;
            this.addActionListener(new ButtonListener());
    }

    public class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            JFrame frame = new JFrame();
            JButton finish = new JButton("Finish");
            finish.addActionListener(new Finish());
            panel.add(finish);
            frame.add(panel);
            frame.setFocusable(false);
            frame.setSize(1600,900);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        }
    }
}

我尝试为完成按钮创建的另一个actionListner:

public class Finish  implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        //Here
    }
}

所以基本上我有ButtonClass button1 = new ButtonClass("Button1"); button2, etc ;因此,当我点击其中一个时,一个框架将打开另一个名为finish的jbutton。当我点击它时,我想修改我在第一个点击的ButtonClass的名称。

3 个答案:

答案 0 :(得分:2)

您可以修改动作侦听器类以保持对按钮的引用,例如:

public class Finish  implements ActionListener {

    ButtonClass button;

    public Finish( ButtonClass button ) {
        this.button = button;
    }

    public void actionPerformed(ActionEvent e) {
        // Now you can use the field button when you get a click
    }
}

当然,您还必须修改按钮准备:

JButton finish = new JButton("Finish");
finish.addActionListener(new Finish((ButtonClass)e.getSource()));

请注意,我已将e.getSource()传递给Finish构造函数。它为您提供ButtonListener中点击的来源,然后将其传递给Finish对象。

答案 1 :(得分:0)

因此,根据我的理解,您正在尝试确定按下哪个按钮并根据按钮更改其文本。

所以你要这样做的方法是在你的事件监听器中,在动作执行方法中,你首先需要得到新闻的来源。在这种情况下,你可以通过

来做到这一点
Object source = e.getSource ();

这将为您提供按下的按钮。所以你要做的就是检查源是否等于你的一个按钮并设置文本。

if (source == myFirstJButton) {
    ButtonClass btn = (ButtonClass) source
    //set text here
} else if (source == mySecondJButton) {
    //...
}

答案 2 :(得分:0)

由于您已经扩展到特定类型的按钮,为什么不在“完成”按钮中执行此操作,并为“完成创建者”按钮添加属性。

public class FinishButton extends JButton{
    public ButtonClass creator;

    public FinishButton (ButtonClass creator){
            this.creator= creator;
            this.addActionListener(new Finish());
    }
}

然后你的ButtonListener变成

public class ButtonListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        JFrame frame = new JFrame();
        FinishButton finish = new FinishButton((ButtonClass) e.getSource());
        panel.add(finish);
        frame.add(panel);
        frame.setFocusable(false);
        frame.setSize(1600,900);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
}

然后使用finish.creator执行您的操作,例如

public class Finish  implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        FinishButton source = (FinishButton) e.getSource();
        source.creator.name = "Whatever";
        //etc
    }
}