[JTree/DefaultTreeCellRenderer] eigenes Renderer-Panel, so breit wie der JTree

rtx05

Mitglied
Hallo,

ich habe ein vielleicht triviales Problem komme aber nicht wirklich weiter.

Ich habe eine JTree-Komponente und einen eigenen TreeCellRenderer abgeleitet.

In Abhängigkeit meiner Node-Objekte, liefere ich eigene JPanels zurück.
Diese können auch komplexeren Inhalt (und Farbgebung) haben, ich meine z.B. Tabellen- bzw. Listen-Strukturen mit GridBagLayout realisiert.

Das ganze funktioniert auch, bis auf den Umstand, dass das JPanel, nicht bis zum Ende der x-Achse des JTrees wächst.

Also ich meine sowas in der jetzigen Form

Code:
|-------- JTREE BREITE------------|

   |AAAAA|
            |BBBBB|
   |AA|
            |BB|
            |BBBBB|
            |BBB|

sollte so aussehen:

Code:
|-------- JTREE BREITE----------------------|

   |AAAAA                                  |
            |BBBBB                         | 
   |AA                                     |
            |BB                            |
            |BBBBB                         |
            |BBB                           |

Ist dies mit der JTree-Renderer-Komponente realisierbar?

Java:
private class CalWeekViewTreeRenderer extends DefaultTreeCellRenderer {
		@Override
		public Component getTreeCellRendererComponent(....) {		
		
		            if (currentTreeNode.getUserObject() instanceof XXXXX) {
		
		                     JPanel aJPanel = new JPanel(new FlowLayout());
		                     aJPanel.setOpaque(true);
		                     aJPanel.setBorder(myBorder)
		                     aJPanel.setBackGround(myColor)
		                    aJPanel.add(new JLabel(text));
		
		                     return aJPanel;
		
		              }
		}
 
Super! Danke! Auf diesen Ansatz wäre ich nicht gekommen.
Dein Code-Beispiel bringt mich da weiter:

Java:
 JTree tree = new JTree() {
            public void paintComponent(Graphics g) {
                width = this.getWidth();
                super.paintComponent(g);
            }
        };
        BasicTreeUI ui = new BasicTreeUI() {
            protected void paintRow(Graphics g, Rectangle clipBounds, Insets insets, Rectangle bounds, TreePath path, int row, boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf) {
                bounds.width = width - bounds.x;
                super.paintRow(g, clipBounds, insets, bounds, path, row, isExpanded, hasBeenExpanded, isLeaf);
            }
        };
        tree.setUI(ui);
 

Zurück
Oben