Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在分派事件后不调用processEvent_Java_Swing_Events_Jbutton - Fatal编程技术网

Java 在分派事件后不调用processEvent

Java 在分派事件后不调用processEvent,java,swing,events,jbutton,Java,Swing,Events,Jbutton,如果我将(操作)事件分派给JButton,则不会调用按钮的processEvent方法 在下面的示例中,我认为将执行以下步骤 b1将事件分派到b2(dispatchEvent被调用) b2处理事件(调用processEvent) b2执行其动作侦听器 但是步骤2和步骤3将不被执行。有人能解释为什么吗 import java.awt.AWTEvent; import java.awt.event.*; import javax.swing.*; public class JavaApplicat

如果我将(操作)事件分派给
JButton
,则不会调用按钮的
processEvent
方法

在下面的示例中,我认为将执行以下步骤

  • b1
    将事件分派到
    b2
    dispatchEvent
    被调用)
  • b2
    处理事件
    (调用processEvent
  • 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);
      }
    }
    

    您可能希望发送按钮a
    MouseEvent

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

    实际上,
    b1
    会处理它。你能解释一下为什么代码会覆盖
    processEvent
    ?在超过15年的Java GUI编程中,我发现这不是我所需要的。事实上,
    b2.doClick()
    很可能会达到您想要达到的效果。我认为事件内源应该是
    b2
    ,而使用
    postEvent()
    。@jackjay,postEvent除外:P