我是靠谱客的博主 害羞猎豹,最近开发中收集的这篇文章主要介绍JTable通过左右方向键实现焦点切换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

自己想通过方向键控制JTable的焦点移动,最初是通过keyListener,但是却发现只能实现上下的焦点切换,在单元格处于编辑状态时使用左右方向键时根本无法触发监听事件,也就无法实现焦点切换,国内外关于swing的资料都太少了,自己研究了一下国外一个博主提供的代码,然后搜索了一下源码关键词,实现了左右方向键控制焦点的移动。具体原理没有深入研究,希望对需要的同行有所帮助,同样也希望原理的留言告知,谢谢。


public class Sample {
private JFrame frame;
private JPanel panel;
private JTable table;
public Sample() {
initComponents();
}
public void initComponents() {
frame = new JFrame();
panel = new JPanel();
table = new JTable(50, 5);
registerTableActionMap();
table.setColumnSelectionAllowed(true);
table.setPreferredSize(new Dimension(400, 400));
panel.add(table);
frame.getContentPane().add(panel);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
/**
* 注册表格的ActionMap
*/
private void registerTableActionMap(){
final Action leftAction = table.getActionMap().get("selectPreviousColumn");
table.getActionMap().put("selectPreviousColumn", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
leftAction.actionPerformed(e);
int selRow = table.getSelectedRow();
int selCol = table.getSelectedColumn();
table.editCellAt(selRow, selCol);
}
});
final Action rightAction = table.getActionMap().get("selectNextColumn");
table.getActionMap().put("selectNextColumn", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
rightAction.actionPerformed(e);
int selRow = table.getSelectedRow();
int selCol = table.getSelectedColumn();
table.editCellAt(selRow, selCol);
}
});
}
public static void main(String[] args)
{
new Sample();
}
}

代码参考外网:https://www.javaprogrammingforums.com/awt-java-swing/29972-jtable-keybings-defaults-vk_left-vk_right.html

最后

以上就是害羞猎豹为你收集整理的JTable通过左右方向键实现焦点切换的全部内容,希望文章能够帮你解决JTable通过左右方向键实现焦点切换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部