Dynamischen JTree aus Hyperlinks bzw. Anker erzeugen

djmatt

Mitglied
Hallo Leute!

Eins gleich vorweg: für mich ist Java noch ein bisschen Neuland.

wie auch immer, für mein Projekt (ein auf java basierender HTML-Viewer) auf der FH brauche ich unbedingt einen dynamischen JTree, der die Hyperlinks bzw. Anker aus einer zuvor geöffneten HTML-Datei ausliest und dann darstellt.

Ich hab mir schon aus dem Internet ein paar Sachen dazu rausgesucht (u.a. das gleiche Spiel mit der Darstellung eines Verzeichnisses) und versucht, diese zu adaptieren, bin aber kläglich gescheitert.

Hat hier jemand eine Idee wie der Code aussehen muss, damit der JTree dynamisch erzeugt wird und die Hyperlinks bzw. Anker ausliest und darstellt?

Besten Dank schon mal im Voraus!




btw: Im Anhang findet ihr einen Screenshot des Tools (den statischen Tree dort hab ich nur zu Testzwecken eingebaut).
 

Anhänge

  • Bildschirmfoto-HTML-Viewer.png
    Bildschirmfoto-HTML-Viewer.png
    13,1 KB · Aufrufe: 32
beim Erstellen des JTrees. Der soll die im HTML-Dokument enthaltenen Hyperlinks bzw. Anker als Baum abbilden.

Wie das mit einem Verzeichnisinhalt funktioniert hab ich schon heraus gefunden:

Java:
import java.io.*;
import javax.swing.*;
import javax.swing.tree.*;
 
public class FileTreeDemo extends JFrame {
    private int maxDepth = 2;
    private int curDepth = 0;
 
    public FileTreeDemo() {
        File rootFile = new File("/home/matthias/");
        JTree tree = new JTree(this.getNode(rootFile));
        this.getContentPane().add(new JScrollPane(tree));
    }
 
        private DefaultMutableTreeNode getNode(File file) {
        curDepth++;
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(file.getName());
        File[] list = file.listFiles();
        for (int i = 0; i < list.length; i++) {
            if (list[i].isFile()) {
                if (list[i].getName().endsWith(".txt"))
                    node.add(new DefaultMutableTreeNode(list[i].getName()));
            } else if (curDepth<maxDepth){
                node.add(this.getNode(list[i]));
            }
            else {
                DefaultMutableTreeNode subNode = new DefaultMutableTreeNode(list[i].getName());
                subNode.add(new DefaultMutableTreeNode("...noch nicht ausgelesen"));
                node.add(subNode);
            }
        }
        curDepth--;
        return node;
    }
 
    public static void main(String[] args) {
        JFrame frame = new FileTreeDemo();
        frame.setBounds(0, 0, 500, 300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Müsste doch mit den Hyperlinks/Ankern so ähnlich funktionieren oder?
 
Müsste doch mit den Hyperlinks/Ankern so ähnlich funktionieren oder?
Sogar viel einfacher, z.B. braucht man da keinen rekursiven Methodenaufruf
Der Code kommt mir übrigens sehr bekannt vor ;-)

Wo hängst den überhaupt? An den Quellcode des HTML Dokuments zu kommen, den Quellcode auszulesen oder an die Hyperlinks im Quellcode zu kommen?
 
Hyperlinks überprüfst du mit Regulären Expresions(RegEx). Beispiel:

Java:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Reg01 
{
	public static void main(String[] args) 
	{
		String htmlInputData	= "<html><head></head><body><h1>Content</h1>Lösung aller Probleme: <a href=\"http://www.google.de\">Google</a>\n<br /> im Zweifel einfach <a href=\"http://java-forum.org\" title=\"forum\">Nachfragen</a></body></html>";
		String regex			="<a.*?href=\"([\\S]*?)\".*?>(.*?)</a>";
		
		Matcher links			= Pattern.compile(regex).matcher(htmlInputData);

		while(links.find())
			System.out.println(links.group(1) + " => " + links.group(2));
	}
}

Ausgabe:
Code:
http://www.google.de => Google
http://java-forum.org => Nachfragen
 
ok, danke
jetzt würd ich noch gern wissen, wie ich diese Hyperlinks dann als Baumstruktur im leftpanel angezeigt bekomme bzw. wie der Code dafür aussieht.
 
speichere die Informationen die du aus dem RegEx bekommst in einer Variable ab und/oder weise sie dem Tree als Child zu.
Schau dir einfach mal die Links von Micheal... an, wenn du nicht weist, wie man childs zu tree's added
 

Zurück
Oben