Hallo Leute!
Ich schreibe für Programmieren an der FH einen auf Java basierenden HTML Viewer. So weit funktioniert auch alles, d.h. das Ding stellt die einfache HTML-Files (ohne Tabellen, Bilder,...) korrekt dar und das Navigieren mit Hyperlinks funktioniert dank dem Hyperlinklistener auch wunderbar.
Das einzige was mir jetzt allerdings noch fehlt ist folgendes:
Es soll nach einem Klick auf einen Hyperlink der entsprechende Node (der genauso heißt wie der Hyperlink, da das ganze sehr schlicht gehalten ist) automatisch markiert werden. Konkret heißt das, wenn ich beispielsweise auf den Hyperlink "Funktionen" klicke soll auch der Tree-Node namens "Funktionen" markiert werden.
Ich habe schon einiges versucht, nur hat das hat bis dato nichts bzw. nicht viel gebracht.
Vielleicht kann mir ja hier einer helfen bzw. einen entscheidenden Tipp geben. Entwicklungsumgebung Eclipse 3.5.2.
Nachstehend die relevanten Methoden:
Danke schon mal!
Ich schreibe für Programmieren an der FH einen auf Java basierenden HTML Viewer. So weit funktioniert auch alles, d.h. das Ding stellt die einfache HTML-Files (ohne Tabellen, Bilder,...) korrekt dar und das Navigieren mit Hyperlinks funktioniert dank dem Hyperlinklistener auch wunderbar.
Das einzige was mir jetzt allerdings noch fehlt ist folgendes:
Es soll nach einem Klick auf einen Hyperlink der entsprechende Node (der genauso heißt wie der Hyperlink, da das ganze sehr schlicht gehalten ist) automatisch markiert werden. Konkret heißt das, wenn ich beispielsweise auf den Hyperlink "Funktionen" klicke soll auch der Tree-Node namens "Funktionen" markiert werden.
Ich habe schon einiges versucht, nur hat das hat bis dato nichts bzw. nicht viel gebracht.
Vielleicht kann mir ja hier einer helfen bzw. einen entscheidenden Tipp geben. Entwicklungsumgebung Eclipse 3.5.2.
Nachstehend die relevanten Methoden:
Java:
@Override
public void actionPerformed(ActionEvent event) {
String actCmd = event.getActionCommand();
// get path to currently selected node
TreePath tp = tree.getLeadSelectionPath();
if (tp == null)
return;
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (node == null) {
return;
} else {
}
// get the data model used for this tree
DefaultTreeModel dtm = (DefaultTreeModel)tree.getModel();
DefaultMutableTreeNode nodeSel = (DefaultMutableTreeNode)tp.getLastPathComponent();
// create new child, insert it into the selected node as the last child and
// expand the tree to show the new child
if (actCmd.equals("add")) {
DefaultMutableTreeNode child = new DefaultMutableTreeNode("child");
dtm.insertNodeInto(child, nodeSel, nodeSel.getChildCount());
tree.expandPath(tp);
}
// get the data assigned to the selected node, modify it and assign it to the node and
// inform the TreeModel that a node content has changed
else if (actCmd.equals("change")) {
String nodeSelUserObj = (String)nodeSel.getUserObject();
nodeSel.setUserObject(nodeSelUserObj + "C");
dtm.nodeChanged(nodeSel);
}
// entire tree cannot be deleted; get parent node of selected node, remove
// selected node from tree and set new selection path to the parent node
else {
if (nodeSel.isRoot())
return;
DefaultMutableTreeNode parNode = (DefaultMutableTreeNode)nodeSel.getParent();
tree.setSelectionPath(new TreePath(dtm.getPathToRoot(parNode)));
}
}
Java:
// the following method contains the Hyperlinklistener which enables the
// html viewer to display hyperlinks
@Override
public void hyperlinkUpdate(HyperlinkEvent event) {
if (event.getEventType() == HyperlinkEvent.EventType.ENTERED) {
edit.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
if (event.getEventType() == HyperlinkEvent.EventType.EXITED) {
edit.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
try {
// in case of long wait time the corresponding system cursor
// will be shown ;
edit.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
edit.setPage(event.getURL());
} catch (IOException newPageExc) {
newPageExc.printStackTrace();
} finally {
edit.setCursor(Cursor
.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
}
@Override
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
/**TreePath path = e.getNewLeadSelectionPath();
tree.setSelectionPath(path);
System.out.println(path);**/
if (node == null)
return;
if (node == tree.getLastSelectedPathComponent()) {
Object nodeInfo = node.getUserObject();
if (node.isLeaf()) {
URLInfo anker = (URLInfo) nodeInfo;
displayURL(anker.URL);
if (DEBUG) {
System.out.print(": \n ");
}
}
if (DEBUG) {
System.out.println(nodeInfo.toString());
}
}
}
Danke schon mal!
Zuletzt bearbeitet: