Nodes eines statischen JTrees sollen auf Anker (Textmarken) in einer HTML-Datei zeigen

djmatt

Mitglied
Nachdem ich die Idee mit dem dynamischen JTree verworfen habe, hab ich nun einen statischen JTree in mein Java-Projekt (HTML-Viewer) implementiert. Eins gleich vorweg: der HTML-Viewer ist nun maßgeschneidert auf eine bestimmte HTML-Datei (mein Professor hat nämlich gemeint, ich soll mir da nicht zu viel Aufwand antun).

Hier hab ich allerdings folgendes Problem:
Ich schaffe es nicht, das irgendwie hinzu bekommen, dass die Nodes des Trees auf eine Textmarke, die in der HTML-Datei definiert wurde, zeigen. Es soll nämlich beim Klick auf einen dieser Nodes zur entsprechenden Textmarke in der HTML-Datei gesprungen werden (soll in der EditorPane auf der rechten Seite - siehe angehängtes Bild - dann natürlich angezeigt werden).

Ich hab da schon einiges probiert, bin aber bis jetzt nicht auf einen grünen Zweig gekommen.

Hier mal die entsprechende Klasse, diese die Anker definiert + der dazu gehörige Konstruktor
Java:
	private class AnkerInfo {
		public String ankerName;
		public URL ankerURL;

		public AnkerInfo(String anker, String filename) {
			ankerName = anker;
			ankerURL = getClass().getResource(filename);
			if (ankerURL == null) {
				System.err
						.println("Folgende Datei konnte nicht gefunden werden: "
								+ filename);
			}
		}

		public String toString() {
			return ankerName;
		}
	}

Und nachstehend einer meiner Versuche, das Problem zu lösen:
Java:
private void createNodes(DefaultMutableTreeNode top) {
		DefaultMutableTreeNode category = null;
		DefaultMutableTreeNode anker = null;

		category = new DefaultMutableTreeNode("Files");
		top.add(category);

		anker = new DefaultMutableTreeNode(new AnkerInfo("Introduction",
				"index.html"));
		category.add(anker);

		anker = new DefaultMutableTreeNode(new AnkerInfo("Functions",
				"index.html#Functions"));
		category.add(anker);

		anker = new DefaultMutableTreeNode(new AnkerInfo("Systemrequirements",
				"index.html#Systemrequirements"));
		category.add(anker);

		anker = new DefaultMutableTreeNode(new AnkerInfo("Further Information",
				"index.html#Furtherinf"));
		category.add(anker);

		anker = new DefaultMutableTreeNode(new AnkerInfo("Credits",
				"index.html#credits"));
		category.add(anker);

	}

Anscheinend denkt das Programm, dass es bei zB. bei dem Stringwert "index.html#credits" um den gesamten Dateinamen handelt...Daher bekomm ich dann natürlich auch auf der Konsole und im Programm selbst die Fehlermeldung, dass die entsprechende Datei nicht gefunden wurde. Es soll allerdings dem Programm irgendwie klargemacht werden, dass es sich bei #credits um eine Textmarke handelt.

Hat hier jemand ne Idee?
 

Anhänge

  • Bildschirmfoto-HTML-Viewer by M. Kainz.png
    Bildschirmfoto-HTML-Viewer by M. Kainz.png
    46,7 KB · Aufrufe: 44

Marco13

Top Contributor
Hm... vielleicht mit
int index = string.indexOf("#")
schauen, ob dort ein # drin vorkommt, und falls ja (also falls das Ergebnis !=-1 ist) mit
String s = string.substring(0, index);
den Teil ohne den Ankerteil rausfischen!?
 

djmatt

Mitglied
ich hab das probiert, nur spuckt mir das Eclipse schon bei der Variablendeklaration eine Fehlermeldung aus:

cannot make a static reference to the non-static method indexOf(String) from the type String
 

djmatt

Mitglied
Wieder mal einer meiner unzähligen Versuche, das Problem in den Griff zu bekommen.
Tu mich leider ein bisschen schwerer bei der Materie (bin noch Newbie bei Java).

Java:
  private class AnkerInfo {
        public String ankerName;
        public URL ankerURL;
	public int index = String.indexOf("#");

 
        public AnkerInfo(String anker, String filename, int index) {
            ankerName = anker;
            ankerURL = getClass().getResource(filename + index);
            if (ankerURL == null) {
                System.err
                        .println("Folgende Datei konnte nicht gefunden werden: "
                                + filename + index);
            }
        }
 
        public String toString() {
            return ankerName;
        }
    }


private void createNodes(DefaultMutableTreeNode top) {
        DefaultMutableTreeNode category = null;
        DefaultMutableTreeNode anker = null;
 
        category = new DefaultMutableTreeNode("Files");
        top.add(category);
 
        anker = new DefaultMutableTreeNode(new AnkerInfo("Introduction",
                "index.html",""));
        category.add(anker);
 
        anker = new DefaultMutableTreeNode(new AnkerInfo("Functions",
                "index.html","#Functions"));
        category.add(anker);
 
        anker = new DefaultMutableTreeNode(new AnkerInfo("Systemrequirements",
                "index.html","#Systemrequirements"));
        category.add(anker);
 
        anker = new DefaultMutableTreeNode(new AnkerInfo("Further Information",
                "index.html","#Furtherinformation"));
        category.add(anker);
 
        anker = new DefaultMutableTreeNode(new AnkerInfo("Credits",
                "index.html","#credits"));
        category.add(anker);
 
    }
 

djmatt

Mitglied
Weiters hier der Code aller Klassen und Methoden, die für die Links bzw. Anker (Textmarken) relevant sind (Bearbeitungsstand: 9.7.2010, daher der int-Wert noch nicht implementiert)

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 {
				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();

		if (node == null)
			return;

		Object nodeInfo = node.getUserObject();
		if (node.isLeaf()) {
			AnkerInfo anker = (AnkerInfo) nodeInfo;
			displayURL(anker.ankerURL);
			if (DEBUG) {
				System.out.print(anker.ankerURL + ":  \n    ");
			}
		}
		if (DEBUG) {
			System.out.println(nodeInfo.toString());
		}
	}

	private void displayURL(URL url) {
		try {
			if (url != null) {
				edit.setPage(url);
			} else { // null url
				edit.setText("Link/Datei oder Anker nicht gefunden");

			}
		} catch (IOException e) {
			System.err.println("Attempted to read a bad URL: " + url);
		}
	}

	private class AnkerInfo {
		public String ankerName;
		public URL ankerURL;
		public String ankerL;

		public AnkerInfo(String anker, String filename, String ankerLabel, String string) {
			ankerName = anker;
			ankerURL = getClass().getResource(filename + ankerLabel);
			ankerL = ankerLabel;
			if (ankerURL == null) {
				System.err
						.println("Folgende Datei konnte nicht gefunden werden: "
								+ filename + ankerLabel);
			}
		}

		public String toString() {
			return ankerName;
		}
	}

	private void createNodes(DefaultMutableTreeNode top) {
		DefaultMutableTreeNode category = null;
		DefaultMutableTreeNode anker = null;

		category = new DefaultMutableTreeNode("Files");
		top.add(category);

		anker = new DefaultMutableTreeNode(new AnkerInfo("Introduction","",
				"index.html",""));
		category.add(anker);

		anker = new DefaultMutableTreeNode(new AnkerInfo("Functions","",
				"index.html#Function" ,""));
		category.add(anker);

		anker = new DefaultMutableTreeNode(new AnkerInfo("Systemrequirements","",
				"index.html#systemrequirements",""));
		category.add(anker);

		anker = new DefaultMutableTreeNode(new AnkerInfo("Further Information","",
				"index.html#Furtherinf",""));
		category.add(anker);

		anker = new DefaultMutableTreeNode(new AnkerInfo("Credits","",
				"index.html#credits",""));
		category.add(anker);

	}

	public void windowClosing(WindowEvent event) {

		System.exit(0);
	}

vielleicht liegt ja da irgendwo der Fehler.
 
G

Gast2

Gast
Java:
public int index = String.indexOf("#");
Da liegt der Fehler. indexOf() ist nunmal keine statische Methode :)
Und woher sollte die Methode so auch wissen wo nach der Raute gesucht werden sollte?

indexOf() rufst du auf einem existierenden String auf:

Java:
String test = "123456789";
int index = test.indexOf("3");
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Probleme mit der Anzeige eines einzigen Nodes in einem JTree AWT, Swing, JavaFX & SWT 9
G JavaFX - bugs bei der ermittlung der breite der nodes AWT, Swing, JavaFX & SWT 3
krgewb Swing JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 4
C JavaFX Auf Nodes einer FXML-Datei in start Methode zugreifen AWT, Swing, JavaFX & SWT 5
G JavaFX Width von Nodes einer HBox an Tab width anpassen AWT, Swing, JavaFX & SWT 3
F Swing JTree + DiffUtils // Markierung Nodes aufheben AWT, Swing, JavaFX & SWT 2
M Nodes in JTree nicht anzeigen AWT, Swing, JavaFX & SWT 0
A Swing JTree - Nodes expanden AWT, Swing, JavaFX & SWT 2
1 Swing JTree collapse child nodes AWT, Swing, JavaFX & SWT 4
G JTree entfernt Nodes nicht AWT, Swing, JavaFX & SWT 12
L Swing [JTree] Selektierte Nodes nummerieren AWT, Swing, JavaFX & SWT 6
A Swing JTree Editable einzelne Nodes editierbar machen! AWT, Swing, JavaFX & SWT 2
T JTree - alle Nodes entfernen AWT, Swing, JavaFX & SWT 8
D JTree programmtechnisch mehrere Nodes auswählen. AWT, Swing, JavaFX & SWT 2
D JTree - Zugriff auf Nodes mit Object AWT, Swing, JavaFX & SWT 6
P [JTree] Icon für Nodes und Leafs ändern bzw. löschen AWT, Swing, JavaFX & SWT 2
J JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 2
N JTree Nodes durchsuchen AWT, Swing, JavaFX & SWT 3
M JTree nodes nicht selektierbar AWT, Swing, JavaFX & SWT 2
T JTree alle nodes expanden AWT, Swing, JavaFX & SWT 4
B JTree - Reihenfolge der Nodes verändern AWT, Swing, JavaFX & SWT 3
P JTree -> nodes ausblenden bzw nicht anzeigen AWT, Swing, JavaFX & SWT 7
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
I JavaFX Langes drücken eines Buttons AWT, Swing, JavaFX & SWT 4
B Swing Wie Witdh und Height eines GuiElements bekommen AWT, Swing, JavaFX & SWT 5
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
J Swing Erstellung eines User Interface AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
O Swing Aufbau eines JFrames AWT, Swing, JavaFX & SWT 2
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
A befüllen eines JTables mittels Methode AWT, Swing, JavaFX & SWT 10
javampir Swing Wanderung eines JFrames AWT, Swing, JavaFX & SWT 7
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0
I Erstellung eines kleinen Programmes AWT, Swing, JavaFX & SWT 8
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
T Swing Einzelne Teile eines Textes färben? AWT, Swing, JavaFX & SWT 10
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
HaukeG JavaFX JavaFX Resize und DragAndDrop eines Pane AWT, Swing, JavaFX & SWT 4
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
J Denkfehler bei Aktualisierung eines GUI AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben