从其他类调用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从其他类以及

+0

如果您正在切换“n”并追加“n”,您可以直接追加它,而无需切换开始。 – 2013-02-22 00:27:28

+0

我不明白 – knowbody 2013-02-22 00:29:00

+1

'CheckStock.stockNo.setText(s + e.getActionCommand());'而不是开关。甚至列为默认情况。 – 2013-02-22 00:29:39

在每个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; 

     } 

} 
+0

再次感谢你@Appu – knowbody 2013-02-22 18:37:05

+0

大多数人会说,通过创建三个类:'Keypad1,Keypad2和Keypad3',可以消除switch语句。在每个类中创建一个适用于该情况的“actionPerformed”方法。您可以像上面那样实例化三个对象,并且代码更加结构化且更易于阅读。 – AgilePro 2013-02-23 01:36:29

+1

非常欢迎您将其作为答案发布。我乐于接受建议。但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事件