Witam.
Napisałem sobie program, w którym głównym elemenem jest JTree, które w gałęziach posiada JTable. JTree ma własny model (extends DefaultTreeModel) edytor (extends DefaultTreeCellEditor), renderer (extends DefaultTreeCellRenderer). eytor jak i renderer jest potrzebny do wyrysowania JTable. JTable natomiast posiada własny model(extends AbstractTableModel).
Mam kilka problemów.
Jeżeli dodam tabelke do drzewa, to mimo ze zawiera tylko jeden rzad, scroll zajmuje duzo duzo wiekszy obszar niz jest to konieczne(wysokosc). Dlatego w rendererze drzewa, w metodzie getTreeCellRendererComponent zwracam JScrollPane z tabelka. A dla tego scrolla ustawiam wartosci:
scroll.setPreferredSize(new Dimension(scroll.getPreferredSize().width, table.getRowHeight()*(table.getModel().getRowCount()+1)+3));
Dzięki temu wysokość zawsze jest dopasowana do ilości wierszy w tabelce.
- Jeżeli teraz rozszeze okno, szerokość tabelki nie ulega zmianie. Co powinienem zmienic, aby szerokość tabelki zajmowaął cały panel w którym sie znajduje drzewo? Wygląda to tak, jaby JTree nie wykozystywało całej szerokości. JTable jest w JTree a ono jest w JPanel.
Do drzewa, jak i tabelki mam dodane mouseListenery (Obsluga prawego przycisku myszki). Jeżeli rozwine gałąź tak, aby było widać tabelke, i klikne na nia PPM, to wywołuje mi sięlistener dla Drzewa. Aby wywołac listenera dla tabelki, najpierw musze na nią kliknąć LPM(aby dostałą focusa).
2. Jak zrobic, aby od razu po kliknieciu PPM na tabelce wywołał sie listener dla tabelki a nie dla drzewa?
Mam rozwiniętą gałąź i wyświetloną tabelke. Jeżeli do tabelki dodam kolejny rząd, to wyświetla mi sie tabelka z poprzednia iloscia wierszy oraz z pionowym scrolem. Jak zdejme focusa z tabelki, a następnie znowu na nia klikne, wyświetla się tabelka ze wszystkimi rzędami bez scrola. Sytuacja jest podobna kiedy rzadu usune. Zostaje puste miejsce pod spotme tabeli. W edytorze w metodzie getTreeCellEditorComponent rowniez zwracam scrola z tabelka
s.setPreferredSize(new Dimension(s.getPreferredSize().width, t.getRowHeight()*(t.getModel().getRowCount()+1)+3));
- Co zrobic, aby od razu po dodaniu wiersza pojawiły sie wszystkie rzedy bez scrola?
Perwszym elementem drzewa jest Root, z którego wychodza kolejne gałęzie. Można zwinąć roota, a wtedy wszystkie gałęzie beda niewidoczne(czyli standard). Chciałbym, aby root nie był wyświetlany. Jeżeli zrobie tree.setRootVisible(false); a nastepnie dodam jakies gałezie, nie mam jak ich rozwinac, a co za tym idzie nie moge och obejrzec.
4. Jak bez wyświetlania roota wyświetlaćgałęzie od niego wychodzące?
Z góry dzięki za odpowiedzi albo podpowiedzi