Pytanie banalne ale uczę się obsługi Netbeans i mam problem z "dobraniem się" do domyślnych parametrów Jtree. Dla wyjaśnienia: kontrolka Jtree po wstawieniu w trybie design do formatki, ma domyślne drzewko. I właśnie tu mam problem bo nie mogę usunąc tych domyślnych gałęzi posługując się properties ani kodem źródłowym. Po prostu nigdzie nie widać momentu tworzenia tego domyślnego drzewa. A może ja tego nie mogę znaleźć.
poszukaj właściwości model
A może wiesz również w którym miejscu można modyfikować zawartośc klasy i konstruktora. Oczywiście chodzi mi dalej o kontrolkę dodaną z menu Palette. Widzę, że jest zakładka code w properties, tylko dosyć dużo tam różnych pól...
Popatrz na "Custom creation code" czy coś w ten deseń.
Domyślne drzewko jest chyba tworzone wtedy, jak JTree zostało powołane do życia bezargumentowym konstruktorem.
No właśnie custom create code działa na już utworzonym obiekcie. Ja potrzebuję na ingerencję w samą klasę (np. nowe właściwości lub metody) i w konstruktora. Wprawdzie znalazłem cos takiego jak Pre-creation code ale chciałbym podejrzeć gdzie wpisy tam dokonywane lokują się w kodzie źródłowym.
Wiem, że mógłbym utworzyć własną klasę dziedziczącą po Jtree, itp itd, ale obiekt utworzony w oparciu o nią nie będzie widoczny w opcji Design, chyba że ktos ma inne zdanie?
Jeśli będzie dziedziczyć po JTree, to będzie widoczny jako JTree w designerze. Ja to robiłem tak, że wrzucalem na formę JTree, klikam PPM na nim i wybieram Customize Code, następnie w oknie dialogowym przestawiam przy pierwszej linijce z "default code" na "custom creation" i zmieniam:
new javax.swing.JTree()
na np.
new MySuperJTree()
thx. Dodałem konstruktor do klasy myTree dziedziczącej po JTree. Dodałem klika gałęzi z liściami ale w JscrollPane, pod który jest podczepione moje drzewo nic się nie wyświetla. :(
klasa MyTree:
package desktopapplication1;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
class myTree extends JTree{
public JTree drzewo;
public myTree() {
DefaultMutableTreeNode top = new DefaultMutableTreeNode("root");
createNodes(top);
drzewo = new JTree(top);
}
private void createNodes(DefaultMutableTreeNode top){
DefaultMutableTreeNode category = null;
DefaultMutableTreeNode part = null;
category = new DefaultMutableTreeNode(new Kategoria("Zawieszenie", 1));
top.add(category);
part = new DefaultMutableTreeNode(new Kategoria("łącznik stabilizatora",1));
category.add(part);
System.out.println("konstruktor myTree");
}
}
a tutaj klasa Kategoria:
package desktopapplication1;
public class Kategoria {
private String nazwa;
private int id;
public Kategoria(String nazwa, int id){
this.nazwa = nazwa;
this.id = id;
System.out.println("konstruktor Kategoria");
}
public String getNazwa(){
return this.nazwa;
}
@Override
public String toString() { return nazwa; }
}
Problem rozwiązany.
trzeba było dodać w konstruktorze klasy głównej wpisać:
DefaultMutableTreeNode top = new DefaultMutableTreeNode("Lista części");
createNodes(top);
treeModel = new DefaultTreeModel(top);
drzewo.setModel(treeModel);
funkcja createNodes to w moim przypadku:
private void createNodes(DefaultMutableTreeNode top) {
DefaultMutableTreeNode category = null;
DefaultMutableTreeNode part = null;
category = new DefaultMutableTreeNode("Zawieszenie");
top.add(category);
//original Tutorial
part = new DefaultMutableTreeNode(new Kategoria
("Wahacz",1));
category.add(part);
//Tutorial Continued
part = new DefaultMutableTreeNode(new Kategoria
("sworzeń",2));
category.add(part);
category = new DefaultMutableTreeNode("Hamulce");
top.add(category);
//VM
part = new DefaultMutableTreeNode(new Kategoria
("Klocki",3));
category.add(part);
}
klasa Kategoria jest w poprzednim poście.
Może się komuś to przyda, bo trochę się namęczyłem zanim załapałem :)