Heim >Java >javaLernprogramm >Wie erhalte ich die Zeilennummer einer JComboBox in einer JTable nach einem ItemEvent?

Wie erhalte ich die Zeilennummer einer JComboBox in einer JTable nach einem ItemEvent?

DDD
DDDOriginal
2024-12-13 22:47:11866Durchsuche

How to Get the Row Number of a JComboBox in a JTable After an ItemEvent?

Wie erhalte ich die CellRow der JComboBox in einer JTable, wenn ein ItemEvent auftritt?

Sie haben eine JTable mit einer Spalte, die ein enthält JComboBox und ein an die JComboBox angehängter ItemListener, um auf Änderungen zu reagieren. Allerdings fehlt dem ItemListener die Möglichkeit, die Zeile der geänderten ComboBox abzurufen. Um eine andere Spalte in derselben Zeile zu bearbeiten, wenn sich die ComboBox ändert, benötigen Sie die Zeilennummer.

Verstehen des Problems

Im angegebenen Codebeispiel bei einer Änderung in der ComboBox erkannt wird, ruft der ComboBoxListener das betroffene Element ab. Es bietet jedoch keine Möglichkeit, auf die entsprechende Zeile in der JTable zuzugreifen.

Eine Lösung zum Abrufen der CellRow

Wenn Sie ein Kombinationsfeld als Editor verwenden , stellt die Methode TableCellEditor getTableCellEditorComponent() die Zeile als Parameter bereit. Wenn Sie sich auf das entsprechende Beispiel beziehen, das in der Antwort verlinkt ist, können Sie die CellRow wie folgt abrufen:

public void itemStateChanged(ItemEvent e) {
    // Get the table cell editor
    TableCellEditor editor = table.getCellEditor();
    // Get the row of the cell being edited
    int row = table.convertRowIndexToModel(editor.getTableCellEditorComponent(table, ...));
    //...
}

Spalten synchron halten

Um die Synchronisierung zwischen abhängigen Spalten aufrechtzuerhalten, können Sie Überschreibungen vornehmen die getValueAt()-Methode des Modells, um Werte basierend auf verwandten Werten in derselben Zeile dynamisch zu aktualisieren. Beispielsweise könnten Sie den Wert der „anderen Spalte“ in der setValueAt()-Methode des Modells aktualisieren, bevor Sie das Aktualisierungsereignis auslösen.

Beispielimplementierung

Der folgende Code demonstriert diese Lösungen:

import javax.swing.table.DefaultTableModel;

//...

// Override getValueAt() to keep columns synchronized
@Override
public Object getValueAt(int row, int col) {
    if (col == DEPENDENT_COL) {
        return "C2:" + this.getValueAt(row, ITEM_COL);
    } else {
        return super.getValueAt(row, col);
    }
}

//...

// Attach a new ItemListener
combo.addItemListener(new ItemListener() {

    @Override
    public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            // Get the table cell editor
            TableCellEditor editor = table.getCellEditor();
            // Get the row and update the other column
            int row = table.convertRowIndexToModel(editor.getTableCellEditorComponent(table, ...));
            model.setValueAt("C2:" + e.getItem(), row, DEPENDENT_COL);
        }
    }
});

Diese Lösung kombiniert beide Ansätze, um abhängige Spalten zu synchronisieren und die CellRow abzurufen.

Das obige ist der detaillierte Inhalt vonWie erhalte ich die Zeilennummer einer JComboBox in einer JTable nach einem ItemEvent?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn