从其他类调用actionPerformed()
我有三个不同的类,每个类都有一个单独的JFrame,它们各自具有不同的GUI。在另一个课上,我有我的Keypad类,其中包含上述所有类。从其他类调用actionPerformed()
这就是actionPerformed
一部分从我的键盘类:
public void actionPerformed(ActionEvent e) {
String s = CheckStock.stockNo.getText();
switch (e.getActionCommand()) {
case "1":
CheckStock.stockNo.setText(s + "1");
break;
case "2":
CheckStock.stockNo.setText(s + "2");
break;
case "3":
CheckStock.stockNo.setText(s + "3");
break;
但当就是这个样子,我只能在我的CheckStock课堂上使用它,我想用这个actionPerformed
从其他类以及
在每个JFrame类中,都以这种方式添加Keypad对象。
add(new Keypad(1)); // For the first class
add(new Keypad(2)); // For the second class
add(new Keypad(3));// For the third class
以这种方式修改您的键盘类。
public class Keypad extends JPanel implements ActionListener {
private int identifier;
public Keypad(int identifier) {
this.identifier = identifier;
..............................
...............................
}
public void actionPerformed(ActionEvent e) {
switch(identifier)
{
case 1:
String s = CheckStock.stockNo.getText();
CheckStock.stockNo.setText(s + e.getActionCommand());
break;
case 2:
//for second class
break;
case 3:
// for the third class
break;
}
}
再次感谢你@Appu – knowbody 2013-02-22 18:37:05
大多数人会说,通过创建三个类:'Keypad1,Keypad2和Keypad3',可以消除switch语句。在每个类中创建一个适用于该情况的“actionPerformed”方法。您可以像上面那样实例化三个对象,并且代码更加结构化且更易于阅读。 – AgilePro 2013-02-23 01:36:29
非常欢迎您将其作为答案发布。我乐于接受建议。但OP希望在每个JFrame类中重复使用相同的Keypad类,这就是我这样建议的原因。如果他必须为每个JFrame类创建一个单独的Keypad类,那么代码会更加多余,只是这样想 - 如果他有10个JFrames,情况会如何,那么他需要创建单独的10个Keypad类在每个班级做类似的功能?甚至这就是为什么提出这个问题。 – Kanth 2013-02-23 03:37:47
创建一个通用的界面,该键盘需要...例如KeyPadListener
。
其中,声明一个方法,如keyPadActionPerformed
。现在约定会决定你应该传递某种事件对象,但是你可以简单地传回一个对键盘的引用以及要附加的值,例如KeyPad
基本上你会允许其他对象注册它们自我呼叫回来时,键盘事件发生时,像KeyPad#addKeyPadListener(KeyPadListener)
例如...
在你actionPerformed
方法,你会所有注册的侦听器通知事件已发生......
public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
KeyPadListener[] listeners = getKeyPadListeners(); // You would provide this...
if (listeners != null && listeners.length > 0) {
for (KeyPadListener listener : listeners) {
listener.keyPadActionPerformed(this, s);
}
}
}
这就意味着它直到执行KeyPadListener
来决定如何处理keyPadActionPerformed
事件
如果您正在切换“n”并追加“n”,您可以直接追加它,而无需切换开始。 – 2013-02-22 00:27:28
我不明白 – knowbody 2013-02-22 00:29:00
'CheckStock.stockNo.setText(s + e.getActionCommand());'而不是开关。甚至列为默认情况。 – 2013-02-22 00:29:39