Я хотел бы, чтобы редактор в моих редактируемых JTables выбирал весь текст в ячейке, когда начинал редактировать. Я пробовал пару вещей, которые все вращаются вокруг вызова JTextComponent.selectAll() для компонента, который возвращается из метода TableCellEditor.getTableCellEditorComponent. Ни одна из вещей, которые я пробовал, не срабатывала.
В моей последней попытке я изменил класс SimpleTableDemo из учебника Swing, чтобы использовать собственный TableCellEditor, который вызывает метод selectAll. В отладчике я вижу, что вызывается метод selectAll(), но таблица по-прежнему переходит в режим редактирования, не выбирая текст в ячейке (или, возможно, выбор очищается перед отображением). Этот код приведен ниже. Может ли кто-нибудь сказать мне, где я ошибаюсь?
import javax.swing.DefaultCellEditor; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import javax.swing.text.JTextComponent; import java.awt.Component; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class SimpleTableDemo extends JPanel { private boolean DEBUG = false; public SimpleTableDemo() { super(new GridLayout(1,0)); String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"}; Object[][] data = { {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)}, {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)}, {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)}, {"Jane", "White", "Speed reading", new Integer(20), new Boolean(true)}, {"Joe", "Brown", "Pool", new Integer(10), new Boolean(false)} }; final JTable table = new SelectingTable(data, columnNames); table.setPreferredScrollableViewportSize(new Dimension(500, 70)); table.setFillsViewportHeight(true); if (DEBUG) { table.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { printDebugData(table); } }); } //Create the scroll pane and add the table to it. JScrollPane scrollPane = new JScrollPane(table); //Add the scroll pane to this panel. add(scrollPane); } private void printDebugData(JTable table) { int numRows = table.getRowCount(); int numCols = table.getColumnCount(); javax.swing.table.TableModel model = table.getModel(); System.out.println("Value of data: "); for (int i=0; i