Heim >Java >javaLernprogramm >Wie rufe ich den Zeilenindex einer JComboBox innerhalb einer JTable-Zelle während eines ItemEvents ab?

Wie rufe ich den Zeilenindex einer JComboBox innerhalb einer JTable-Zelle während eines ItemEvents ab?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-09 12:58:11911Durchsuche

How to Retrieve the Row Index of a JComboBox Within a JTable Cell During an ItemEvent?

So erhalten Sie die Zellenzeile einer JComboBox in einer JTable-Zelle während eines ItemEvents

Bei Verwendung einer JComboBox als Zelleneditor in einer JTable , kann es schwierig sein, während eines ItemEvents die mit der geänderten JComboBox verknüpfte Zeile abzurufen. Diese Informationen sind entscheidend für den Zugriff auf andere Spalten in derselben Zeile, wenn eine Aktualisierung basierend auf der Änderung der JComboBox erfolgt.

Lösung:

Der Schlüssel zur Lösung dieses Problems besteht darin, das zu verstehen Die überschriebene Methode des TableCellEditors, getTableCellEditorComponent(), schließt die Zeile als Parameter ein. Nachfolgend finden Sie eine Lösung, die dies nutzt:

import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class JComboBoxCellRowAccess {

    public static void main(String[] args) {
        JTable table = createTable();
        JComboBox<String> comboBox = new JComboBox<>(new String[] { "Item1", "Item2", "Item3" });
        TableColumn column = table.getColumnModel().getColumn(1);
        column.setCellEditor(new DefaultCellEditor(comboBox));

        comboBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                int row = getCellRow(comboBox);
                System.out.println("Row: " + row);
            }
        });
    }

    public static int getCellRow(JComboBox<?> comboBox) {
        TableCellEditor editor = comboBox.getCellEditor();
        if (editor != null) {
            Component component = editor.getTableCellEditorComponent(null, null, true, -1, -1);
            return ((JTable) component.getParent()).getSelectedRow();
        }
        return -1;
    }

    public static JTable createTable() {
        DefaultTableModel model = new DefaultTableModel(new Object[][] { { "Row 0" }, { "Row 1" }, { "Row 2" } }, new String[] { "Column 1" });
        return new JTable(model);
    }
}

Mit dieser Lösung können Sie auf die Zeile der JComboBox im ItemListener zugreifen und so bei Bedarf Informationen aus anderen Spalten in derselben Zeile aktualisieren oder abrufen.

Das obige ist der detaillierte Inhalt vonWie rufe ich den Zeilenindex einer JComboBox innerhalb einer JTable-Zelle während eines ItemEvents ab?. 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