Combobox bei Tabellenänderung mit aktualisieren

C

Creep25

Gast
Servus und Guten Morgen!

folgende Ausgangslage: Ich habe eine ArrayList mit Objekten Maschine (diese haben als Attribute die jeweilige Kennung zB "M1" und weitere Attribute).
Nun greift mein TableModel auf diese ArrayList und mir wird die Liste schön als Tabelle angezeigt. Darunter hab ich eine Combobox, die auch ein eigenes ComboBoxModel hat. Diese CB greift auf die gleiche Liste zu und zeigt die jeweiligen Maschinenkennungen an.
Will ich eine Maschine hinzufügen öffnet sich ein Dialog, bei Klick auf OK leg ich in die Liste das neue Element und sage zum TableModel + Combobox-Model dataChanged. Die aktualisieren sich und passt alles super so.

Nun zu meiner Frage: Ich möchte direkt in die Tabelle klicken können und die Maschinenkennung ändern, das ist soweit kein Problem und funktioniert. Nun möchte ich aber dass bei einer solchen Änderung sich meine Combobox mit aktualisiert.
Ich weiß nun nicht, wie ich das realisieren könnte! Muss man da vom TableModel in der setValueAt sich den Frame holen, dann die Combobox, und sagen aktualisier dich? Das erscheint mir irgendwie einfach falsch und wüsste auch nichtmal, wie das geht.

Ich hoffe, mein Problem ist klar geworden. Gegooglet hab ich bereits und bin nicht fündig geworden leider.
Hätte da jemand nen Tipp oder Ansatz für mich? :)
 

Madlip

Bekanntes Mitglied
ich denke mal das du eine Art "Selection- oder MouseListener" für die Table haben müsstest. In der kannst du doch den refresh für die Combobox machen, sprich:

- du machst deine Änderung in der Tabelle
- speicherst diese in deine ArrayList
- dann nimmst du die "neue" ArrayList und aktualisierst die ComboBox mit dieser.
 
C

Creep25

Gast
danke für die Antwort. An sowas hatt ich auch schon gedacht.

Quasi einen Listener über die jTable legen, der auf "da hat jemand was eingetragen" reagiert.
Ahm angenommen ich möchte mal einfach nur einen println ausgeben, sobald man etwas in der Tabelle direkt ändert. Wie würde der Listener dafür aussehen? Auf welches Ereignis müsste ich den Listener drüberlegen?
 

Madlip

Bekanntes Mitglied
Das ist unterschiedlich, je nachdem auf welche Art event du reagieren möchtest. Ich nachfolgenden Code, ist es so simuliert das wenn du die Auswahl änderst, sprich einen anderen Tabellensatz anklickst -> dann wird dein Code ausgeführt.

Java:
        TableViewer myTable = new TableViewer(Composite);
        myTable.addSelectionChangedListener(new ISelectionChangedListener()
        {
            
            public void selectionChanged(SelectionChangedEvent event)
            {
                System.out.println("In meiner Tabelle hat sich etwas geändert.");
            }
        });

was ich noch hinzufügen muss, das ganze hier dargestellte sind SWT Componente.
 

Madlip

Bekanntes Mitglied
ich hab gerade mal in ein anderen Forum geschaut und folgendes gefunden:

Von Thomas Darimont
Java:
public class JTableNotifyOnEditExample extends JFrame {
 
    JTable table;
 
    String[] header = { "A", "B", "C", "D" };
 
    String[][] rowData = { { "1", "1", "1", "1" }, { "2", "2", "2", "2" },
            { "3", "3", "3", "3" }, { "4", "4", "4", "4" } };
 
    public JTableNotifyOnEditExample() {
        super("JTableNotifyOnEditExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
 
        table = new JTable(rowData, header) {
            public boolean editCellAt(int row, int column, EventObject e) {
 
                if (e == null) {
                    System.out.println("edit!");
                }
 
                if (e instanceof MouseEvent) {
                    MouseEvent mouseEvent = (MouseEvent) e;
                    if (mouseEvent.getClickCount() > 1) {
                        System.out.println("edit!");
                    }
                }
 
                return super.editCellAt(row, column, e);
            }
        };
 
        add(new JScrollPane(table));
        pack();
        setVisible(true);
    }
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        new JTableNotifyOnEditExample();
    }
 
}

ansonsten würd ich dir das hier gern ans Herz legen:
http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/4841-jtable-ubersicht-teil-1-teil-8-a.html
 

bERt0r

Top Contributor
Du schreibst dir eine Modelklasse welche sowohl TableModel als auch ComboboxModel implementiert. Da machst du dann bei jeder Änderung auf beide Komponenten eine Aktualisierung (ModelListener abfeuern).

Wenn dir das zu kompliziert/aufwendig ist (du kannst nicht auf die Funktionen von DefaultTable/DefaultComboBoxModel zugreifen sondern müsstest sie selber programmieren) kannst du auch einfach den Models einer Referenz auf das jeweils andere übergeben. Das kann mit Funktionen "setComboBoxModel(ComboBoxModel)" im TableModel oder per Konstruktor "MyTableModel(ComboBoxModel cbModel) geschehen.
 
C

Creep25

Gast
super, vielen Dank!
Gerade das Beispiel aus dem anderen Forum scheint genau das zu sein, was ich suchte!

Leider kann ich es erst heute Abend testen, ich werds machen und bin guter Dinge! Dann lass ich nach jedem Edit das comboboxModel aktualisieren.

Apropos comboBoxModel aktualisieren. Es ist ein ComboBoxModel extends AbstractListModel implements ComboBoxModel und die erforderlichen Methoden überschrieben. Gibt es da ein Äquivalent zu tableMode.fireTableDataChanged()? (Bisher hab ich für das Aktualisieren eine neue Instanz vom ComboboxModel erstellt und es der CB mit setModel neu zugewiesen).

Ja, die gepostete Einführung in jTables kenne ich und hab ich durchgemacht. Fand ich super, dadurch bin ich auf das Forum hier überhaupt aufmerksam geworden.
 
C

Creep25

Gast
bERTor du meinst, dass ich dem TableModel das ComboBoxModel übergebe und in der setValueAt dann etwas als this.comboBoxModel.refresh schreibe?
Daran hätt ich gar nicht gedacht und klingt ziemlich elegant gelöst!

Dann müsste ich nur noch wissen wie ich ein übergebenes Model selbst aktualisier und nicht jedes Mal der ComboBox eine neue, aktuelle Instanz des CBModels zuweise (wie ichs momentan als Hilfsbrücke mache ^^)
 

bERt0r

Top Contributor
Gibt es da ein Äquivalent zu tableMode.fireTableDataChanged()?
Ja, aber nur im DefaultComboBoxModel. Wenn du aber sowieso nur das ComboBoxModel interface implementierst, pack die 2 Models in eine Klasse:
Java:
class MyModel extends AbstractTableModel implements ComboBoxModel
 
C

Creep25

Gast
Achso, ich füge das ComboBoxModel dem TableModel hinzu und wenn ich dann das TableModel refreshen lasse, wird das CBModel gleich mit aktualisiert?!
Mensch, das wenn klappt wär natürlich super!

Aber wenn ich das CBModel dem TableModel als Attribut hinzufüge und über Konstruktor setzen lasse, aktualisiert sich das dann schon automatisch mit wenn ich TableModel.fireTableDataChanged() sage?

wie oben geschrieben, leider kann ich es erst gegen Abend testen aber schonmal vielen Dank!

(sry ich frage ungern so "blöd", aber sowas hab ich halt noch nie gemacht und ist schwer zu finden/ergooglen)
 

bERt0r

Top Contributor
Nein, aber wenn du die gleiche Datenstruktur für 2 Komponenten hast, macht es meiner Ansicht auch sinn nur ein Model dafür zu machen um die Konsistenz zu sichern.

Hast du dir die Javadoc der Klassen durchgelesen die du implementierst?
ComboBoxModel (Java 2 Platform SE 5.0)
Du musst dich selbst um die ganzen Listeners kümmern, das adden, das abfeuern, das removen. Und du musst eben dafür sorgen, dass bei Aktualisierungen sowohl die TableModelListeners des Tables als auch die ListDataListeners der ComboBox verständigt werden.
 
C

Creep25

Gast
ja, das javadoc hab ich gelesen. Die beiden Methoden hierfür hab ich ja in meinem CBModel bereits drin.

Ja, klingt für mich auch sinnvoll für die selbe Datenbasis nur ein gemeinsames Model zu haben.

danke, ich werde es noch heute probieren!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Element aus comboBox mit observableList löschen AWT, Swing, JavaFX & SWT 3
T Combobox mit Autocomplete-Funktion AWT, Swing, JavaFX & SWT 7
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
N Promt Text der Combobox AWT, Swing, JavaFX & SWT 0
Doppel JavaFX ComboBox AWT, Swing, JavaFX & SWT 5
P JavaFX ClassCastException bei ComboBox.getValue AWT, Swing, JavaFX & SWT 4
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Combobox bild anklicken AWT, Swing, JavaFX & SWT 2
L JavaFX Wiederspenstige ComboBox AWT, Swing, JavaFX & SWT 0
P Combobox und Enum AWT, Swing, JavaFX & SWT 3
L ComboBox Wert automatisch auswählen AWT, Swing, JavaFX & SWT 6
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
K Nullpointer Combobox Listener AWT, Swing, JavaFX & SWT 2
K JavaFX Combobox, Textfield & setOnMouseClicked AWT, Swing, JavaFX & SWT 2
it_is_all Swing Button, ComboBox,... -- Unterschied: NetBeans Design <-> Ausführung AWT, Swing, JavaFX & SWT 2
D JavaFX ComboBox String setzen AWT, Swing, JavaFX & SWT 20
offi Combobox in TableCell AWT, Swing, JavaFX & SWT 1
D Javafx Combobox Abfrage aus mysql AWT, Swing, JavaFX & SWT 8
K Event Handling ComboBox Event Handler AWT, Swing, JavaFX & SWT 7
MrSnake ComboBox-Einträge werden unsichtbar AWT, Swing, JavaFX & SWT 0
L ComboBox: slider positionieren AWT, Swing, JavaFX & SWT 0
M JavaFX ComboBox: Update zur Laufzeit AWT, Swing, JavaFX & SWT 16
M JavaFX Combobox bindBidirectional AWT, Swing, JavaFX & SWT 4
D [Anfänger]ComboBox erstellt Einträge in einer anderen ComboBox AWT, Swing, JavaFX & SWT 3
T JavaFX Editable Combobox Text-Selektierung nach Trigger AWT, Swing, JavaFX & SWT 4
H Combobox aktualisieren AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
M JavaFX ComboBox AWT, Swing, JavaFX & SWT 5
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
J ComboBox als Filter benutzen AWT, Swing, JavaFX & SWT 1
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
Developer_X Java JTable - Combobox + Checkbox - Cellrenderer + Editor AWT, Swing, JavaFX & SWT 3
G Dynamische ComboBox AWT, Swing, JavaFX & SWT 3
U Combobox mit individuellen Texten AWT, Swing, JavaFX & SWT 5
M JavaFX Combobox - Item Auswahl mit Tasten AWT, Swing, JavaFX & SWT 8
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
C Beschriftungen von Tabellenspalten mit Combobox aussuchen AWT, Swing, JavaFX & SWT 2
G JavaFX ComboBox .getItems().add() Problem AWT, Swing, JavaFX & SWT 9
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
B JAVAFX icon in ComboBox einfügen AWT, Swing, JavaFX & SWT 5
W Swing Combobox Abhängigkeit AWT, Swing, JavaFX & SWT 1
S ComboBox-Werte aus einem Array an Textfields übergeben AWT, Swing, JavaFX & SWT 3
A Swing GUI mit ComboBox, wenn Item ausgewählt wurde neues GUI AWT, Swing, JavaFX & SWT 7
S Combobox aktualisieren AWT, Swing, JavaFX & SWT 3
B Erstellen eigener Combobox ("CellFactory") AWT, Swing, JavaFX & SWT 4
C Swing ComboBox - ActionListener deaktivieren AWT, Swing, JavaFX & SWT 2
A combobox automatisch in ein textfeld wechseln AWT, Swing, JavaFX & SWT 3
J Swing Drive-ComboBox AWT, Swing, JavaFX & SWT 7
C TextFeld in Verbindung zur ComboBox automatisch aktualisieren AWT, Swing, JavaFX & SWT 7
L Swing Model für ComboBox AWT, Swing, JavaFX & SWT 14
H Combobox in einer einzelnen Zelle der Jtable AWT, Swing, JavaFX & SWT 2
T Java Combobox Problem AWT, Swing, JavaFX & SWT 3
C SWT Combobox mit Textdatei füllen AWT, Swing, JavaFX & SWT 2
M comboBox Listener? AWT, Swing, JavaFX & SWT 2
R Datenbanktabellen in Combobox AWT, Swing, JavaFX & SWT 3
1 CellEditor mit ComboBox richtig beenden AWT, Swing, JavaFX & SWT 4
L SWT Actionlistener Combobox öffnen AWT, Swing, JavaFX & SWT 4
E Swing CellEditor mit Combobox durch Tastatureingabe editieren?! AWT, Swing, JavaFX & SWT 3
GianaSisters Swing ComboBox im jTable (in bestimmter Zelle nicht über die ganze Spalte) AWT, Swing, JavaFX & SWT 4
T Daten mittels ComboBox in ein JTable adden AWT, Swing, JavaFX & SWT 7
N Filternde Combobox in JTable verliert Fokus nach erster Eingabe AWT, Swing, JavaFX & SWT 2
F Wert zu Eintrag in ComboBox speichern?! AWT, Swing, JavaFX & SWT 7
P Swing ComboBox(en) in JTable auslesen und ausgeben AWT, Swing, JavaFX & SWT 11
M Index von Combobox AWT, Swing, JavaFX & SWT 20
L ComboBox in Action AWT, Swing, JavaFX & SWT 4
D ComboBox & CellListRenderer AWT, Swing, JavaFX & SWT 6
D ComboBox-Model mit Observer AWT, Swing, JavaFX & SWT 3
B Taschenrechner mit ComboBox AWT, Swing, JavaFX & SWT 7
T ComboBox auslesen AWT, Swing, JavaFX & SWT 11
P Combobox liesst falschen Wert AWT, Swing, JavaFX & SWT 10
C Combobox im JFrame aus Datenbank befüllen AWT, Swing, JavaFX & SWT 6
M Combobox soll Farbe einer Komponente setzen AWT, Swing, JavaFX & SWT 2
M Swing ComboBox ein SelectedItem übergeben/anzeigen AWT, Swing, JavaFX & SWT 7
J Werte aus Combobox speichern AWT, Swing, JavaFX & SWT 3
J Combobox als Filterkriterium (Gruppierung) in JTable AWT, Swing, JavaFX & SWT 7
R Swing ComboBox und doppelter Event!? AWT, Swing, JavaFX & SWT 10
M SWT Wie Textfeld hinzufügen, nach Auswahl von einem bestimmten Combobox-item? AWT, Swing, JavaFX & SWT 3
M SWT ComboBox mit DB-Inhalten Designfrage AWT, Swing, JavaFX & SWT 5
W MouseListener im editable ComboBox AWT, Swing, JavaFX & SWT 14
W Combobox mit eingabefeld AWT, Swing, JavaFX & SWT 7
T Editable ComboBox / kein Weiterspringen AWT, Swing, JavaFX & SWT 12
M Combobox in JTable AWT, Swing, JavaFX & SWT 4
S Swing ComboBox aus Array befüllen AWT, Swing, JavaFX & SWT 2
K Per ComboBox Dateien einlesen AWT, Swing, JavaFX & SWT 23
0 Hintergundfarbe von editierbarer ComboBox ändern AWT, Swing, JavaFX & SWT 2
M Frage zu ComboBox AWT, Swing, JavaFX & SWT 7
O Bitte um Hilfe bei ComboBox in TableHeader AWT, Swing, JavaFX & SWT 9
A NetBeans und ComboBox AWT, Swing, JavaFX & SWT 2
SuperSeppel13 Combobox zur Farbwahl kollidiert mit NimbusLookAndFeel AWT, Swing, JavaFX & SWT 7
D ComboBox(Model) mit dummyItem AWT, Swing, JavaFX & SWT 10
D Inhalt von Textfield nach ComboBox AWT, Swing, JavaFX & SWT 2
GilbertGrape nochmal editierbare Combobox AWT, Swing, JavaFX & SWT 3
GilbertGrape JTable mit Combobox-Editierung schon nach einem Klick AWT, Swing, JavaFX & SWT 7
E Swing Button ActionListener Infos aus Textfield und ComboBox AWT, Swing, JavaFX & SWT 3
G ComboBox wird nicht angezeigt beim anhängen an eine Gruppe AWT, Swing, JavaFX & SWT 2
G Combobox Event AWT, Swing, JavaFX & SWT 4
G ComboBox aktualisieren AWT, Swing, JavaFX & SWT 13
C Binding eines EntityBean als SelectionInList in ComboBox AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben