tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Akeshihiro
  • 1 Beitrag von Fabio Hellmann
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
568
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Trigoor2 Trigoor2 ist offline Mitglied Bronze
    Registriert seit
    Jul 2011
    Ort
    Karlsruhe
    Beiträge
    28
    Hallo Leute,

    ich würde gerne einen Knoten im JTree als Ordner anzeigen lassen.
    Bei mir wird er nur als Ordner angezeigt wenn er Nodes(als childrens) hat.

    Irgendwie bin ich auf keine Lösung gekommen.

    Vielen Dank im Vorraus!

    Viele Grüße
    Trigoor
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi,
    versuch das Problem doch mit dem CellRenderer zu lösen. Über diesen CellRenderer kannst du die Icons für die Leafs/Root-Points setzen. Du musst natürlich abfragen, ob es das Item ist, dem du ein neues Icon geben willst. Ansonsten änderst du das Icon bei allen. Hier mal ein Code-Beispiel: (ich bin mir nicht sicher, ob du getDefaultLeafIcon oder getLeafIcon überschreiben musst, aber das kannst du ausprobieren)

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    import javax.swing.Icon;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultTreeCellRenderer;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreeModel;
    import javax.swing.tree.TreeNode;
     
    public class JTreeModifier
    {
        private final TreeModel model;
        private final JTree tree;
        
        public JTreeModifier(TreeNode root) {
            model = new DefaultTreeModel(root);
            tree = new JTree(model);
            tree.setCellRenderer(new DefaultTreeCellRenderer() {
                @Override
                public Icon getDefaultLeafIcon() {
                    // Hier durch dein Icon ersetzen.
                    // Evtl. vorher eine If-Abfrage machen, 
                    // ob es das Icon ist, das du ändern willst.
                    return super.getDefaultLeafIcon();
                }
                
                @Override
                public Icon getLeafIcon() {
                    // Hier durch dein Icon ersetzen.
                    // Evtl. vorher eine If-Abfrage machen, 
                    // ob es das Icon ist, das du ändern willst.
                    return super.getLeafIcon();
                }
            });
        }
    }

    Gruß

    Fabio
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  3. #3
    Trigoor2 Trigoor2 ist offline Mitglied Bronze
    Registriert seit
    Jul 2011
    Ort
    Karlsruhe
    Beiträge
    28
    Hallo Fabio,

    hmmm...also ich kriege das mit dem Treemodel nicht hin.
    Ist das eine offizielle Klasse von Oracle?

    Denn das Package "javax.swing.tree.DefaultTreeModel" erkennt mein Eclipse nicht an.

    Gruß
    Trigoor
     

  4. #4
    Trigoor2 Trigoor2 ist offline Mitglied Bronze
    Registriert seit
    Jul 2011
    Ort
    Karlsruhe
    Beiträge
    28
    Hallo Fabio,

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
                public Icon getDefaultLeafIcon() {
                    // Hier durch dein Icon ersetzen.
                    // Evtl. vorher eine If-Abfrage machen, 
                    // ob es das Icon ist, das du ändern willst.
                    
                    java.net.URL imgURL = frmStart2.class.getResource("c:\\ordner.gif");
                    ImageIcon icon = new ImageIcon(imgURL);
                    
                    return super.getDefaultLeafIcon();
                }
     

  5. #5
    Trigoor2 Trigoor2 ist offline Mitglied Bronze
    Registriert seit
    Jul 2011
    Ort
    Karlsruhe
    Beiträge
    28
    Hallo Fabio,

    erst einmal vielen Dank für den Codehappen!

    Habe den kleinen Fehler von vorhin gefunden.

    Es heisst: import javax.swing.tree.*;
    statt dem hier: import javax.swing.JTree.*;

    Sag bloss, Du tippst den Code einfach so frei runter? Ich muss meistens nachschauen wie ich was angestellt habe.

    Bei mir sieht es jetzt so aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
                public Icon getDefaultLeafIcon() {
                    // Hier durch dein Icon ersetzen.
                    // Evtl. vorher eine If-Abfrage machen, 
                    // ob es das Icon ist, das du ändern willst.
                    
                    java.net.URL imgURL = frmStart2.class.getResource("c:\\ordner.gif");
                        ImageIcon icon = new ImageIcon(imgURL);
                    
                    return super.getDefaultLeafIcon();
                }

    Wie muss ich denn weiter verfahren?
    Also "super" kenne ich nur als erste Zeile unter dem Konstruktor. Was bewirkt er denn in der Return-Anweisung?

    Ach, das youtube-Video (Java vs NET) habe ich mir mal angeschaut. Echt lustig.
    Muss jetzt seit einer Woche mit VB.NET programmieren. Und vor allen Dingen kommt viel ADO.NET vor.

    Ich kann Dir eines sagen. Eclipse ist und bleibt die beste IDE die es gibt. Da kommt .NET mit seiner IntelliSense nicht bei weitem ran.
    Das einzig gute ist der DataSet-Designer und das man die DB über .NET verändern kann.
    Gibt es für Java auch sowas Ähnliches? Hast Du eine Ahnung?

    Welche IDE benutzt Du denn?

    Okay, ist schon spät. Muss "heute" um 7.00 aufstehen. Wird Zeit ins heia-Bett zu springen.

    Viele Grüße
    Trigoor

    EDIT: Oje, Doppelpost..peinlich
    Geändert von Trigoor2 (23.08.11 um 03:58 Uhr) Grund: Doppelpost
     

  6. #6
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi,

    Zitat Zitat von Trigoor2 Beitrag anzeigen
    Sag bloss, Du tippst den Code einfach so frei runter? Ich muss meistens nachschauen wie ich was angestellt habe.
    Ja naja, zum teil würd ich sagen. Ich programmier mit Java jetzt schon seit 2 Jahren (Ausbildung) und habe daher die ein oder anderen Sachen bereits verinnerlicht.

    Zitat Zitat von Trigoor2 Beitrag anzeigen
    Bei mir sieht es jetzt so aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
                public Icon getDefaultLeafIcon() {
                    // Hier durch dein Icon ersetzen.
                    // Evtl. vorher eine If-Abfrage machen, 
                    // ob es das Icon ist, das du ändern willst.
                    
                    java.net.URL imgURL = frmStart2.class.getResource("c:\\ordner.gif");
                        ImageIcon icon = new ImageIcon(imgURL);
                    
                    return super.getDefaultLeafIcon();
                }

    Wie muss ich denn weiter verfahren?
    Du kannst jetzt die Variable icon direkt zurückgeben via "return icon" (allerdings bekommen dann alle Nodes das Icon als Anzeigebild).

    Zitat Zitat von Trigoor2 Beitrag anzeigen
    Also "super" kenne ich nur als erste Zeile unter dem Konstruktor. Was bewirkt er denn in der Return-Anweisung?
    Da die Methode überschrieben wird, bewirkt "super", dass die Methode den Wert (der in der überschriebenen Methode) zurückgibt. Also mit "super" greifst du immer auf die "Super"-Methode zu. Sprich wenn du eine Klasse einbindest (extend) dann kannst du, wenn du eine Methode überschreibst, via "super" auf die eigentliche Methode zugreifen.
    Ich hoffe das ist einigermaßen verständlich rüber gekommen. Falls nicht, habe ich hier noch einen netten Link mit solchen Sachen.

    Zitat Zitat von Trigoor2 Beitrag anzeigen
    Ach, das youtube-Video (Java vs NET) habe ich mir mal angeschaut. Echt lustig.
    Freut mich, dass es dir gefallen hat.

    Zitat Zitat von Trigoor2 Beitrag anzeigen
    Ich kann Dir eines sagen. Eclipse ist und bleibt die beste IDE die es gibt. Da kommt .NET mit seiner IntelliSense nicht bei weitem ran.
    Das einzig gute ist der DataSet-Designer und das man die DB über .NET verändern kann.
    Gibt es für Java auch sowas Ähnliches? Hast Du eine Ahnung?
    Nein, da kann ich dir leider nicht weiterhelfen, da ich mich mit .NET zu wenig auskenne.

    Zitat Zitat von Trigoor2 Beitrag anzeigen
    Welche IDE benutzt Du denn?
    Ich benutze auch Eclipse. Da Eclipse einem einfach schon unendlich viel Arbeit abnimmt.

    Gruß

    Fabio
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  7. #7
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    Bei Eclipse brauchst du nicht zwangsweise jedes Package perfekt zu kennen. Besser is es zwar, aber muss nicht sein und ich würde fast behaupten, dass das eh keiner innerhalb einer IDE (zumindest nicht in Eclipse) von Hand runtertippt. Wenn du eine Klasse verwenden willst, die noch nicht importiert wurde, dann gibts mehrere Möglichkeiten diese durch Eclipse importieren zu lassen. Die einfachste und schnellste für die meisten ist wohl die Intellisence zu nutzen. Also einen oder mehr Buchstaben tippen und wenn du "langsam" genug bist, dann taucht die Intellisence auf, ansonsten Strg+Leertaste drücken und die richtige Klasse auswählen. Wurde sie noch nicht importiert, macht Eclipse das von selbst. Zusätzlich benutze ich noch zwei andere Wege, da ich meist zu schnell bin und die Intellisence nicht mitkommt. Die erste Möglichkeit ist der Shortcut Strg+Shift+o, dadurch werden alle Imports organisiert/verwaltet. Eclipse import dann alles was fehlt und das, was nicht benutzt wird, wird rausgeschmissen. Die zweite Möglichkeit ist eher zur Behebung von Fehlern gedacht, nämlich Strg+1. Dadurch werden dir verschiedene Lösungwege aufgezeigt, dazu gehört auch für den Fall den import hinzu zu fügen. Man kann damit aber auch andere Sachen machen, wie Methoden/Klassen/Interfaces deklarieren, falls sie fehlen (sehr praktisch, wenn du eine Methode verwenden willst, die noch nicht deklariert wurde, du aber bereits ihren Aufruf getippt hast). Gibt natürlich noch viel mehr nützlich Shortcuts, wie z.B. Shift+Alt+s, dadurch taucht ein Menü auf zum bearbeiten des Codes. Sehr nützlich sind da die Funktionen zum Erzeugen der Getter und Setter, delegate-Methoden oder auch die Möglichkeit Konstruktoren von Eclipse generieren zu lassen. Oder auch Shift+Alt+r zum Umbenennen von Methoden/Klassen/Variablen/etc., ist auch sehr praktisch.

    Für die Datenbanksache gibt es für Eclipse das Plugin SQL Explorer. Hab ich noch nie benutzt, wird aber durch meine Ausbildung zwangsweise passieren. Kannst dir ja mal anschauen. Die Screenshots sehen jedenfalls sehr gut aus.

    Ich muss aber dazu sagen, dass Eclipse nicht gleich Eclipse ist. Und zwar besteht Eclipse eigentlich nur aus einem Haufen von Plugins, wodurch man es sich nach seinen Bedürfnissen zusammenbauen kann. Auch die Programmiersprachen (Eclipse kann weit mehr als nur Java) sind entsprechende Plugins und jedes dieser Plugins hat sein eigenes Verhalten. Am weitesten und besten entwickelt (jedenfalls in meinen Augen) ist JDT, das Java Developlment Toolkit. Es ist sehr mächtig, einige der Shortcuts, die ich erklärt hab, nur mal als Beispiel. In anderen Plugins hat man meist nicht so viel Macht, z.B. PHP oder das von Adobe bereitgestellt Toolkit für Flex/Flash sind dagegen ein Witz. Also Eclipse ist nicht gleich Eclipse, es kommt drauf an, was man für Plugins verwendet.

    Und Visual Studio ist auch eine sehr gute IDE, man muss nur mit ihr erstmal klar kommen, aber wenn das erstmal geschafft ist, dann ist das auch eine sehr gute und bequeme IDE, mit der man sehr schnell arbeiten und effektiv arbeiten kann. Ich weiß zwar nicht, wie es da bei VB.NET aussieht, aber mit C# hab ich damit nie Probleme gehabt, auch nicht mit der Intellisence.

    Jede IDE hat ihre Macken und Unterschiede zu anderen, sonst würde es ja auch keinen Spaß machen. Aber VS und Eclipse haben sich ja nicht umsonst etabliert, beide sind super.

    EDIT:
    Ganz vergessen... Das wichtigste Shortcut überhaupt: Strg+s xD Aber zuvor lass ich noch immer den Formatter (Strg+Shift+f) und den Cleaner (Shift+Alt+s -> Cleanup (und wer mag, noch Sort members, hab ich aber bereits im Cleanup drin)) drüberjagen (beide muss man aber zuvor erst in den Einstellungen konfigurieren, außer du magst deren Standardverhalten). Mit F3 springt man zur Deklaration/Definition (z.B. wenn man mal schnell in ein Methode springen muss, aber kein Bock hat sie im ganzen Projekt zu suchen). Mit F2 wird die entsprechende Doku angezeigt (oder einfach Maus drüber schweben lassen).

    Das wären eigentlich auch schon die wichtigsten... Was ich auch gerne ebnutze ist Strg+o. Ich habe zwar die Outline auch auf der rechten Seite, benutze sie aber nicht. Ab einer gewissen Größe ist in der Outline einfach zu viel und dann ist der Shortcut schneller, da man dort den Namen filtern kann. Mit Strg+7 Kommentiert man eine Zeile aus oder löscht den Kommentar (also nur die Kommentar-Slashes) (geht auch mit einem markierten Bereich und ist schneller als die Blockkommentare drumrum zu basteln, einfach markieren -> Strg+7 -> fertig). Was auch sehr interessant sein kann, ist zu wissen, wo eine Methode/Variable überall aufgerufen/verwendet wird. Einfach (wie meist) in den entsprechenden Namen klicken und Strg+Shift+G drücken, dann werden alle Aufrufe gesucht. So kann man auch schnell an die entsprechende Stelle springen. Mit Strg+G werden die Deklarationen gesucht, in wie fern das aber interessant sein kann, kann ich dir auch nicht sagen, da in den meisten Fällen man eh über F3 direkt hinspringt. Was auch sehr nützlich ist und du sicherlich auch öfter mal brauchen kannst, ist die Local History (Rechtsklick -> je nachdem ob nur vergleichen oder wiederherstellen willst, Compare with oder Replace -> Local History). Am besten du fügst dir irgendwo auch gleich das View dafür hinzu, dann hat mans gleich griffbereit.

    Also wie man sieht, Eclipse nimmt einem echt jede Menge arbeit ab und das alles ist nur ein Bruchteil von dem, was das JDT alles kann (wie gesagt, ja nach Sprache ist der Umfang anders).
    Geändert von Akeshihiro (23.08.11 um 09:07 Uhr)
    Trigoor2 bedankt sich. 
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  8. #8
    Trigoor2 Trigoor2 ist offline Mitglied Bronze
    Registriert seit
    Jul 2011
    Ort
    Karlsruhe
    Beiträge
    28
    Hallo liebe Leute,

    @Fabio
    Danke für die Erklärungen. Wollte aber einen einzigen Node im Tree als Icon haben. Aber ich habe eine Lösung gefunden. Siehe unten.

    @Akeshihiro
    Ja, Eclipse ist echt cool. Meine Lieblingsshortcuts sind Alt+"Pfeil nach unten"....einfach schön zum verschieben.
    Und...Strg + Alt + "Pfeil nach unten"...wenn man mal ein kleines Array anlegen will.
    Den SQL-Explorer werde ich mir mal anschauen. Ich hoffe doch, dass er HSQLDB unterstützt.

    So, jetzt zu meiner Lösung:
    Habe einen Link gefunden, der mir weiterhalf. Allerdings füllte er die Icons mit Farben anstatt mit Icons.
    Link: [URL="http://www.dreamincode.net/code/snippet1892.htm"]

    Das habe ich jetzt mal abgeändert. Es sieht so aus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
        public class tree{
          .......
            ImageIcon icon = new ImageIcon("C:/Temp/folder.gif");
            MyNode branch2 = new MyNode("MyVersion Branch2", icon);
          ......
    }
     
        class MyNode extends DefaultMutableTreeNode {
            
            private JLabel label;                // label which will contain Text and Icon
            MyNode(String text, ImageIcon icon) {
                label = new JLabel(text);
                // build an Icon with the Color passed as parameter
                label.setIcon(icon);
            }
            
            /** returns the label */
            JLabel getLabel() {
                return label;
            }
        }

    Und schon klappt es.

    Aber eine Frage hätte ich noch. Ich glaube mich daran erinnern zu können, dass man über eine Factory oder so etwas Ähnliches Zugriff auf die Icons die in Java implementiert sind zugreifen kann.
    Habe vor mehrere Look&Feels zu unterstützen. Und es sieht deppert aus wenn der Metal-Ordner bei einem anderem L&F angezeigt wird.

    Viele Grüße
    Trigoor
    Geändert von Trigoor2 (24.08.11 um 20:45 Uhr) Grund: Immer diese Rechtschreibfehler..
     

  9. #9
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi,
    schön zu hören, dass du noch eine Lösung gefunden hast. Zu deiner Frage wegen dem L&F, habe ich hier einen Link gefunden (UIManager), den du dir mal ansehen solltest. Über diesen UIManager kannst du die Default-Icons (und vieles mehr) des L&F laden, wenn ich das richtig verstanden habe. Habe damit aber selber noch nichts gemacht muss ich zugeben.
    Auf dieser Seite kannst du noch alle Defaults einsehen. (sind ein paar mehr)

    Gruß

    Fabio
    Trigoor2 bedankt sich. 
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  10. #10
    Trigoor2 Trigoor2 ist offline Mitglied Bronze
    Registriert seit
    Jul 2011
    Ort
    Karlsruhe
    Beiträge
    28
    Also der SQL-Explorer scheint cool zu sein. Und da er ODBC (ist ja eigentlich klar) unterstützt, dürfte er mit HSQLDB zurecht kommen.

    Das mit dem UIManager werde ich mal ausprobieren. Denke, dass ich das hinkriege.

    Gruß
    Trigoor
     

  11. #11
    Trigoor2 Trigoor2 ist offline Mitglied Bronze
    Registriert seit
    Jul 2011
    Ort
    Karlsruhe
    Beiträge
    28
    Ist echt easy...eine Zeile Code.

    Also, an das Icon vom Ordner kommt man so dran:

    ImageIcon ci = (ImageIcon) UIManager.get("Tree.closedIcon")

    Vielleicht braucht es wer?

    Gruß
    Trigoor
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 17.02.10, 23:40
  2. Aktiver Link soll angezeigt werden
    Von Despoiler im Forum CSS
    Antworten: 11
    Letzter Beitrag: 07.01.09, 19:07
  3. Es soll nur ein Bild angezeigt werden
    Von Zimtgruen im Forum PHP
    Antworten: 3
    Letzter Beitrag: 23.12.07, 12:23
  4. Selbstgemachter Mauszeiger soll angezeigt werden.
    Von UnrealSoldier im Forum HTML & XHTML
    Antworten: 2
    Letzter Beitrag: 16.04.04, 12:16
  5. Website soll zentriert angezeigt werden
    Von Gullynbg im Forum HTML-Editoren
    Antworten: 1
    Letzter Beitrag: 20.05.02, 12:27

Stichworte