1

JTextFieldとカスタム コンポーネント ( )の 2 つのコンポーネントを持つ単純な GUI がありMyComponentます。最初はテキスト フィールドにフォーカスがあり、カスタム コンポーネントをクリックすると、それにフォーカスが移ります。

現在、 を使用して手動でフォーカスを設定していますrequestFocusInWindowが、focusLostイベントが終了した後にイベントが発生しmousePressedます。focusLostイベントが終了する前にイベントを発生させる方法はありますmousePressedか?

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

public class Example  {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Example");
        frame.setLayout(new FlowLayout());
        JTextField textField = new JTextField(10);
        textField.addFocusListener(new FocusAdapter() {
            public void focusLost(FocusEvent event) {
                System.out.println("focusLost");
            }
        });
        frame.add(textField);
        frame.add(new MyComponent());
        frame.pack();
        frame.setVisible(true);
    }

    private static class MyComponent extends JComponent {
        public MyComponent() {
            setFocusable(true);
            addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent event) {
                    requestFocusInWindow();
                    System.out.println("mousePressed");
                }
            });
        }

        public Dimension getPreferredSize() {
            return new Dimension(400, 300);
        }
    }
}
4

1 に答える 1