Renderer Editoren und die JCombobox

NochKeinGuru

Mitglied
Hallo zusammen,

ich bekomme es ums Verrecken nicht hin, eine JCombobox in einer Tabellenspalte richtig zu implementieren.
Ich habe es zwar schon hin bekommen, jedoch verschwindet dann nach einer Änderung in der Combobox das JComboBox Object aus dem Modell und es steht nur der String drin der ausgewählt wurde. Ist das normal?!?

Also ich habs so implementiert:
Java:
        String[] header = {"Datum","Buchungstext","Betrag","Zuweisen"};
		model = new DefaultTableModel(header,0);
		JTable tab = new JTable(model);
		tab.setRowHeight(20);
		SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy");	
		concatenated = Tools.concat(new String[]{" ","löschen"},Cathegories.getCathegories());
		
		Iterator<OpenPoint> it = m.getPoints().iterator();			
		while(it.hasNext()){
			OpenPoint open = (OpenPoint)it.next();				
			String newname = df.format(open.getDate());
			Object[] data = {newname,open.getText(),formatString(open.getMoney()), new JComboBox(concatenated)};
			model.addRow(data);
		}		

		    	
		tab.getColumnModel().getColumn(3).setCellRenderer(new ComboBoxCellRenderer(new JComboBox(concatenated)));
		tab.getColumnModel().getColumn(3).setCellEditor(new ComboBoxCellEditor(m,new JComboBox(concatenated),model));
		
// Set learned data as default if something is available
		for(int i=0;i<model.getRowCount();i++){
			String data = Cathegories.getLearnData((String)model.getValueAt(i, 0), (String)model.getValueAt(i, 1), (String)model.getValueAt(i, 2));
			JComboBox cb = ((JComboBox)model.getValueAt(i, 3));
			cb.setSelectedItem(data);
			model.setValueAt(cb,i, 3);
		}

Der Renderer:

Java:
public class ComboBoxCellRenderer extends JComboBox implements TableCellRenderer {

    private JComboBox cb = null;
			
    public ComboBoxCellRenderer(JComboBox jComboBox)
    {    	
    	cb = jComboBox;    	
    }
    public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column)
    {                  	
    	
    	if(value instanceof JComboBox)
    		return (JComboBox)value;
    	else{
    		cb.setSelectedItem(value);
		table.getModel().setValueAt(cb,row, 3);

		return (JComboBox)table.getModel().getValueAt(row, 3);
    	}    	
     }  
}

Der Editor:

Java:
public class ComboBoxCellEditor extends DefaultCellEditor implements ItemListener
{
	  private JComboBox cb = null;
	  private Month m = null;
	  private DefaultTableModel model = null;
	  private int row = 0;
	       
	  public ComboBoxCellEditor(Month month, JComboBox jComboBox, DefaultTableModel model){	  
		  super(jComboBox);
		  cb = jComboBox;
		  cb.addItemListener(this);
		  this.m = month;
		  this.model = model;	
	  }
  
	  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int colIndex )
	  {
		  row = rowIndex;
		
		  if(value instanceof JComboBox){
			  return (JComboBox) value;		  
		  }
		  else{
				cb.setSelectedItem(value);
				model.setValueAt(cb,row, 3);

			  return (JComboBox)model.getValueAt(row, 3);
		  }
	  }

	@Override
	public void itemStateChanged(ItemEvent arg0) {		
		cb = (JComboBox)model.getValueAt(row, 3);
		cb.setSelectedIndex(((JComboBox)arg0.getSource()).getSelectedIndex());
		model.setValueAt(cb,row, 3);
		
		Cathegories.addLearnData((String)cb.getSelectedItem(), (String)model.getValueAt(row, 0),(String)model.getValueAt(row, 1),(String)model.getValueAt(row, 2));
	}
  
}

Ich dachte wenn ich alles auf die Instanz der Combobox in den jeweiligen Zellen des Modells beziehe, dann müsste es doch funktionieren?!?
Trotzdem bleibt die Combobox immer leer. Ich verstehe auch nicht wieso "value" manchmal überhaupt vom Typ String sein kann, da ich doch die Combobox nie in einen String wandle?

In einigen Beispielen im Internet wir immer diese Instanz "cb" der Combobox im Renderer verwendet. Aber wozu wenn man eigentlich auf der Instanz im Modell arbeitet?!?

Oder legt man die Instanz gar nicht in das Modell?

Hoffe jemand kann mir das mal erklären.

Mfg keinGuru
 

NochKeinGuru

Mitglied
Danke Andre.. ich hoffe ich habe es nun sauber hinbekommen.

Würde mich über konstruktive Kritik darüber noch freuen, da ich aus den ganzen Tutorials ned schlau werde.

Ich gebe nun nur ein "" beim Anlegen der Combobox anstatt einer richtigen Combobox mit.
Allgemein wird im Modell nun nur noch der ausgewählte String der Combobox gespeichert.

Java:
String[] header = {"Datum","Buchungstext","Betrag","Zuweisen"};
		model = new DefaultTableModel(header,0);
		JTable tab = new JTable(model);
		tab.setRowHeight(20);
		SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy");	
		concatenated = Tools.concat(new String[]{" ","löschen"},Cathegories.getCathegories());
		
		Iterator<OpenPoint> it = m.getPoints().iterator();			
		while(it.hasNext()){
			OpenPoint open = (OpenPoint)it.next();				
			String newname = df.format(open.getDate());			
			Object[] data = {newname,open.getText(),formatString(open.getMoney()),""};
			model.addRow(data);
		}		

		tab.getColumnModel().getColumn(3).setCellRenderer(new ComboBoxCellRenderer(new JComboBox(concatenated)));
		tab.getColumnModel().getColumn(3).setCellEditor(new ComboBoxCellEditor(m,new JComboBox(concatenated),model));
		
		// Set learned data as default if something is available
		for(int i=0;i<model.getRowCount();i++){
			String data = Cathegories.getLearnData((String)model.getValueAt(i, 0), (String)model.getValueAt(i, 1), (String)model.getValueAt(i, 2));
			model.setValueAt(data,i, 3);
		}

Der Renderer ist ganz nüchtern und auch nicht mehr von JCombobox abgeleitet:

Java:
public class ComboBoxCellRenderer implements TableCellRenderer {

	private JComboBox cb = null;
			
    public ComboBoxCellRenderer(JComboBox jComboBox)
    {    	
    	cb = jComboBox;    	        
    }
    public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column)
    {   
    	cb.setSelectedItem(value);
		  return cb;
     }  


}

Der Editor ist nun auch mit weniger code gefüllt und bei ItemChanged wird nun auch in das Modell nur der ausgewählte String geschrieben.

Java:
public class ComboBoxCellEditor extends DefaultCellEditor implements ItemListener
{
	  private JComboBox cb = null;
	  private Month m = null;
	  private DefaultTableModel model = null;
	  private int row = 0;
	       
	  public ComboBoxCellEditor(Month month, JComboBox jComboBox, DefaultTableModel model){	  
		  super(jComboBox);
		  cb = jComboBox;
		  cb.addItemListener(this);
		  this.m = month;
		  this.model = model;	
	  }
  
	  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int colIndex )
	  {
		  row = rowIndex;	  
		
		  cb.setSelectedItem(value);
		  return cb;
	  }

	@Override
	public void itemStateChanged(ItemEvent arg0) {
				
		model.setValueAt(((JComboBox)arg0.getSource()).getSelectedItem(),row, 3);
		
		Cathegories.addLearnData((String)cb.getSelectedItem(), (String)model.getValueAt(row, 0),(String)model.getValueAt(row, 1),(String)model.getValueAt(row, 2));
	}
  
}

was meint ihr dazu? Ist das so sauber implementiert?

Danke
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
L JavaFX Renderer für JavaFX AWT, Swing, JavaFX & SWT 2
T Table Renderer AWT, Swing, JavaFX & SWT 2
D Swing JTable Renderer Grafikfehler AWT, Swing, JavaFX & SWT 0
M JTable Cell Renderer- Terminplaner AWT, Swing, JavaFX & SWT 2
B JTable Renderer / Listener AWT, Swing, JavaFX & SWT 7
H default cell renderer AWT, Swing, JavaFX & SWT 3
C JComboBox Renderer Problem AWT, Swing, JavaFX & SWT 7
P Swing HTML-Renderer AWT, Swing, JavaFX & SWT 15
B MouseListener im Renderer einer JComboBox AWT, Swing, JavaFX & SWT 3
Z Swing JTable: Boolean Renderer AWT, Swing, JavaFX & SWT 3
B LookAndFeel Cell Renderer für JTable bei Nimbus Look and Feel AWT, Swing, JavaFX & SWT 2
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
Y PDF-renderer AWT, Swing, JavaFX & SWT 6
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
R [JTree/DefaultTreeCellRenderer] eigenes Renderer-Panel, so breit wie der JTree AWT, Swing, JavaFX & SWT 2
T JTable mit Renderer sortiert die gerenderte Spalte nicht richtig AWT, Swing, JavaFX & SWT 2
R Swing TableRowSorter und Header Renderer AWT, Swing, JavaFX & SWT 2
N JTable, Renderer mit Button AWT, Swing, JavaFX & SWT 3
D JTable - JCheckbox und Renderer AWT, Swing, JavaFX & SWT 2
G JComboBox Renderer problem AWT, Swing, JavaFX & SWT 5
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
G Cell Renderer AWT, Swing, JavaFX & SWT 5
N Verständnissfrage: Jtable und DefaultTableCell Renderer AWT, Swing, JavaFX & SWT 2
Tom299 Cell Renderer mit Link AWT, Swing, JavaFX & SWT 2
D Problem bei meinem Cell Renderer AWT, Swing, JavaFX & SWT 2
K jtable jpanel renderer AWT, Swing, JavaFX & SWT 2
C Fragen zur Darstellung einer JTable mittels Renderer AWT, Swing, JavaFX & SWT 2
S JTree - Renderer - Font AWT, Swing, JavaFX & SWT 3
L Renderer mit nativen komponenten in tabelle / tree / list AWT, Swing, JavaFX & SWT 4
M JTree mit eigenem Renderer sieht seltsam aus AWT, Swing, JavaFX & SWT 2
S JComboBox, ein Renderer und das selektierte Objekt AWT, Swing, JavaFX & SWT 4
C Proleme mit eigenem Cell Renderer AWT, Swing, JavaFX & SWT 3
M Ganz spezieller Renderer für meinen JTree AWT, Swing, JavaFX & SWT 2
M setOpaque() bei eigenem Renderer AWT, Swing, JavaFX & SWT 5
M Symbole beim eigenen Renderer AWT, Swing, JavaFX & SWT 7
M Renderer AWT, Swing, JavaFX & SWT 2
K JTable Renderer AWT, Swing, JavaFX & SWT 11
K JTable Renderer - Probs mit Icon AWT, Swing, JavaFX & SWT 3
V SWT eigener Renderer? + wo gibts die Sourcen für SWT AWT, Swing, JavaFX & SWT 2
T Problem mit JTable - Renderer AWT, Swing, JavaFX & SWT 3
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
R JComboBox abfragen AWT, Swing, JavaFX & SWT 1
Esquid If Befehl bei JComboBox AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
D JComboBox Strings aus JTextFields zuordnen AWT, Swing, JavaFX & SWT 2
F JComboBox und Model AWT, Swing, JavaFX & SWT 10
I Editierbare JComboBox, die nur Ganzzahlen als Eingabewerte zulässt AWT, Swing, JavaFX & SWT 3
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
Hatsi09 JCombobox default wert AWT, Swing, JavaFX & SWT 6
D Swing JCombobox Aktion löscht Grafik AWT, Swing, JavaFX & SWT 1
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
R Swing Java9 NullPointerException bei JComboBox AWT, Swing, JavaFX & SWT 13
ralfb1105 Swing JComboBox update der Daten AWT, Swing, JavaFX & SWT 8
D Swing JCombobox Weiße Leerzeilen AWT, Swing, JavaFX & SWT 10
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
D Swing Java JComboBox Example AWT, Swing, JavaFX & SWT 16
K Swing JComboBox mit ArrayList füllen AWT, Swing, JavaFX & SWT 4
D Swing "blaues" Element aus JComboBox erhalten AWT, Swing, JavaFX & SWT 6
F JComboBox und Einträge AWT, Swing, JavaFX & SWT 3
gamillton Swing JComboBox mit extra Inhalt + breiteres Popupmenü AWT, Swing, JavaFX & SWT 0
T JPanelsteuerung mit JComboBox AWT, Swing, JavaFX & SWT 5
N Swing Duplikate im Jcombobox vermeiden AWT, Swing, JavaFX & SWT 15
L Swing JComboBox kann nicht erstellt werden! AWT, Swing, JavaFX & SWT 2
C JComboBox Objecte übergeben und Eintrag auswählen AWT, Swing, JavaFX & SWT 3
M Swing JComboBox mit Laufwerksbuchstaben (Windows) AWT, Swing, JavaFX & SWT 6
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
3 JComboBox - Action - Auslesen & Umwandeln AWT, Swing, JavaFX & SWT 9
M Alle Schriftarten in JComboBox AWT, Swing, JavaFX & SWT 5
M Swing JComboBox eigenes Design AWT, Swing, JavaFX & SWT 3
Sin137 JComboBox mit Generics AWT, Swing, JavaFX & SWT 14
R JComboBox erweitern AWT, Swing, JavaFX & SWT 5
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
V Editierbare JComboBox AWT, Swing, JavaFX & SWT 2
D Swing JCombobox in einem JTable vorbelegen AWT, Swing, JavaFX & SWT 4
F neuen Menüpunkt in jcombobox einfügen AWT, Swing, JavaFX & SWT 1
F Swing Jcombobox mit manueller Rückgabe AWT, Swing, JavaFX & SWT 4
W JComboBox auffristen nach Listenänderung AWT, Swing, JavaFX & SWT 20
S JComboBox mit mehreren Spalten? AWT, Swing, JavaFX & SWT 6
J JComboBox + ItemListener AWT, Swing, JavaFX & SWT 12
T Swing jComboBox auslesen mit Datenbankanbindung AWT, Swing, JavaFX & SWT 3
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
D Swing Erstes Item einer JCombobox in JTable anzeigen AWT, Swing, JavaFX & SWT 2
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
H Swing jComboBox Ausgabe -1/null AWT, Swing, JavaFX & SWT 4
C Arrow Farbe bei JComboBox AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
S JComboBox UTF-8 Codierung zuweisen AWT, Swing, JavaFX & SWT 5
A JComboBox mit Array aktualisieren AWT, Swing, JavaFX & SWT 7
S JComboBox nach auswahl erneuern AWT, Swing, JavaFX & SWT 4
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
I JComboBox gibt bei ausgewählten ITem NullPointer an... AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben