1

を使用しJPanelて追加し、フォーカス可能JComponentsに設定しようとしたため、ユーザーが をクリックすると、選択が解除され、そのリスナーが呼び出されます。これについて質問されたほとんどすべての Q&A を読みましたが、うまくいくものは見つかりませんでした。それで私は考えました:私が使用できる別のコンテナはありますか?JPanelJPanelJComponentJComponent

4

2 に答える 2

2

やってみましたpanel.requestFocus();か?JPanelはサブクラスなので、Componentこのメソッドを呼び出すこともできます。これは、特定の瞬間にそれを持っているものから焦点を合わせます。

編集:

これが機能していることを示すコードサンプルです。

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class PanelOnClickGrabFocus {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                final JPanel p = new JPanel();
                p.setPreferredSize(new Dimension(400, 400));
                JTextField tf = new JTextField(34);
                p.add(tf);
                f.setContentPane(p);
                f.pack();
                f.setVisible(true);
                p.addMouseListener(new MouseAdapter() {    
                    @Override
                    public void mousePressed(MouseEvent e) {
                        p.requestFocus();
                    }
                });
            }
        });
    }
}
于 2012-06-14T12:56:38.893 に答える
1

インターフェイスを実装する任意のコンテナーを使用できると思いFocusListenerます。独自に作成するか、ドキュメントに記載されている既知の実装されたインターフェイスで使用します。 http://docs.oracle.com/javase/6/docs/api/java/awt/event/FocusListener.html

于 2012-06-14T12:53:40.330 に答える