Daten mittels ComboBox in ein JTable adden

tkler

Mitglied
Hallo!
Habe eine Frage zum JTableModel verbunden mit einer ComboBox. Und zwar würde ich gern aus der ComboBox ein symbol auswählen und dieses dann mit meinem "Add Button" in die Tabelle schreiben.
Wie kann ich das anstellen. Habe viel danach gesucht, jedoch haben mir die Beispiele nicht viel gebracht...konnte es leider nicht umsetzen, so wie ich es haben wollte =(
Könnt ihr mir da helfen?

Java:
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;

 
class tableExample {
	DefaultTableModel tabModel;
	JTable table;
 
	public static void main(String[] args) {
		tableExample t = new tableExample();
		
	}
 
	public tableExample() {
		
		String[] symbols = {"DTE", "ADS", "DTE", "ADS"};
		String[] columnNames = {"Name", "Change", "Price"};
		
		Object[][] data = {
				{ "A1", "A2", "A3" },
				{ "B1", "B2", "B3" },
				{ "C1", "C2", "C3" },
				{ "D1", "D2", "D3" } 
			};

		tabModel = new DefaultTableModel(data, columnNames);
		table = new JTable(tabModel);
		JScrollPane scrollPane = new JScrollPane(table);
 
		JComboBox combo = new JComboBox(symbols);
		JPanel buttonPanel = new JPanel();
		JButton cmdAdd = new JButton("Neue Zeile");
		JButton cmdDelete = new JButton("Markierte Zeile löschen");
 
		
		buttonPanel.add(cmdAdd);
		buttonPanel.add(combo);
		buttonPanel.add(cmdDelete);
 
		cmdAdd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object[] tmp = {"","",""};
				tabModel.addRow(tmp);
			}
		});
 
		cmdDelete.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (table.getSelectedRow() != -1) {
					tabModel.removeRow(table.getSelectedRow());
				}
			}
		});
 
		JPanel mainPanel = new JPanel();
		JFrame frame = new JFrame("JTable mit JModel");
		mainPanel.setLayout(new BorderLayout());
		mainPanel.add(scrollPane, "Center");
		mainPanel.add(buttonPanel, "South");
		frame.getContentPane().add(mainPanel);
		frame.pack();
		frame.setVisible(true);
	}
}
 
für 2. Spalte z.B.:
Java:
// JComboBox combo = new JComboBox(symbols);
table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(combo));
//...

Gruß
Attila
 
Hey danke!
Aber ist leider nicht genau das, was ich meinte!

Ich habe ja unten in meinem Layout eine ComboBox, dort wähle ich etwas aus...dann drücke ich auf den Add Button und das soll dann wiederum in der Tabelle erscheinen....also zb. steht dann in einer Zeile
"DTE, DTE, DTE"
 
in Zeile 46 erstellst du die neue Table-Zeile für das add(),
an dieser Stelle musst du das aktuell selektierte Element der ComboBox einfügen?
 
Genau so soll es dann funktionieren! Also brauch ich irgendwie nen Listener, der schaut was in der ComboBox steht und dies wird dann statt der "neuen Zeile" z.B DTE eingefügt!
 
einen Listener an der ComboBox (wie es geht ist im Lehrbuch oder Internet zu finden) brauchst du genau dann,
wenn exakt bei der Selektion dort etwas passieren soll,

wenn aber "und dieses dann mit meinem "Add Button" in die Tabelle schreiben." nur beim Button was passieren soll, reicht dort der Listener wie bisher, du musst nur in diesen Code-Zeilen, 46 usw. das richtige Element auswählen,
ganz normaler Code, einfach abfragen was der Stand ist, kein Listener usw., die ComboBox bzw. deren Model speichert diese Information für dich

kennst du ein TextFeld? dessen Text kannst du auch jederzeit abfragen,
da brauchst du ebenso keinen Listener der bei jedem getippten Buchstaben reagiert
 
Hey, stimmt! Ok, danke...hat alles geklappt 😉

Habs mit dem add button gelöst:

Java:
cmdAdd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
		        String symbols = (String)combo.getSelectedItem();
			if (symbols == "DTE"){
				Object[] tmp = {"DTE","DTE","DTE"};
				tabModel.addRow(tmp);
			}
.....

DANKE!
 

Zurück
Oben