gpt4 book ai didi

java - Jtable能有整体焦点吗?

转载 作者:行者123 更新时间:2023-12-01 12:34:43 25 4
gpt4 key购买 nike

所以在我的代码中,我有

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com