首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在JTable中控制焦点

如何在JTable中控制焦点
EN

Stack Overflow用户
提问于 2009-01-08 07:34:57
回答 1查看 26.4K关注 0票数 3

我想要做的是当用户编辑完表格单元格中的数据时,根据用户输入的内容将焦点移动到另一个单元格上,并将该单元格转换为编辑模式,以便用户可以立即开始键入,而不需要额外的操作。这样,用户可以专注于自己的工作,软件将“思考”下一步应该编辑哪个单元格。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-01-08 10:09:00

请尝试这个示例。

它应该允许您通过输入Up、Down、Left、Right的值u、d、l、r来在表中导航。

希望这篇文章能给你一个关于如何做的想法。

代码语言:javascript
复制
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);
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/423524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档