ID erroieren

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo nochmal,

ich habe einen CellRenderer, welcher die einzelnene Nodes designed,
Mein Problem ist jetzt wieder, dass ich nicht nach dem Namen der Nodes gehen kann (if (NameInMeinerDatei.equals(value.toString()))), sondern nach der internen ID, die ich vergeben habe.

Das Problem ist wieder, wenn ich mehrere Nodes mit dem gleichen Text habe, dann sind die Icons gleich und das möchte ich eben verhindern.

vielleicht weiß ja hjemand Abhilfe,
Vielen Dankfür etwaiige Antworten,

lg


Code:
public Component getTreeCellRendererComponent(JTree tree1, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) 
        {
        super.getTreeCellRendererComponent(tree1, value, sel, expanded, leaf, row, hasFocus);
        for (int i = 0; i < Control.states.size(); i++)
            {           
            if (NameInMeinerDatei.equals(value.toString()))
                {
                setIcon(new ImageIcon(System.getProperty("user.dir") + "\\pics\\" + Control.states.elementAt(i).getIconTree()));
                } 
            }
        tree1.setFont(new Font("Arial", 0, 12)); 
        return this;
        }


Die id für die einzelnen Nodes habe ich so vergeben:

Code:
class MyTreeNode extends DefaultMutableTreeNode
    {
    private int id;
    private int anzahlZiffern;

public MyTreeNode(int id, int anzahlZiffern, Object title)
    {
    super(title);
    this.anzahlZiffern = anzahlZiffern;
    this.id = id;
    }

public int getID()
    {
    return this.id;
    }

public int getanzahlZiffern()
    {
    return this.anzahlZiffern;
    }
}
 
G

Guest

Gast
Hallo,

wenn man im Renderer das Object entsprechend castest kann man die ID auslesen:
Code:
((JankTreeNode)value).getID();
Je nachdem wie der Baum aufgebaut ist, muss man vorher noch prüfen, ob es sich beim Object value auch um einen JankTreeNode handelt.
 

PollerJava

Top Contributor
Ich habs jetzt so gemacht aber da werden nicht mehr alle Icons angezeigt:
Weiß da jemand den Grund dafür?

Vielen Dank auf jeden Fall!!

Code:
public Component getTreeCellRendererComponent(JTree tree1, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) 
        {
        super.getTreeCellRendererComponent(tree1, value, sel, expanded, leaf, row, hasFocus);
        for (int i = 0; i < Control.states.size(); i++)
            { 
            if (value instanceof MyTreeNode && Control.states.elementAt(i).getElementNr() == ((MyTreeNode)value).getID())
                {
                setIcon(new ImageIcon(System.getProperty("user.dir") + "\\pics\\" + Control.states.elementAt(i).getIconTree()));
                }
            }
        tree1.setFont(new Font("Arial", 0, 12)); 
        return this;
        }
 

Murray

Top Contributor
Code:
if (value instanceof JankTreeNode && Control.states.elementAt(i).getElementNr() == ((MyTreeNode)value).getID())
Da wird wohl eine der beiden Bedingungen nicht erfüllt sein - hast du dir das mal im Debugger angesehen (Ausschreibungen per System.println gehen natürlich auch)?

Ist es Absicht, dass die erste Bedingung auf JankTreeNode testet, die zweite aber auf MyTreeNode castet ?
 

PollerJava

Top Contributor
Nö, da is ein Fehler passiert: Sollte alles MyTreeNode heißen,

Was ich nicht verstehe ist, dass, wenn ich

Code:
if (value instanceof MyTreeNode && Control.states.elementAt(i).getElementNr() == ((MyTreeNode)value).getID()) 
                {
                setIcon(new ImageIcon(System.getProperty("user.dir") + "\\pics\\" + Control.states.elementAt(i).getIconTree()));
                }
            else
                setIcon(new ImageIcon(System.getProperty("user.dir") + "\\pics\\" + Control.states.elementAt(i).getIconTree()));

schreibe, gar keine Icons mehr angezeigt werden,
 

Murray

Top Contributor
API-Dokumentation zum ImageIcon-Konstruktor hat gesagt.:
Creates an ImageIcon from the specified file. The image will be preloaded by using MediaTracker to monitor the loading state of the image. The specified String can be a file name or a file path. When specifying a path, use the Internet-standard forward-slash ("/") as a separator. (The string is converted to an URL, so the forward-slash works on all systems.) For example, specify:

new ImageIcon("images/myImage.gif")

Versuch doch mal
Code:
setIcon(new ImageIcon( "pics/" + Control.states.elementAt(i).getIconTree()));
 

PollerJava

Top Contributor
Nein, das funktioniert leider auch nicht, kann ich nicht hergehen und sagen, dieser Pfad bekommt dieses Icon und jehner Pfad bekommt dieses Icon?

also ich habs so gemacht:

Code:
private MyTreeNode[] child = new MyTreeNode[99];    // Knoten
    private MyTreeNode[] schild = new MyTreeNode[99];  // SubKnoten
    private MyTreeNode[] sschild = new MyTreeNode[99];
    private MyTreeNode[] ssschild = new MyTreeNode[99];   
    private MyTreeNode[] root = new MyTreeNode[50];  // Wurzel
...

myRenderer = new MyTreeRenderer();
tree.setCellRenderer(myRenderer); 


class MyTreeNode extends DefaultMutableTreeNode
    {
    private int id;
   
public MyTreeNode(int id, Object title)
    {
    super(title);
    this.id = id;
    }

public int getID()
    {
    return this.id;
    }
}




public class MyTreeRenderer extends DefaultTreeCellRenderer 
    {   
       
    public Component getTreeCellRendererComponent(JTree tree1, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) 
        {
        super.getTreeCellRendererComponent(tree1, value, sel, expanded, leaf, row, hasFocus);
        for (int i = 0; i < Control.states.size(); i++)
            {  
// so solls funktionieren, es werden aber Knoten und Leafs ausgelassen (vor allem alle Knotenm die gleich
// heißen, is irgendwie ein ganz komisches Verhalten            
           if (value instanceof MyTreeNode && Control.states.elementAt(i).getElementNr() == ((MyTreeNode)value).getID())
                {
                setIcon(new ImageIcon(System.getProperty("user.dir") + "\\pics\\" + Control.states.elementAt(i).getIconTree()));   
                }
            }
        tree1.setFont(new Font("Arial", 0, 12)); 
        return this;
        }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
MQue Auszeit erroieren Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben