问题描述
|
我的jlist是这样的单元格,其中单元格是正方形且具有固定大小,并且视口已被它们填满,因此列数(我想是行数)实际上可以改变。
我执行此操作的代码相当复杂:
http://code.google.com/p/bookjar-utils/source/browse/BookJar-utils/src/util/swing/components/ImageList.java
我想做的是允许使用箭头键进行不同的键盘移动-如果选定的单元格与视口的西边或东边相遇,则不仅仅使用↑和↓上下移动行,还允许←和→。
我应该只计算\“行\”中容纳多少个单元格,并为默认行为似乎无能为力时在边缘接管的箭头添加关键侦听器?
为此,原始行为在哪里定义?如果←和→键不在行的边缘,则它们可以在一行中移动。
解决方法
在Swing中,每个小部件都有其自己的UI类来控制其行为。 LookAndFeel管理小部件和UI之间的这些链接(体系结构概述)。
因此,恕我直言,正确执行操作的地方是扩展BasicTableUI并覆盖为键盘操作定义小部件ActionMap的方法,用您自己的实现替换一些操作:
class MyTableUI extends BasicTableUI {
...
@Override
protected void installKeyboardActions() {
super.installKeyboardActions();
final ActionMap actionMap = getTable().getActionMap();
actionMap.put( NEXT_ROW,new MyNewRowSelectionAction( NEXT_ROW,actionMap.get( NEXT_ROW ) ) );
...
请注意,ActionMap的键在BasicTableUI.Actions中是私有的,因此需要复制它们。