Frage

Ich war auf der Suche nach einer Antwort für eine vorherige Frage und hatte eine geniale Idee zu überwinden eine Grenze für JTable. Ich brauche die Editor-Reihe-Basis auf einer Reihe unterschiedlich zu sein, während JTable kann nur einen einzigen Editor für jede Spalte behandeln.

Also meine Idee ist, eine MouseListener zu verwenden, um die Zeile und Spalte auf der JTable zu überprüfen und neuen Editor jedes Mal gesetzt.

Aber, ruft setCellEditor() ein zweites Mal keine Auswirkungen haben. Der Editor bleibt die erste sein, die eingestellt wurde. So wie kann ich „setCellEditor“ arbeiten, um ein zweites Mal für die gleiche Spalte machen?

Hier ist der Code in MouseListener.

public void mouseClicked(MouseEvent e) {
    int cols = resultTable.columnAtPoint(new Point(e.getX(), e.getY()));
    int rows = resultTable.rowAtPoint(new Point(e.getX(), e.getY()));
    StorageObject item = (StorageObject) resultTable.getModel().getValueAt(rows, cols);
    TableColumn col = resultTable.getColumnModel().getColumn(cols);
    col.setCellEditor(new MyComboBoxEditor(item.list));
}
War es hilfreich?

Lösung

Ich bin mir nicht sicher, warum der Code nicht funktioniert (es ist schon eine Weile her, seit ich Schwingen getan habe), aber warum Sie nicht einfach außer Kraft setzen

public TableCellEditor getCellEditor(int row, int column)

Auf dem JTable? Pflegen Sie eine Karte der Combo-Boxen Sie für jede Zeile verwenden möchten und in Ihrem überschriebene Methode gibt die richtige ist.

Andere Tipps

Meine Theorie ist, dass, wenn alle Mäuse Zuhörer in die Tabelle eingetragen / Tablecell aufgerufen werden, die an die API-Klassen standardmäßig installierten diejenigen zuerst aufgerufen werden, bevor Sie mit der Maus Zuhörern. Das bedeutet, das Ereignis den Editor geholt werden verursacht wird auftreten, bevor Sie es auf einem anderen gesetzt. Wie eine Art Race-Bedingung, es ist eigentlich nur irgendwo in dem API-Quellcode definiert ... Das ist meine naive Theorie und ich kann schon einige Löcher, so weiter zu meiner Lösung finden Sie unter:

JTable.getCellEditor (int row, int col) . Dies ermöglicht es Ihnen, was Editor Sie für jede Zelle zurückkehren wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top