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
    }
});

Kapcsolódó cikkek

Kategória: Java

Látogatók

256125
Ma33
Tegnap98
Ezen a héten131
Ebben a hónapban864
Összesen256125
Statistik created: 2024-12-10T06:52:09+01:00
Bejelentkezett felhasználók 0
Regisztrált felhasználók 1
Ma regisztráltak 0