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