Java Combobox in JTable anzeigen und befüllen!

Xerxes18

Lieutenant
Registriert
Aug. 2008
Beiträge
694
Guten Tag liebe Gemeinde,

zunächst habe ich alles erdengliche probiert, aber es will einfach nicht funktionieren!

Das ganze muss so aussehen:



Aber wenn ich ein Produkt hinzufüge, klappt das nicht, siehe hier:




Ich möchte natürlich auch, dass so viele Produkte gekauft werden können, wie vorhanden sind, aber erstmal möchte ich, dass die Combobox überhaupt angezeigt wird :D


Hier mein Code:

Code:
package View;


import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Vector;

import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

import fpt.com.Product;

import Amain.HardwareShop;
import Model.ModelShop;

public class ViewCustomer extends JFrame implements java.util.Observer{
	
	
	public JScrollPane scroll;
	public static JTable table1;
	public JButton bestellen;
	private ModelShop model;
	private DefaultTableModel dm=new DefaultTableModel();;
	



	@Override
	public void update(Observable o, Object arg) {
		// TODO Auto-generated method stub

	}

	public ViewCustomer(ModelShop model) {
		
		this.model=model;
		
		model.addObserver(this);
		
		dm.addColumn("Name");
		dm.addColumn("Quantity");
		dm.addColumn("Price");
		dm.addColumn("Buy");
		

		scroll = new JScrollPane();

		table1 = new JTable(dm);
		bestellen = new JButton();
		
		TableColumn sportColumn = table1.getColumnModel().getColumn(3);

		JComboBox comboBox = new JComboBox();
		
		comboBox.addItem("Snowboarding");
		comboBox.addItem("Rowing");
		comboBox.addItem("Chasing toddlers");
		comboBox.addItem("Speed reading");
		comboBox.addItem("Teaching high school");
		comboBox.addItem("None");
		
		sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
		
				

		//======== viewCustomer ========
		{
			int frameWidth = 645;
			int frameHeight = 380;
			
			setSize(frameWidth, frameHeight);

			Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
			int x = (d.width - getSize().width) / 2;
			int y = (d.height - getSize().height) / 2;


			setLocation(x, y);
			setLayout(null);
			setTitle("View-Costumer");

			//======== Scrollbar ========
			{
				scroll.setViewportView(table1);
				add(scroll);
				scroll.setBounds(0, 15, 645, 270);
			}

			//---- bestellen ----
			bestellen.setText("Bestellen");
			add(bestellen);
			bestellen.setBounds(270, 290, 111, 35);

			setResizable(false);
			setVisible(true);
			
		}
		
	}
	

}

Vielen Dank!

EDIT:

Also so sieht es aus wenn ich eine comboBox hinzufügen will bei der Update Methode:



Hier die Update Methode:

Code:
public void updateTables(){
		
		DefaultTableModel dm= new DefaultTableModel();

		dm.addColumn("Name");
		dm.addColumn("Quantity");
		dm.addColumn("Price");
		
		for(int i = 0; i < list.size(); i++) {
			Vector<Object> rowData = new Vector<Object>();

			
			rowData.add(list.get(i).getName());
			rowData.add(list.get(i).getQuantity());
			rowData.add(list.get(i).getPrice());
			
			dm.addRow(rowData);
			ViewShop.table1.setModel(dm);
			setChanged();
			notifyObservers();
		}
		

		DefaultTableModel dtm= new DefaultTableModel();
		
		dtm.addColumn("Name");
		dtm.addColumn("Quantity");
		dtm.addColumn("Price");
		dtm.addColumn("Buy");

		for(Product pro: list) {	

			Vector<Object> roData = new Vector<Object>();
			JComboBox combo= new JComboBox();

			roData.add(pro.getName());
			roData.add(pro.getQuantity());
			roData.add(pro.getPrice());
			roData.add(combo);

			dtm.addRow(roData);
			
			ViewCustomer.table1.setModel(dtm);
			ViewCustomer.table1.repaint();
			ViewCustomer.table1.revalidate();
			
			setChanged();
			notifyObservers(pro);
			

		}
	
	}
 
Zuletzt bearbeitet:
Evtl. mal den Renderer neuschreiben?

ich glaube der standart Renderer gibt einfach nur die String präsentation des Obejkts aus das dass Model liefert.

ist einfach schon zu lange her, ich hatte das problem auch mal, ich glaub man kann auch den Typ der Spalten im Model setzen.
 
Zuletzt bearbeitet:
danke erstmal für den tipp, aber leider hat das auch nicht funktoniert!

ich kriege bald echt kopfschmerzen, ich begreife das nicht :(

so viele hits und keiner eine Idee? :(
 
Zuletzt bearbeitet:
Bist du diesem Beispiel hier mal gefolgt? Das sieht ja gar nicht so verkehrt aus mit seinem eigenen Renderer da und es scheint ja zu funktionieren.
 
Zurück
Oben