# JComboBox in JTable



## Schweizer Schalentier (19. Okt 2004)

Hallo Zusammen

Ich habe da folgendes Problem.
In einer JTable befinden sich auf zwei Spalten je eine JComboBox.
In der einen Befinden sich Emailadressen, und in der anderen die entsprechenden Namen
der Personen.
Wenn ich nun eine Emailadresse aus der ersten JComboBox auswähle soll der entsprechende
Name in der JComboBox selektiert werden.
Dazu habe ich eine easy ActionListener Klasse geschrieben. Eigentlich funktioniert das ganze auch, jedoch
wird der neue Stand in der Tabelle (In welcher sich die JComboBox befinden) nicht dargestellt.
(updateUI, update, repaint oder validate nützen nichts)

Hier meine ActionListener Klasse inkl. Test println()...



```
import java.awt.*;
import javax.swing.JComboBox;

public class MailSynchronizationEvent implements ActionListener {
  
  private JComboBox boxMail;
  private JComboBox boxName;
	
  public MailSynchronizationEvent(JComboBox boxMail, JComboBox boxName) {
    this.boxMail = boxMail;
    this.boxName = boxName;
  }
  
  
  public void actionPerformed(ActionEvent e) {
    Object o = e.getSource();
    
    if(o.equals(boxMail) && boxMail.getSelectedIndex() != -1) {
      int index = boxMail.getSelectedIndex();
      //boxName.removeActionListener(this);
      boxName.setSelectedIndex(index);
      //boxName.addActionListener(this);
    }
    
    
    if(o.equals(boxName) && boxName.getSelectedIndex() != -1) {
      System.out.print("Selektiertes item: ");
      int index = boxName.getSelectedIndex();
      System.out.print(index);
      //boxMail.removeActionListener(this);
      boxMail.setSelectedIndex(index);
      //boxMail.addActionListener(this);
      System.out.println(", somit gilt " + (String)boxMail.getSelectedItem() + " ist selektiert!");
    }
  }
}
```


----------



## Sky (19. Okt 2004)

An welcher Stelle setzt Du den Wert denn in der Tabelle?


----------



## Schweizer Schalentier (19. Okt 2004)

Bevor ich die JComboBox auf die Tabelle setze:

TableColumn colOne = table.getColumnModel().getColumn(1);
JComboBox boxNames = new JComboBox();
boxNames.addItem("Hans Meier");
boxNames.addItem("Fritz Müller");
colOne.setCellEditor(new DefaultCellEditor(boxNames));

Bei der Email ComboBox genau gleich, einfach mit den beiden entsprechenden Emailadressen.
Habs auch schon mit dem ComboBoxModel versucht.


----------



## Sky (19. Okt 2004)

Benutzt Du auch das DefaultTableModel?? Oder ein von AbstractTableModel abgeleitetes Model? Dann hilft es oftmals die Methode fireTableDataChanged aufzurufen.


----------



## Schweizer Schalentier (20. Okt 2004)

Danke für Deine Hilfe, hat aber leider nichts gebracht.
Die Daten werden immer noch geändert, jedoch nicht visualisiert.


----------



## Sky (20. Okt 2004)

Hast Du denn mal geprüft, ob die Daten im Model korrekt gesetzt sind nach deiner Änderung??


----------



## Schweizer Schalentier (20. Okt 2004)

Jepp, hab ich gemacht.

DefaultTableModel tableModel = new DefaultTableModel(1, 3);
JTable tableEmail = new JTable(tableModel);
...
tableModel.fireTableDataChanged();


----------



## Schweizer Schalentier (20. Okt 2004)

Jepp, hab ich gemacht.

DefaultTableModel tableModel = new DefaultTableModel(1, 3);
JTable tableEmail = new JTable(tableModel);
...
tableModel.fireTableDataChanged();

geht aber leider immer noch nicht mit dem fireTableDataChanged().


----------



## Schweizer Schalentier (20. Okt 2004)

OK, ich habs jetzt anders gelöst.
Ich schummle ein bisschen, und benutzte jetzt einfach die setValueAt() Methode.
ZWar nicht so schön, aber der effekt stimmt wenigstens.

int selectRow = table.getSelectedRow();
if(o.equals(boxMail) && boxMail.getSelectedIndex() != -1) {
  int index = boxMail.getSelectedIndex();
  boxName.removeActionListener(this);
  String testString = (String)boxName.getItemAt(index);
  model.setValueAt(testString, selectRow, 1);
  boxName.setSelectedIndex(index);
  boxName.addActionListener(this);
}


----------

