下面是一個代碼片段,我放在一起的,我是工作的一個項目。該代碼已經過測試並驗證了在第一列和最後一列中具有不可編輯單元格的表格。該類將選項卡限制爲僅限表格的可編輯單元格。它也支持反向移動標籤到標籤。
public class JTableCellTabbing {
/**
*
* Creates a new {@code JTableCellTabbing} object.
*
*
*/
private JTableCellTabbing() {
}
/**
*
* Set Action Map for tabbing and shift-tabbing for the JTable
*
*
* @param theTable - Jtable with NRows and MCols of cells
* @param startRow - valid start row for tabbing [ 0 - (numRows-1) ]
* @param numRows - Number of rows for tabbing
* @param startCol - valid start col for tabbing [ 0 - (numCols-1) ]
* @param numCols - Number of columns for tabbing
*/
@SuppressWarnings("serial")
static public void setTabMapping(final JTable theTable, final int startRow, final int numRows, final int startCol, final int numCols) {
if (theTable == null) {
throw new IllegalArgumentException("theTable is null");
}
// Calculate last row and column for tabbing
final int endRow = startRow + (numRows - 1);
final int endCol = startCol + (numCols - 1);
// Check for valid range
if ((startRow > endRow) || (startCol > endCol)) {
throw new IllegalArgumentException("Table Size incorrect");
}
// Get Input and Action Map to set tabbing order on the JTable
InputMap im = theTable.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
ActionMap am = theTable.getActionMap();
// Get Tab Keystroke
KeyStroke tabKey = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
am.put(im.get(tabKey), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
int row = theTable.getSelectedRow();
int col = theTable.getSelectedColumn();
col++;
// Move to next row and left column
if (col > endCol) {
col = startCol;
row++;
}
// Move to top row
if (row > endRow) {
row = startRow;
}
// Move cell selection
theTable.changeSelection(row, col, false, false);
}
});
// Get Shift tab Keystroke
KeyStroke shiftTab =
KeyStroke.getKeyStroke(KeyEvent.VK_TAB, java.awt.event.InputEvent.SHIFT_DOWN_MASK);
am.put(im.get(shiftTab), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
int row = theTable.getSelectedRow();
int col = theTable.getSelectedColumn();
col--;
// Move to top right cell
if (col < startCol) {
col = endCol;
row--;
}
// Move to bottom row
if (row < startRow) {
row = endRow;
}
// Move cell selection
theTable.changeSelection(row, col, false, false);
}
});
}
}
而這裏的類是如何使用您的表:
JTable myTable = new JTable();
// Set up table attributes....
JTableCellTabbing.setTabMapping(myTable, 0, NUM_ROWS, 1, (NUM_COLS-1));
很好聽的答案是有用的。 – n002213f 2010-06-10 18:14:13