我的面板上有更多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的名称。
答案 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
}
}