Swing Spaltenbreite and CellEditor- Komponente anpassen

123456789

Aktives Mitglied
Ich brauche bitte wieder mal eure Hilfe,

Ich habe eine JTable deren Breiten der Spalten sich an die jeweilige Breite der CellEditor- Komponeten anpassen sollen. Das heißt, dass in dem Moment des Doppelklicks auf einer Zelle sich die Breite der Spalte verändert.
Der Sinn dahinter ist, dass bei einer JComboBox als CellEditor alle ComboBox- Einträge zur Gänze sichtbar sein sollen.

Versucht habe ich:

Java:
@Override
	public Component getTableCellEditorComponent(JTable table, Object value,
			boolean isSelected, int row, int column) {

                        ...                      
  
			TableColumn tc = table.getColumnModel().getColumn(column);
			if(tc.getPreferredWidth() != cp.getPreferredSize().getWidth()){
				tc.setPreferredWidth((int) cp.getPreferredSize().getWidth());
			}
			
			return cp;

In diesem Fall wird die Spaltenbreite and die Breite der Editor- Komponente angepasst, jedoch wird diese Editor- Komponente nicht angezeigt. Wahrscheinlich wird bei dem Aufruf von

Java:
tc.setPreferredWidth((int) cp.getPreferredSize().getWidth());

das Editieren der Tabelle gestoppt.

Hat jemand eine Lösung für mein Problem. Es wäre sehr hilfreich.

Vielen Dank,
lg
 
Gegenfrage: warum kommt hier 1 raus?:
Java:
int doStuff()
{
...
return x;
}
Solange du nicht zumindest den code der ganzen Funktion angibst können wir nur raten.
 
Deine Variante lässt sich bestimmt lösen. Aber das Verhalten der JTable kommt mir dann UI Design technisch etwas komisch vor. Wie wäre es mit einer JComboBox deren PopUp einfach breiter oder breit genug ist um alle Einträge anzuzeigen?
 
Damit geht der Editor trotzdem auf. Die finals bitte in die Methoden Definition übernehmen 🙂
Java:
if (tc.getPreferredWidth() != comboBox.getPreferredSize().getWidth())
{
   tc.setPreferredWidth((int) comboBox.getPreferredSize().getWidth());
   final JTable myTable = table;
   final int myRow = row;
   final int myColumn = row;
   SwingUtilities.invokeLater(new Runnable()
   {
      @Override
      public void run()
      {
	   myTable.editCellAt(myRow, myColumn);
      }
   });
}
 
Zuletzt bearbeitet:
Hallo Wladimir,

vielen Dank für deine Antwort. Ich hab deine Vorschlag eingebaut und das funktioniert auch recht gut. Es gibt noch ein Problem mit dem Öffnen der JComboBox aber das werd ich schon noch hinbekommen.
Ich hab leider gerade keine Zeit dafür, ich werd aber über die entgültige Lösung berichten.

Vielen Dank
 

Neue Themen


Zurück
Oben