Heim > Java > javaLernprogramm > Wie ermittelt man die JTable-Zeile, die eine JComboBox enthält, die ein ItemEvent ausgelöst hat?

Wie ermittelt man die JTable-Zeile, die eine JComboBox enthält, die ein ItemEvent ausgelöst hat?

Patricia Arquette
Freigeben: 2024-12-17 16:04:14
Original
645 Leute haben es durchsucht

How to Determine the JTable Row Containing a JComboBox That Triggered an ItemEvent?

Bestimmen der Zeile, die einer JComboBox-Zelle in einer JTable zugeordnet ist

Anfangsfrage:

Sie möchten die Zeile ermitteln Zahl innerhalb einer JTable, die eine JComboBox in einer bestimmten Zelle enthält, wenn ein ItemEvent in der JComboBox ausgelöst wird. Diese Zeilennummer ist entscheidend für nachfolgende Aktionen, die eine andere Zelle in derselben Zeile nach der JComboBox-Änderung betreffen.

Antwort:

Es scheint, dass Sie eine JComboBox als verwenden ein Editor innerhalb der JTable. In solchen Szenarios bietet die Methode getTableCellEditorComponent() der TableCellEditor-Klasse Zugriff auf die Zeile als einen ihrer Parameter. Weitere Einblicke finden Sie in den folgenden Ressourcen:

  • Java-Tutorial: Verwenden einer ComboBox als Editor
  • Beispiel: Anpassen des ComboBox-Editors

Nachtrag zur Wertesynchronisierung:

Um den Wert einer abhängigen Spalte mit dem der zu synchronisieren JComboBox-Spalte, überschreiben Sie die getValueAt()-Methode des Tabellenmodells. Dadurch können Sie den aktualisierten Wert basierend auf dem geänderten Inhalt der JComboBox-Spalte zurückgeben.

Zusätzliches Beispiel:

Der folgende Code veranschaulicht diesen Ansatz, wobei eine abhängige Spalte beibehalten wird synchronisiert mit der JComboBox-Spalte mithilfe der überschriebenen getValueAt()-Methode:

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class Example {

  private static final int DEPENDENT_COL = 1;
  private static final int ITEM_COL = 2;
  private static final String[] columnNames = {"Col 1", "Col 2", "Col 3"};

  public static void main(String[] args) {
    // Create table model
    DefaultTableModel model = new DefaultTableModel(columnNames, 0) {
      @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);
        }
      }
    };

    // Add rows to table model
    for (int i = 0; i < 16; i++) {
      model.addRow(new Object[] {"C1", "C2", "Item1"});
    }

    // Create table and customize JComboBox column
    JTable table = new JTable(model);
    TableColumn col = table.getColumnModel().getColumn(ITEM_COL);
    String[] items = {"Item1", "Item2", "Item3"};
    JComboBox combo = new JComboBox(items);
    col.setCellEditor(new DefaultCellEditor(combo));

    // Create the frame and add the table
    JFrame frame = new JFrame();
    frame.add(new JScrollPane(table));
    frame.pack();
    frame.setVisible(true);
  }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie ermittelt man die JTable-Zeile, die eine JComboBox enthält, die ein ItemEvent ausgelöst hat?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage