- Megjelent: 2012. augusztus 07
Pár hasznos trükk, ha JTable osztályt használsz: nem kívánt viselkedések megszűntetése, javítása.
Táblázatszerkesztés leállítása ha a felhasználó egy másik komponensre kattint
Megoldás:
JTable table = new JTable();
...
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
Táblázatcella-szerkesző megfelelő fókuszálása, ha a felhasználó a szerkeszthető cellára kattint
Saját szerkesztő komponens használata esetén, amely megvalósítja a TableCellEditor interface-t, a következő kód segít az automatikus fókuszálsban:
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
...
final Component c;
...
SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (c instanceof JComboBox) { ((JComboBox) c).getEditor().getEditorComponent().requestFocusInWindow(); } else if (c instanceof JSpinner) { ((JSpinner.DefaultEditor)((JSpinner) c).getEditor()).getTextField().requestFocusInWindow(); } else{ c.requestFocusInWindow(); } }
});
return c;
}
Az ENTER kellemetlen hatásának megszűntetése
A JTable egyik sokak által kifogásolt viselkedése, hogy ENTER hatására a fókusz egy cellával lejjebb kerül.
JTable table = new JTable();
...
String doNothing = "doNothing";
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(enter, doNothing);
table.getActionMap().put(doNothing, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
// Do nothing
}
});