java - Jtable能有整体焦点吗?

标签 java swing jtable focus

所以在我的代码中,我有

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/

相关文章:

java - 将数据从左上角单元格移动到第一列的每一行

java - 从 ArrayList<HashMap<String, HashMap<String, String>>> 获取元素

Java - 卸载类

java - 从 ActionListener 中中断 for 循环

java - 仅在窗口在 Java 中不再可见后才读取值

java - 如何在 JTable 中的 cellrenderer 之外设置表格高度

java - Thymeleaf ClassLoaderTemplateResolver 找不到电子邮件模板,但只能在 linux 上找到

java - 谷歌地图向上滑动标记信息窗口

java - 即使使用包装类,SwingWorker 异常也会丢失

java - JTable 未显示超过 5 列