JXTreeTable: Spaltengröße läßt sich nicht mehr festlegen

monumentX

Neues Mitglied
Hallo,
ich habe eine JXTreeTable mit dem Standarddatenmodell zusammengebaut. Diese soll nach und nach mit Daten befüllt werden. Sie befindet sich in einem JInternalFrame. Nach Klick auf einen Button "Hinzufügen" soll ein bestimmter vorher aus Datenbank ermittelter Datensatz eingefügt werden, der aus einer Hierarchie von Zeilen besteht. Das klappt auch alles soweit. Mein Problem ist nur, daß sobald Daten eingefügt werden, sich die Spaltenbreite zurücksetzt, sodaß alle in etwas gleich groß zu sein scheinen. Dadurch muß man nach Einfügen ständig mit der Maus die im Programm festgelegten Spaltenbreiten wieder größer ziehen.
Hier dazu ein paar Codeausschnitte:

Aufbau der TreeTable:
Java:
public class PartListsTreeTable extends JXTreeTable{
	RootNode root;
	DefaultTreeTableModel defaultTreeTableModel;
	List<String> columnNames;
	
	PartListsTreeTable(DefaultTreeTableModel defaultTreeTableModel){
		super(defaultTreeTableModel);
		}

//Diese Methode wird beim Klicken des Hinzufügen-Buttons im ActionListener aufgerufen
public void addArticle(Article article, int count){
		DefaultTreeTableModel model = (DefaultTreeTableModel) this.getTreeTableModel();
		TableModel tableModel =  (TableModel) this.getModel();
		this.add((ArticleTreeTableNode) model.getRoot(), article, count, model);
	}
	
	//Rekursives Einfügen des übergebenen Artikels mit in die JXTreeTable
	//Rekursives Aufrufen deshalb, da ein Artikel wieder aus weiteren Artikel besteht.
	private void add(ArticleTreeTableNode node, Article article, int count, DefaultTreeTableModel model){
             //Befüllen des Datenobjekts für Childnode mit den Artikeldaten (Ergibt die eine Zeile in TreeTable)
		Object[] dataObject = new String[12];
		dataObject[0]= article.getInternalName();
		dataObject[1]= article.getofferName();
		                            :
		
		//Node für Artikeldaten eines einzelnen Artikels
		ArticleTreeTableNode child = new ArticleTreeTableNode(dataObject);
		
		//Anfügen des neu erstellten Nodes an Parent-Node
		node.add(child);
		
		//Rekursiver Aufruf für jeden Artikel aus dem article besteht:
		for(PartLists partLists : article.getListOfParts()){
			this.add(child, partLists.getPart(), partLists.getNumberOfItems(), model);
		}
		//Setzt Root mit angehehängten Childnodes wieder ins JXTreeTable-Datenmodell
		model.setRoot(node);
	}
}

Treenodes (Root und Child):
Java:
public class ArticleTreeTableNode extends AbstractMutableTreeTableNode {
	
	public ArticleTreeTableNode(Object[] rowData){
		super(rowData);
	}
	@Override
	public int getColumnCount() {
		return getDataObject().length;
	}

	@Override
	public Object getValueAt(int column) {
		return getDataObject()[column];
	}
	
	private Object[] getDataObject(){
		return (Object[]) getUserObject();
	}
}

public class RootNode extends ArticleTreeTableNode{
	
	public RootNode(String head){
		super(new Object[]{head});
	}
}

Ausschnitt des JInternalFrame (JXTreeTable ist durch JSplitpane in den unteren Bereich des JInternalFrame gesetzt:
Java:
public class PartsListManagerAAS extends JInternalFrame {
                                     :
//Konstruktor
public PartsListManagerAAS(ArticleCreationK articleCreationK) {
setBounds(100, 100, 750, 550);
                                     :
RootNode root = new RootNode("Root");
			DefaultTreeTableModel model = new DefaultTreeTableModel(root,articleCreationK.getPartsListTablecolumnList());
			partListsTreeTable = new PartListsTreeTable(model);
			partListsTreeTable.setShowGrid(false,true);
			partListsTreeTable.setColumnControlVisible(true);
			partListsTreeTable.setPreferredSize(new Dimension(760,200));
			partListsTreeTable.setMinimumSize(new Dimension(760,200));
			
			JScrollPane scrollPaneForPartListTable = new JScrollPane(partListsTreeTable);
			splitPaneWithTable.setRightComponent(scrollPaneForPartListTable);
                         //Diese Methode zeigt nach Einfügen des ersten Datensatzes keine Wirkung mehr
     			partListsTreeTable.getColumnModel().getColumn(0).setMinWidth(200)
                                                              :
      }
}

Die letzte Zeile setzt z. B. die erste Spalte auf eine Breite von 200 px. Was auch funktioniert, solange man nicht die über Hinzufügen-Button aufgerufene Methode "addArticle" auferufen wird. Irgendwie setzt diese Methode alle Tabellenspalte auf eine bestimmte Länge zurück. Aber ich weiß nicht warum.
Egal wo ich die Methode "getColumnModel().getColumn(0).setMinWidth(200)" auch platziere, sie hat keine Auswirkung mehr, sobald der erste Datensatz in die Tabelle eingefügt wurde.
Ich weiß hier einfach keinen Rat mehr. Vielleicht sieht hier ja jemand die Ursache für das seltsame Verhalten.
Gruß euer mumentX
 

Ähnliche Java Themen

Neue Themen


Oben