2017-01-16 6 views
0

Если я отправлю событие (действие) на JButton, метод кнопки processEvent не будет вызываться.processEvent не вызывается после отправки события

В приведенном ниже примере, я подумал, что следующие шаги будут выполнены

  1. b1 передает событие в b2 (dispatchEvent называется)
  2. b2 обрабатывает событие (processEvent называется)
  3. b2 выполняет его действия прослушивание

Но шаги 2 и 3 не будут выполнены. Может ли кто-нибудь объяснить, почему?

import java.awt.AWTEvent; 
import java.awt.event.*; 
import javax.swing.*; 

public class JavaApplication { 

    public static void main(String[] args) { 
    final JFrame frame = new JFrame(); 
    final JPanel panel = new JPanel(); 
    final JButton b2 = new JButton("b2") { 
     @Override 
     public void processEvent(AWTEvent evt) { 
     System.out.println("action event will be processed" + evt.toString()); 
     super.processEvent(evt); 
     } 
    }; 

    b2.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
     System.out.println("b2 clicked"); 
     } 
    }); 

    final JButton b1 = new JButton("b1"); 

    b1.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
     System.out.println("b1 clicked"); 
     final ActionEvent e2 = new ActionEvent(e.getSource(), e.getID(), "Redispatch-Event"); 
     b2.dispatchEvent(e2); 

     } 
    }); 

    panel.add(b1); 
    panel.add(b2); 
    frame.add(panel); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
} 
+0

На самом деле, 'b1' будет обрабатывать его – MadProgrammer

+1

Можете ли вы объяснить, почему * * код перекрывая' processEvent'? Это не то, что я нашел нужным, в течение более 15 лет программирования Java GUI. –

+0

Фактически 'b2.doClick()', вероятно, сделает то, что вы пытаетесь достичь. – MadProgrammer

ответ

0

Вы можете отправить кнопку на MouseEvent:

MouseEvent e2 = new MouseEvent(
    (Component)e.getSource(), MouseEvent.MOUSE_CLICKED, e.getWhen(), 0, 1,1, 1, false); 

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

  • Нет связанных вопросов^_^