java - JTable中如何控制焦点

标签 java user-interface swing focus jtable

我想要做的是,当用户完成对表格单元格中数据的编辑后,根据用户输入的内容将焦点移到另一个单元格上,并将该单元格转换为编辑模式,这样用户就可以立即开始输入,而无需执行其他操作。这样用户可以专注于他的工作,软件将“思考”接下来应该编辑哪个单元格。

在现实生活中看起来并不那么简单的简单任务……有人知道吗?

最佳答案

请尝试这个例子。

它应该可以让您通过输入值 u、d、l、r 来浏览表格,分别代表上、下、左、右。

希望这能让您知道如何去做。

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class Test extends JFrame {

    private JTable table;
    private TableModel tableModel;

    public Test() {
        tableModel = new DefaultTableModel(5, 5);

        table = new JTable(tableModel);
        table.setColumnSelectionAllowed(true);

        getContentPane().add(table);

        Action handleEnter = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                table.getCellEditor().stopCellEditing(); // store user input
                int row = table.getSelectedRow();
                int col = table.getSelectedColumn();
                String val = String.valueOf(table.getValueAt(row, col)).toLowerCase();
                if (val.equals("u"))
                    --row;
                else if (val.equals("d"))
                    ++row;
                else if (val.equals("l"))
                    --col;
                else if (val.equals("r"))
                    ++col;
                if (     row >= 0 && row < tableModel.getRowCount()
                      && col >= 0 && col < tableModel.getColumnCount()) {
                    table.changeSelection(row, col, false, false);
                    table.editCellAt(row, col);
                }
            }
        };
        // replace action for ENTER, since next row would be selected automatically
        table.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "handleEnter");
        table.getActionMap().put("handleEnter", handleEnter);
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.setSize(800, 600);
        test.setVisible(true);
    }
}

关于java - JTable中如何控制焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/423524/

相关文章:

eclipse - 如何将自定义组件添加到 Eclipse swing 调色板?

Java双向加密库

java - G1GC 非常高的 GC 计数和 CPU,非常频繁的 GC 会降低性能

java - 从 Eclipse 实例运行 Sonar 代码分析

python - 在 Tkinter TreeView 中插入数据以更正列时面临问题

Java GUI 搜索目录文件

android - 从对话框中删除边框,填充

java - 秒表在 Java 中不起作用

ECC 公钥的 Java 紧凑表示

java - 如何在 JPanel 中设置布局的对齐方式