我正在使用JPanel
添加JComponents
,我尝试将JPanel
设置为可焦点,因此当用户点击JPanel
时,它会取消选中JComponent
并称呼JComponent
的听众。我已经阅读了几乎每一个Q& A问到这一点,我找不到任何有用的东西。所以我想:还有另一个我可以使用的容器吗?
答案 0 :(得分: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();
}
});
}
});
}
}
答案 1 :(得分:1)
我想你可以使用任何实现FocusListener
接口的容器。创建自己的或使用文档中描述的已知实现的接口。
http://docs.oracle.com/javase/6/docs/api/java/awt/event/FocusListener.html