Toon posts:

[java] custom Jtree cells ?

Pagina: 1
Acties:

Verwijderd

Topicstarter
is het mogelijk om in een JTree JLabels of JButtons te zetten?
Zodat je dus in een boom structuur allerlei verschillende JLabels hebt met een icon en een eigen tekst, en voor de rest de standaard layout van een JTree.
Zo ja, hoe?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Het is mogelijk :)

En check verder de TreeCellRenderer/Editor.

Afbeeldingslocatie: http://rint.rechten.rug.nl/Site/images/lawgame_vragen.gif

Afbeeldingslocatie: http://rint.rechten.rug.nl/Site/images/lawgame_oplossing.gif

[ Voor 54% gewijzigd door Alarmnummer op 04-03-2003 14:37 ]


Verwijderd

Topicstarter
Mooi dat het kan.
ik ben idd bezig geweest met een eigen TreeCellRenderer, maar ik krijg steeds een ClassCastException op deze regel in getTreeCellRendererComponent:

MyItem m = (MyItem)((DefaultMutableTreeNode)value).getUserObject();

terwijl ik wel MyItem's toevoeg in mijn JTee :)

[ Voor 4% gewijzigd door Verwijderd op 04-03-2003 15:04 ]


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
alarm: mooie icons!!! :)

molotov: ik zie geen fout in de laatste code dus het zal wel aan je insert liggen. ik neem aan dat de cast fails by (MyItem)...

Verwijderd

Topicstarter
ik heb het inmiddels bijna voor elkaar. De fout zat in het feit dat ik niet alleen MyItem aan de boom toevoegde :)
Maar nu kan ik niet mijn eigen icon laten zien, terwijl hij wel een standaard icoon kan laten zien (bijv. getClosedIcon() )
Ik heb alle formaten al geprobeerd: png, gif, bmp en jpg maar geen van alle werken?

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
je doet toch wel een ImageIcon ? vergeet ook niet de super aan te roepen voordat je de icon zet... een gif werkt wel (althans ben er nog geen tegengekomen die hij niet aankan)..

Verwijderd

Topicstarter
Ik heb het alsvolgt gedaan:
ik extend de defaultcellrenderer. in de methode getTreeCellRenderComponent wordt er gekeken naar het type van het object. Als dat een bepaald type is, dan return ik een JLabel met mijn icon en tekst. In alle andere gevallen return ik this.
Dit zou toch moeten werken ?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik heb ervoor gezorgd dat mijn treenodes een grafisch component terugsturen. En deze componenten worden door de renderer getekend. Ik kan ook tables en textfields in die boom plaatsen :)

EN verder moet je je een node voelen, en niet de treemodel. Dit werkt echt stukken makkelijker. En verder is het ook handig om jouw treenode van een extra methode te voorzien:
List<Action> getActions()

Kan je supereenvoudig popup menu`s op nodes laten verschijnen.

[ Voor 44% gewijzigd door Alarmnummer op 05-03-2003 12:32 ]


Verwijderd

Topicstarter
ok, ik heb het nu aangepast dat mijn treenodes een component terugsturen:

public Component getComponent()
{
return new JLabel(name, new ImageIcon("middle.gif"),JLabel.RIGHT);
}


in de cellrenderer nu dus return node.getComponent();
Maar geen verschil :(

Heb jij in jouw voorbeeld zoiets gemaakt als:

class Vragen extends DefaultMutableTreeNode
{
....
}
?

[ Voor 27% gewijzigd door Verwijderd op 05-03-2003 13:26 ]


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...in je tree constructore
this.setCellRenderer(new CustomCellRenderer());
...
 class CustomCellRenderer
  extends DefaultTreeCellRenderer
{
  public CustomCellRenderer(){}

  public Component getTreeCellRendererComponent( JTree tree,
          Object value, boolean bSelected, boolean bExpanded,
              boolean bLeaf, int iRow, boolean bHasFocus )
  {
       dkitTreeNode node = (dkitTreeNode)value; //ik heb mijn eigen derived DefualtMutable...

       super.getTreeCellRendererComponent( tree, value, bSelected,bExpanded, bLeaf, iRow, bHasFocus);

         setIcon("some icon"); //natuurlijk wel cahcen he :)

        //alarm nummer zal hier waarschijnlijk uit zijn userObject gaan kijken wat ie moet
       //teruggeven zolas elk Mogelijk COmponent (JLabel tot en met JEditorPane ) :)
    return this;
  }
}

Verwijderd

Topicstarter
Het is me eindelijk gelukt.
In plaats van new ImageIcon(filename); heb ik het volgende gebruikt:
new ImageIcon(packagename.MyTreeRenderer.class.getResource("icons/ready.png"));
en dat werkt wel :)

Bedankt hobbit_be en Alarmnummer voor jullie hulp!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
np - topic can be closed
Pagina: 1