1

我正在使用 aJPanel添加JComponents并尝试设置JPanel可聚焦,因此当用户单击 时JPanel,它将取消选择任何JComponent并调用它JComponent的侦听器。我已经阅读了几乎所有关于此问题的问答,但我找不到任何有效的方法。于是我想:还有其他可以使用的容器吗?

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 回答