Mam wiele niestandardowych edytorów dla JTable i jest to mało powiedziane stwierdzenie, że brakuje użyteczności, szczególnie w odniesieniu do edycji za pomocą klawiatury.JTable ze złożonym edytorem
Głównym powodem jest to, że moi redaktorzy są zawsze tworzone z podobną (choć często bardziej skomplikowanej sytuacji) to:
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
JPanel container = new JPanel();
container.setLayout(new BorderLayout());
container.add(field, BorderLayout.CENTER);
field.setText((String) value);
container.add(new JButton("..."), BorderLayout.EAST);
return container;
}
tj panel z więcej niż jednego składnika wewnątrz. Faktyczny edytor tekstu jest potomkiem komponentu zwracanego jako edytor. Odkładając problemy na bok, z tego co wiem, JTable skupia komponent zwracany przez metodę getTableCellEditorComponent
, więc po naciśnięciu klawisza z podświetloną komórką przechodzi fokus, a klawisz naciska na panel, myśląc, że to jest redaktor.
Czy mimo to mogę poinformować JTable, że "prawdziwym" edytorem jest JTextfield? Dodanie hacky requestFocusInWindow
na właściwym komponencie jest niewystarczające, ponieważ naciśnięcie klawisza nie zostanie przekazane.
Tak, dziękuję. Właśnie otrzymałem podobne porady na forum słońca. http://forums.sun.com/thread.jspa?threadID=5368525 –