【发布时间】:2023-03-24 06:15:02
【问题描述】:
我有一个JTable,我需要更改内部的遍历,以便TAB 击键逐行推进。 (通常,TAB 击键逐个单元格前进。)我能够更改 TAB 击键上的前向遍历。我在 SHIFT+TAB 上尝试了相同的反向遍历。我无法捕获 SHIFT+TAB。
InputMap im = myTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
ActionMap am = myTable.getActionMap();
// make shift+tab row to row instead of cell to cell
Action shiftTabActionmyTable = new AbstractAction("SHIFT+TAB")
{
public void actionPerformed(ActionEvent e)
{
System.out.println("!!!!!!!!!!!!!!!!!!!!!!inside");
int rowView = myTable.getSelectedRow();
int numRows = myTable.getRowCount();
if (0 < numRows)
{
if ((-1 == rowView) || (0 == rowView))
{
// Move to last row
rowView = numRows - 1;
}
else
{
// Move to prev row
rowView--;
}
myTable.changeSelection(rowView, 0, false, false);
myTable.scrollRectToVisible(myTable.getCellRect(rowView, COL_ICON, true));
}
}
};
KeyStroke VK_Shift_Tab = KeyStroke.getKeyStroke("SHIFT+TAB");
im.put(VK_Shift_Tab, shiftTabActionmyTable.getValue(Action.NAME));
am.put(shiftTabActionmyTable.getValue(Action.NAME), shiftTabActionmyTable);
System.out.println("!!!!!!!!!!!!!!!!!!!!!!Name " + shiftTabActionmyTable.getValue(Action.NAME));
// Make tab row to row instead of cell to cell
Action tabActionmyTable = new AbstractAction("TAB")
{
public void actionPerformed(ActionEvent e)
{
int rowView = myTable.getSelectedRow();
int numRows = myTable.getRowCount();
if (0 < numRows)
{
if ((-1 == rowView) || ((numRows - 1) == rowView))
{
// Move to first row
rowView = 0;
}
else
{
// Move to next row
rowView++;
}
myTable.changeSelection(rowView, 0, false, false);
myTable.scrollRectToVisible(myTable.getCellRect(rowView, COL_ICON, true));
}
}
};
KeyStroke VK_Tab = KeyStroke.getKeyStroke("TAB");
im.put(VK_Tab, tabActionmyTable.getValue(Action.NAME));
am.put(tabActionmyTable.getValue(Action.NAME), tabActionmyTable);
如何在JTable 中捕获 SHIFT+TAB?
【问题讨论】:
标签: java swing key-bindings key-events