Portal > Foren > Java > Desktop-Applikationen und Grafik > JTree - Pfad hervorheben
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 02.06.2005, 11:24 Nach oben    #1
smokie
Gast
 
Beiträge: n/a
Standard JTree - Pfad hervorheben

Hallo zusammen!

Ich wollte den Pfad meines JTree in dem ich mich grad befinde Fett unterlegen, weiss aber nicht wie.

Fett unterlegen kann man mit

Code:
 
setFont(getFont().deriveFont(Font.BOLD));
Dann wird jedoch immer nur der selektierte Knoten unterlegt.
Dachte man kommt etwa so an den kompletten Pfad

Code:
public TreeNode[] getPathToRoot(TreeNode aNode);

Der Code meiner Klasse:

Code:
 
import java.awt.Color; 
import java.awt.Component; 
import java.awt.Font; 
 
import javax.swing.ImageIcon; 
import javax.swing.Icon; 
import javax.swing.JTree; 
import javax.swing.tree.DefaultTreeCellRenderer; 
 
/** 
* The type TreeIconRenderer is responsible for changing the tree icons. 
* 
* @author smokie */ 
 
public class TreeIconRenderer extends DefaultTreeCellRenderer { 
 
// declaring the Icons 
Icon leafIcon; 
ImageIcon openIcon; 
ImageIcon closedIcon; 
 
 
 
public TreeIconRenderer() { 
 
	 super(); 
 
//	 getting image box 
	 leafIcon = new ImageIcon(getClass().getResource("/images/system/box.gif")); 
 
//	 getting image arrow down	 
	 openIcon = new ImageIcon(getClass().getResource("/images/system/arrow_down.gif")); 
 
//	 getting image arrow right	 
	 closedIcon = new ImageIcon(getClass().getResource("/images/system/arrow.gif")); 
 
} 
 
/** 
	* Creating the component in the GridBagLayout. 
	* 
	* @param tree tree 
	* @param value cell value 
	* @param selected closed tree icon 
	* @param expanded opened tree icon 
	* @param leaf end point icon 
	* @param row number of row 
	* @param hasFocus the focus 
	*/ 
public Component getTreeCellRendererComponent( 
				 JTree tree, 
				 Object value, 
				 boolean selected, 
				 boolean expanded, 
				 boolean leaf, 
				 int row, 
				 boolean hasFocus) { 
 
	 super.getTreeCellRendererComponent( 
				 tree, value, selected, 
				 expanded, leaf, row, 
				 hasFocus); 
 
 
 
 
//		 setting icons	 
		 setLeafIcon(leafIcon); 
		 setOpenIcon(openIcon); 
		 setClosedIcon(closedIcon); 
		 setBackgroundSelectionColor(new Color(0, 0, 128)); 
		 putClientProperty("JTree.lineStyle", "None"); 
//		 setFont(getFont().deriveFont(Font.BOLD)); 
		 setBackground(new Color(212, 217, 231)); 
 
 
 
 
	 return this; 
} 
 
}
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 11:38 Nach oben    #2
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.160
Standard

Könnte funktionieren:
Code:
import java.awt.Color; 
import java.awt.Component; 
import java.awt.Font; 
 
import javax.swing.ImageIcon; 
import javax.swing.Icon; 
import javax.swing.JTree; 
import javax.swing.tree.DefaultTreeCellRenderer; 
 
/** 
* The type TreeIconRenderer is responsible for changing the tree icons. 
* 
* @author smokie */ 
 
public class TreeIconRenderer extends DefaultTreeCellRenderer { 
 
// declaring the Icons 
Icon leafIcon; 
ImageIcon openIcon; 
ImageIcon closedIcon; 
 
 
 
public TreeIconRenderer() { 
 
	 super(); 
 
//	 getting image box 
	 leafIcon = new ImageIcon(getClass().getResource("/images/system/box.gif")); 
 
//	 getting image arrow down	 
	 openIcon = new ImageIcon(getClass().getResource("/images/system/arrow_down.gif")); 
 
//	 getting image arrow right	 
	 closedIcon = new ImageIcon(getClass().getResource("/images/system/arrow.gif")); 
 
} 
 
/** 
	* Creating the component in the GridBagLayout. 
	* 
	* @param tree tree 
	* @param value cell value 
	* @param selected closed tree icon 
	* @param expanded opened tree icon 
	* @param leaf end point icon 
	* @param row number of row 
	* @param hasFocus the focus 
	*/ 
public Component getTreeCellRendererComponent( 
				 JTree tree, 
				 Object value, 
				 boolean selected, 
				 boolean expanded, 
				 boolean leaf, 
				 int row, 
				 boolean hasFocus) { 
 
	 super.getTreeCellRendererComponent( 
				 tree, value, selected, 
				 expanded, leaf, row, 
				 hasFocus); 
 
 
 
 
//		 setting icons	 
		 setLeafIcon(leafIcon); 
		 setOpenIcon(openIcon); 
		 setClosedIcon(closedIcon); 
		 setBackgroundSelectionColor(new Color(0, 0, 128)); 
		 putClientProperty("JTree.lineStyle", "None"); 
		 TreePath selectionPath = tree.getSelectionPath();
		 TreePath nodePath = ((DefaultTreeModel)tree.getModel()).getPathToRoot((TreeNode)value);
		 if(selectionPath == nodePath || nodePath.isDescentant(selectionPath)) {
		 	setFont(getFont().deriveFont(Font.BOLD));
		 }
		 setBackground(new Color(212, 217, 231)); 
 
 
 
 
	 return this; 
} 
 
}
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 11:44 Nach oben    #3
smokie
Gast
 
Beiträge: n/a
Standard

Danke für deine schnelle Antwort.

Probiere es gleich mal aus.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 12:40 Nach oben    #4
smokie
Gast
 
Beiträge: n/a
Standard

Bekomme bei
Code:
TreePath nodePath = ((DefaultTreeModel)tree.getModel()).getPathToRoot(  (TreeNode)value);
noch ne Fehlermeldung:

Type mismatch: cannot convert from TreeNode[] to TreePath
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 12:46 Nach oben    #5
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.160
Standard

Ändere die Zeile mal zu:
Code:
TreePath nodePath = new TreePath(((DefaultTreeModel)tree.getModel()).getPathToRoot((TreeNode)value));
Und das hier:
Code:
if(selectionPath == nodePath || nodePath.isDescentant(selectionPath)) {
muss zu dem hier werden:
Code:
if(selectionPath.equals(nodePath) || nodePath.isDescentant(selectionPath)) {
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 12:51 Nach oben    #6
smokie
Gast
 
Beiträge: n/a
Standard

java.lang.NullPointerException

at de.weidmueller.view.TreeIconRenderer.getTreeCellRe ndererComponent(TreeIconRenderer.java:7

at javax.swing.plaf.basic.BasicTreeUI$NodeDimensionsH andler.getNodeDimensions(Unknown Source)

at javax.swing.tree.AbstractLayoutCache.getNodeDimens ions(Unknown Source)

at javax.swing.tree.VariableHeightLayoutCache$TreeSta teNode.updatePreferredSize(Unknown Source)

at javax.swing.tree.VariableHeightLayoutCache.rebuild (Unknown Source)

at javax.swing.tree.VariableHeightLayoutCache.setMode l(Unknown Source)

at javax.swing.plaf.basic.BasicTreeUI.setModel(Unknow n Source)

at javax.swing.plaf.basic.BasicTreeUI$PropertyChangeH andler.propertyChange(Unknown Source)

at javax.swing.event.SwingPropertyChangeSupport.fireP ropertyChange(Unknown Source)

at javax.swing.event.SwingPropertyChangeSupport.fireP ropertyChange(Unknown Source)

at javax.swing.JComponent.firePropertyChange(Unknown Source)

at javax.swing.JTree.setModel(Unknown Source)
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 12:53 Nach oben    #7
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.547
Standard

Was ist denn Zeile 78?
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 12:54 Nach oben    #8
smokie
Gast
 
Beiträge: n/a
Standard

if(selectionPath.equals(nodePath) || nodePath.isDescendant(selectionPath)) {
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 15:17 Nach oben    #9
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.160
Standard

Passiert, wenn es keine Selection gibt.

Code:
if(selectionPath != null && (selectionPath.equals(nodePath) || nodePath.isDescendant(selectionPath))) {
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 15:25 Nach oben    #10
smokie
Gast
 
Beiträge: n/a
Standard

Jau jetzt läuft alles ohne fehler.
Jedoch:
Wenn ich das Programm starte und einen Knoten selektiere wird der ganze Tree fett unterlegt, nicht der selektierte Ast.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 16:57 Nach oben    #11
smokie
Gast
 
Beiträge: n/a
Standard

Code:
 setFont(getFont().deriveFont(Font.BOLD));
Hier muss man dem Aufruf irgendwie eintrichtern das er nur speziell den selectionPath BOLD setzt.
Noch irgendeine Idee?
Sonst sehr klug gedacht@DragonMaster
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2005, 19:25 Nach oben    #12
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.160
Standard

Pack doch einfach ein "else" hinzu.
Ich würde die Schrift sowieso irgendwie lokal speichern. Ist sonst zu zeitraubend.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.06.2005, 08:43 Nach oben    #13
smokie
Gast
 
Beiträge: n/a
Standard

Hey, du bist gut.

Jetzt klappts.
Code:
 // setting icons 
setLeafIcon(leafIcon); 
setOpenIcon(openIcon); 
setClosedIcon(closedIcon); 
setBackgroundSelectionColor(new Color(0, 0, 128)); 
putClientProperty("JTree.lineStyle", "None"); 
TreePath selectionPath = tree.getSelectionPath();
TreePath nodePath = new TreePath(((DefaultTreeModel)tree.getModel()).getPathToRoot((TreeNode)value));
if(selectionPath != null && (selectionPath.equals(nodePath) || nodePath.isDescendant(selectionPath))) {
setFont(getFont().deriveFont(Font.BOLD));
 
}
else setFont(getFont().deriveFont(Font.PLAIN));
setBackground(new Color(212, 217, 231));

1000 Dank!!!
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Pfad automatisch rauskriegen Creativ PHP-Programmierung 2 02.09.2006 14:31
JScrollPane und JTree javra Desktop-Applikationen und Grafik 10 19.02.2006 10:39
Absoluten Pfad zu einer Datei ermitteln... cancer PHP-Programmierung 5 17.12.2005 16:40
JTree wird nicht aktualisiert Waldi5001 Desktop-Applikationen und Grafik 7 08.12.2005 15:31
JTree Farbe smokie Desktop-Applikationen und Grafik 6 06.07.2005 15:14


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

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 35 36 37 38 39 40 41 42 43 44 45