Ganz spezieller Renderer für meinen JTree

Status
Nicht offen für weitere Antworten.

m.a.k.

Neues Mitglied
Hallo zusammen.

Wie der Titel schon vermuten lässt, bin ich gerade dabei, mir die JTree Komponente ein wenig an meine Bedürfnisse anzupassen. Leider habe ich damit momentan noch größte Schwierigkeiten (u.a. weil ich das zum ersten Mal mache) und hoffe, jemand ist so nett mir bei dem ein oder anderen Problem zu helfen.

Folgendes soll am Ende rauskommen:
Ich schreibe gerade ein Programm welches vom Layout (und später auch von der Funktionalität) her dem Windows Update von Microsoft ähnlich sein soll.
Es gibt also einen Baum und dort sind alle verfügbaren Updates als Einträge aufgeführt. Jeder Eintrag hat ein kleines Icon, rechts daneben einen Text (den Namen des Updates) und daneben rechts noch einen Button, mit welchem das Update zu einer Liste (die hier nicht weiter wichtig ist) hinzugefügt werden soll.
Wenn man den Eintrag aufklappt, dann erscheint als Child-Node eine kleine Beschreibung.

Zu diesem Zweck habe ich nun also den Standard-Renderer für den JTree durch meinen eigenen ersetzt, und auf den ersten Blick sah das Ergebnis dann auch schonmal gar nicht so schlecht aus. Leider steckt der Teufel im Detail und es ist mir nicht gelungen, auch diese letzte Unschönheiten noch zu beseitigen. Vor allen Dingen zwei Sachen stören:

(1) Ich würde die Hinzufügen Buttons gerne am rechten Rand des Trees ausrichten, so dass sie alle untereinander stehen. Momentan sieht das nämlich nicht so toll aus:


1.jpg


Leider weiss ich nicht so recht, wie ich das Bewerkstelligen kann...

(2) Das zweite Problem ist noch viel schlimmer. Zum Anzeigen der Beschreibung nutze ich eine JTextArea. Leider sieht das Ding nach dem Aufklappen der Node folgendermaßen aus:

2.jpg


Zum einen nimmt die TextArea also nicht den gesamten horizontalen Platz ein, der zur Verfügung steht, sondern zwängt sich in die linke Ecke.
Zum anderen scheint es da einen Fehler mit den Scroll-Bars zu geben, denn diese funktionieren leider nicht. Normalerweise muss man dafür doch nicht einen extra Listener implementieren, oder?
Und last but not least stimmt irgendwas mit der horizontalen Größe nicht. Ich hätte ja erwartet, dass alle JTextArea-Controls in etwa die gleiche Höhe haben, aber wie man auf dem Bild sieht, ist das nichtmal im Ansatz der Fall.

Ich wäre sehr froh, wenn mir jemand bei einigen dieser Probleme weiterhelfen könnte. Sorry, falls das recht triviale Fragen sein sollten, allerdings mache ich das wie gesagt zum ersten Mal und ich sitze nun schon seit einiger Zeit ratlos davor.

Hier der Quellcode für den Renderer:

Code:
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.tree.TreeCellRenderer;

class TreeRenderer implements TreeCellRenderer
{
	JPanel pnlNode;
	JButton btnPriority;
	JLabel lblTitle;
	JButton btnAddRemove;
	
	JPanel pnlLeaf;
	JTextArea txtDescription;
	
	public TreeRenderer()
	{
		GridBagLayout gblNode = new GridBagLayout();
		GridBagLayout gblLeaf = new GridBagLayout();
		GridBagConstraints gbc = new GridBagConstraints();
		
		//panel for the nodes
		pnlNode = new JPanel(gblNode);
		btnPriority = new JButton();
		lblTitle = new JLabel();
		btnAddRemove = new JButton();
		
		//priority icon
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.weightx = 0;
		gbc.weighty = 0;
		gbc.anchor = GridBagConstraints.WEST;
		gbc.fill = GridBagConstraints.NONE;
		gbc.insets = new Insets(0, 10, 0, 10);
		gblNode.setConstraints(btnPriority, gbc);
		
		//title
		gbc.gridx = 1;
		gbc.gridy = 0;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.weightx = 1;
		gbc.weighty = 1;
		gbc.anchor = GridBagConstraints.CENTER;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.insets = new Insets(0, 10, 0, 10);
		gblNode.setConstraints(lblTitle, gbc);
		
		//add / remove button
		gbc.gridx = 2;
		gbc.gridy = 0;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.weightx = 0;
		gbc.weighty = 0;
		gbc.anchor = GridBagConstraints.EAST;
		gbc.fill = GridBagConstraints.NONE;
		gbc.insets = new Insets(0, 10, 0, 10);
		gblNode.setConstraints(btnAddRemove, gbc);
		
		pnlNode.add(btnPriority);
		pnlNode.add(lblTitle);
		pnlNode.add(btnAddRemove);
		
		//panel for the leafs
		pnlLeaf = new JPanel(gblLeaf);
		txtDescription = new JTextArea();
		
		txtDescription.setLineWrap(true);
		
		JScrollPane scrollDescription = new JScrollPane(txtDescription);
		
		//description
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.weightx = 1;
		gbc.weighty = 1;
		gbc.anchor = GridBagConstraints.CENTER;
		gbc.fill = GridBagConstraints.BOTH;
		gbc.insets = new Insets(10, 10, 10, 10);
		gblLeaf.setConstraints(scrollDescription, gbc);
		
		pnlLeaf.add(scrollDescription);
	}

	public Component getTreeCellRendererComponent(JTree Tree, Object Value, boolean bSelected, boolean bExpanded,
																								boolean bIsLeaf, int nRow, boolean bHasFocus)
	{
		if(bIsLeaf)
		{
			txtDescription.setText(Value.toString());
			return pnlLeaf;
		}
		else
		{
			lblTitle.setText(Value.toString());
			btnAddRemove.setText("Hinzufügen");
			return pnlNode;
		}
	}
}

Danke schonmal für alle Vorschläge, Hinweise, Hilfestellungen etc.... ;)

m.a.k.

P.S.: Bevor ich es vergesse: Vielleicht wäre jemand noch so nett mir einen Tipp zu geben, wie ich am besten die Listener für die Buttons implementieren könnte? Da habe ich nämlich bisher noch gar keine Idee zu.
 
G

Guest

Gast
SamHotte hat gesagt.:
Probier mal, der JScrollPane eine Size und/oder eine PreferredSize zu geben.

Danke für den Tipp, das werde ich heute Abend direkt mal versuchen.

Ansonsten stehe ich leider immer noch vor dem Problem, dass ich nicht weiss, wie genau ich die Listener für die Buttons implementieren kann... Hat da vielleicht jemand eine Idee?

Gruß
m.a.k.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Knopf ganz oben (JFrame) AWT, Swing, JavaFX & SWT 9
D JavaFX MediaPlayer spielt MP3 nicht ganz AWT, Swing, JavaFX & SWT 6
B setCursor() lässt Cursor ganz verschwinden AWT, Swing, JavaFX & SWT 9
D Swing JScrollbar ganz nach unten scrollen AWT, Swing, JavaFX & SWT 2
C TextArea Ausgabe immer ganz oben AWT, Swing, JavaFX & SWT 3
R Kann ich GANZ ohne AWT auskommen? AWT, Swing, JavaFX & SWT 5
J Brauche ganz dringend Hilfe!!! AWT, Swing, JavaFX & SWT 5
Roumeo Swing Verzweifle: JTable funktioniert nicht ganz wie es soll... AWT, Swing, JavaFX & SWT 12
C Fenster gleich bewegen funktioniert nicht ganz! AWT, Swing, JavaFX & SWT 11
N JPanel nicht ganz drucken AWT, Swing, JavaFX & SWT 2
R JScrollBar / JScrollPane: Ermitteln ob ganz unten AWT, Swing, JavaFX & SWT 2
C JScrollPane immer ganz unten ausrichten AWT, Swing, JavaFX & SWT 17
M JFrame im Vollbildmodus öffnen klappt nicht so ganz AWT, Swing, JavaFX & SWT 2
W JTable wird vertikal in JScrollPane nicht ganz angezeigt AWT, Swing, JavaFX & SWT 2
M Ganz normales Bild einfügen AWT, Swing, JavaFX & SWT 6
T MessageBox schließt nicht ganz AWT, Swing, JavaFX & SWT 9
M JScrollPane immer bis ganz nach unten scrollen lassen AWT, Swing, JavaFX & SWT 5
S jScrollPane ganz nach unten scrollen AWT, Swing, JavaFX & SWT 4
E JavaDialoge und ganz besondere Wünsche :) AWT, Swing, JavaFX & SWT 2
M Ganz simpler GUI-Builder mit Reflection AWT, Swing, JavaFX & SWT 8
G JMenu Info-Fenster ganz Rechts AWT, Swing, JavaFX & SWT 5
R Ganz Einfach Frage AWT, Swing, JavaFX & SWT 2
R Ganz Einfach Frage AWT, Swing, JavaFX & SWT 3
J ganz dringend File Chooser: extensions! AWT, Swing, JavaFX & SWT 6
S Spezieller Button AWT, Swing, JavaFX & SWT 2
I Spezieller Knopf in Swing? Soll sein wie der Run in Eclipse. AWT, Swing, JavaFX & SWT 4
G 'Spezieller' Tooltip, wenn JTable-Column zu schmal AWT, Swing, JavaFX & SWT 6
B Spezieller Cursor in Swing AWT, Swing, JavaFX & SWT 7
B Spezieller Button gesucht AWT, Swing, JavaFX & SWT 10
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
L JavaFX Renderer für JavaFX AWT, Swing, JavaFX & SWT 2
T Table Renderer AWT, Swing, JavaFX & SWT 2
D Swing JTable Renderer Grafikfehler AWT, Swing, JavaFX & SWT 0
M JTable Cell Renderer- Terminplaner AWT, Swing, JavaFX & SWT 2
B JTable Renderer / Listener AWT, Swing, JavaFX & SWT 7
H default cell renderer AWT, Swing, JavaFX & SWT 3
C JComboBox Renderer Problem AWT, Swing, JavaFX & SWT 7
N Renderer Editoren und die JCombobox AWT, Swing, JavaFX & SWT 2
P Swing HTML-Renderer AWT, Swing, JavaFX & SWT 15
B MouseListener im Renderer einer JComboBox AWT, Swing, JavaFX & SWT 3
Z Swing JTable: Boolean Renderer AWT, Swing, JavaFX & SWT 3
B LookAndFeel Cell Renderer für JTable bei Nimbus Look and Feel AWT, Swing, JavaFX & SWT 2
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
Y PDF-renderer AWT, Swing, JavaFX & SWT 6
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
R [JTree/DefaultTreeCellRenderer] eigenes Renderer-Panel, so breit wie der JTree AWT, Swing, JavaFX & SWT 2
T JTable mit Renderer sortiert die gerenderte Spalte nicht richtig AWT, Swing, JavaFX & SWT 2
R Swing TableRowSorter und Header Renderer AWT, Swing, JavaFX & SWT 2
N JTable, Renderer mit Button AWT, Swing, JavaFX & SWT 3
D JTable - JCheckbox und Renderer AWT, Swing, JavaFX & SWT 2
G JComboBox Renderer problem AWT, Swing, JavaFX & SWT 5
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
G Cell Renderer AWT, Swing, JavaFX & SWT 5
N Verständnissfrage: Jtable und DefaultTableCell Renderer AWT, Swing, JavaFX & SWT 2
Tom299 Cell Renderer mit Link AWT, Swing, JavaFX & SWT 2
D Problem bei meinem Cell Renderer AWT, Swing, JavaFX & SWT 2
K jtable jpanel renderer AWT, Swing, JavaFX & SWT 2
C Fragen zur Darstellung einer JTable mittels Renderer AWT, Swing, JavaFX & SWT 2
S JTree - Renderer - Font AWT, Swing, JavaFX & SWT 3
L Renderer mit nativen komponenten in tabelle / tree / list AWT, Swing, JavaFX & SWT 4
M JTree mit eigenem Renderer sieht seltsam aus AWT, Swing, JavaFX & SWT 2
S JComboBox, ein Renderer und das selektierte Objekt AWT, Swing, JavaFX & SWT 4
C Proleme mit eigenem Cell Renderer AWT, Swing, JavaFX & SWT 3
M setOpaque() bei eigenem Renderer AWT, Swing, JavaFX & SWT 5
M Symbole beim eigenen Renderer AWT, Swing, JavaFX & SWT 7
M Renderer AWT, Swing, JavaFX & SWT 2
K JTable Renderer AWT, Swing, JavaFX & SWT 11
K JTable Renderer - Probs mit Icon AWT, Swing, JavaFX & SWT 3
V SWT eigener Renderer? + wo gibts die Sourcen für SWT AWT, Swing, JavaFX & SWT 2
T Problem mit JTable - Renderer AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben