Ich habe einen JTree den ich instanziere mit einem Model. Dannach fülle ich das Model mit Daten, nur werden diese nicht angezeigt. Fülle ich das Model zuerst mit Daten und instanziere den Tree danach funktioniert es:
Model
Java:
private RuleTreeModel ruleTreeModel = new RuleTreeModel(new DefaultMutableTreeNode());
Java:
private void generateTestData()
{
List<VariableRule> rules = new ArrayList<VariableRule>();
VariableRule rule = new VariableRule();
rule.setNewName("Bauteil");
rule.addOldName("Buteil");
rule.addOldName("nigga hou");
rules.add(rule);
rule = new VariableRule();
rule.setNewName("Wasser");
rule.addOldName("water");
rule.addOldName("waser");
rules.add(rule);
ruleTreeModel.mapVariableRules(rules);
}
...
ruleTree = new RuleTree(ruleTreeModel);
...
// ToDo Remove
generateTestData();
//Show main window
pack();
setVisible(true);
Model
Java:
/**
* Adds a rule to the tree
*
* @param rule
*/
public void addRule(VariableRule rule)
{
// Variables
DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot();
DefaultMutableTreeNode child;
NodeModel node;
// Add checkbox node
node = new NodeModel(rule.getNewName());
child = new DefaultMutableTreeNode(node);
// Add old values
for (String oldName : rule.getOldNames())
{
child.add(new DefaultMutableTreeNode(oldName));
}
// Add them to the root tree
root.add(child);
//Update listeners
for(TreeModelListener listener : getTreeModelListeners()){
listener.treeNodesInserted(new TreeModelEvent(this, getPathToRoot(child)));
}
/**
* Expects a list of rules and turns them into a correct structure
*
* @param rules
* VariableRules or {@link VariableContentRule}
*/
public RuleTreeModel(List<VariableRule> rules)
{
super(new DefaultMutableTreeNode());
// Normal variable rules
mapVariableRules((List<VariableRule>) rules);
}
/**
* Maps {@link VariableRule} into nodes
*
* @param rules
*/
public void mapVariableRules(List<VariableRule> rules)
{
// Each rule is a child including a checkbox
for (VariableRule rule : rules)
{
addRule(rule);
}
}