2013-02-22 2 views
0

У меня есть три разных класса, каждый из которых является отдельным JFrame с собственным графическим интерфейсом, и каждый делает что-то другое. В другом классе у меня есть класс 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

+1

'CheckStock.stockNo.setText (s + e.getActionCommand());' вместо коммутатора. Или даже указан как случай по умолчанию. – 2013-02-22 00:29:39

ответ

3

В каждом классе 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

+0

Большинство людей сказали бы, что оператор switch можно устранить, создав три класса: 'Keypad1, Keypad2 и Keypad3'. В каждом классе вы создаете метод «actionPerformed», который является правильным для этого случая. Вы создаете экземпляры трех объектов, как описано выше, а код более структурирован и читается легче. – AgilePro

+1

Вы можете отправить его в качестве ответа. Я открыт для предложений. Но OP хотел повторно использовать один и тот же класс клавиатуры в каждом классе JFrame, поэтому я предложил этот способ. Если ему нужно создать отдельный класс клавиатуры для каждого класса JFrame, тогда код будет более избыточным, просто подумайте об этом - что будет, если у него будет 10 JFrames, поэтому ему нужно создать отдельные 10 классов клавиатуры, которые почти выполнять аналогичную функциональность в каждом классе? и именно поэтому этот вопрос был поднят. – Kanth

2

Создайте общий интерфейс, который требует клавиатурный блок ... например, например, KeyPadListener.

Внутри него объявить способ, что-то вроде keyPadActionPerformed. Теперь соглашение будет диктовать, что вы должны передать какой-то объект события, но вы могли бы просто передать ссылку на клавиатуру и значение, которое должно быть добавлено, т.е. public void keyPadActionPerformed(Keypad keyPad, String value)

В принципе, класс 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

Смежные вопросы