Ich möchte den Editor in meinen bearbeitbaren JTables haben, wenn Sie den gesamten Text in der Zelle auswählen, wenn Sie mit der Bearbeitung beginnen. Ich habe ein paar Dinge ausprobiert, die sich alle um den Aufruf von JTextComponent.selectAll() für die Komponente drehen, die von der TableCellEditor.getTableCellEditorComponent-Methode zurückgegeben wird. Keines der Dinge, die ich versuchte, funktionierte.So wählen Sie den gesamten Text in der JTable-Zelle beim Bearbeiten aus
Bei meinem letzten Versuch habe ich die SimpleTableDemo-Klasse aus dem Swing-Lernprogramm geändert, um einen benutzerdefinierten TableCellEditor zu verwenden, der die selectAll-Methode aufruft. Im Debugger kann ich sehen, dass die selectAll() -Methode aufgerufen wird, aber die Tabelle geht immer noch in den Bearbeitungsmodus, ohne den Text in der Zelle auszuwählen (oder die Auswahl wird vor der Anzeige gelöscht). Dieser Code ist unten. Kann mir jemand sagen, wo ich falsch liege?
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
Danke, Camickr! Ich konnte sehen, dass die Auswahl gemacht wurde, also dachte ich, dass sie wahrscheinlich später entfernt würde. Ich dachte nicht daran, einen weiteren Lauf auf den AWT-Thread zu setzen, damit er zuletzt ausgeführt wird. Ich schaute kurz auf dein RXTable, und das sieht interessant aus. Mein Ziel ist es, eine Basistabelle mit einigen Eigenschaften zu versehen, von denen ich erwarte, dass sie oft verwendet wird, und ich werde wahrscheinlich mit etwas sehr ähnlich wie RXTable enden. Danke noch einmal. – user564874
Große Antwort. Es fiel mir schwer herauszufinden, warum Select All nicht funktioniert. Der Schlüssel ist zu wissen, dass der letzte Mausklick zum Texteditor geht und dann sicherstellt, dass selectAll() aufgerufen wird, nachdem der letzte Mausklick verarbeitet wurde. –
Danke für diese Antwort! Hatte eine Menge Schwierigkeiten damit, es selbst zu implementieren. – flash