所以在我的代码中,我有
JTable table = new JTable();
table.requestFocus();
table.addFocusListener(new FocusListener()
{
@Override
public void focusLost(FocusEvent arg0)
{
}
@Override
public void focusGained(FocusEvent arg0)
{
System.out.println("Table Focus gained !!!!!!!!!!!!!!!!!!");
}
});
但是当我测试代码时,表格没有焦点。
那么JTable
可以作为一个整体拥有焦点还是只有表格的一个单元格可以拥有焦点?
延伸上面的问题,JTable
作为一个整体可以有一个KeyListener
吗?
最佳答案
所以看起来您正在尝试聚焦表格,以便关键监听器能够工作。我想说根本不要使用 KeyListener。使用Key Bindings相反,您可以更好地控制不同焦点上下文中的操作。请参阅链接以获取更多说明。
一个简单的示例是,如果您将键绑定(bind)添加到 WHEN_IN_FOCUSED_WINDOW
输入映射,则组件不必聚焦即可使键正常工作。另一方面,如果您只希望按键起作用,然后表格获得焦点,您可以使用 WHEN_FOCUSED
输入映射,在这种情况下,您需要在包含表格的主框架/窗口之后的表格可见。
这是第一个 WHEN_IN_FOCUSED_WINDOW
的简单示例。 (键入 ctrl+shift+空格)
import java.awt.event.ActionEvent;
import javax.swing.*;
public class Stack {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
String[][] data = {{"Data"}};
String[] cols = {"COlo"};
JTable table = new JTable(data, cols);
int focusCondition = JComponent.WHEN_IN_FOCUSED_WINDOW;
String name = "random";
String key = "ctrl shift SPACE";
addKeyBinding(table, name, key, focusCondition);
JOptionPane.showMessageDialog(null, table);
}
});
}
private static void addKeyBinding(JComponent component,
final String name,
final String key,
int focusCondition) {
InputMap iMap = component.getInputMap(focusCondition);
iMap.put(KeyStroke.getKeyStroke(key), name);
ActionMap aMap = component.getActionMap();
aMap.put(name, new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.out.println("Key: " + key + " pressed");
}
});
}
}
关于java - Jtable能有整体焦点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25688335/