Falsches Rendern durch JCheckBox in eigenem JTree

JavaMichael

Aktives Mitglied
Hallo,

da ich im Anfängerforum keine Hilfe gefunden habe, schreibe ich noch einmal, aber nun
in diesem Unterforum.

Folgende Situation:

Ich habe eine eigene Variante von einem JTree entwickelt. Diese hat aber leider ein starkes
optisches Problem (siehe Bilder). Wenn man auf die freie Fläche eines Knotens drückt, dann
wird alles normal gezeichnet (siehe Bild 1). Wenn man aber auf die im Knoten enthaltene
JCheckBox klickt, dann drängt sich diese zusammen mit dem Knoten in den Vordergrund,
sodass die Reihenfolge auf der Z - Achse verfälscht wird (siehe Bild 2).

Dazu habe ich die Theorie, dass die CheckBox sich in dem JLayeredPane des JFrames immer
in den Vordergrund drängen will und somit auch das JPanel, welches einen Knoten optisch
repräsentiert mit zieht.

1) Stimmt meine Theorie ?
2) Wenn ja, wie kann ich verhindern, dass sich die JCheckBox immer in den Vordergrund drängt ?
3) Sollte ich innerhalb von dem JTree ein eigenes JLayeredPane verwenden ?

Viele Grüße,

Michael
 

Anhänge

  • Bild1.png
    Bild1.png
    18,4 KB · Aufrufe: 22
  • Bild2.png
    Bild2.png
    22,2 KB · Aufrufe: 19

JavaMichael

Aktives Mitglied
Um das ganze mit NetBeans auszuführen, startet man die Datei "JWorldTreeTesting" im Paket "default package" der
Testpakete.

Ansonsten bin ich beim Programmieren ein mäßig erfahrener Einsteiger. Wenn euch sonst irgendetwas auffällt, mit dem
ich mein Programmieren verbessern kann, dann teilt mir dies bitte mit.
 

Anhänge

  • War Strategy.zip
    522,1 KB · Aufrufe: 1
Zuletzt bearbeitet:

mihe7

Top Contributor
Oje, da hast Du Dir ja was aufgehalst; eine komplett eigene Swing-Komponente mit angepasstem Look and Feel und das auf Basis von JTree, einer nicht gerade trivialen Komponente...

Da werde ich nicht weiter einsteigen, da ich keine Lust habe, mich durch tausende Zeilen JDK-Code zu quälen, aber prinzipiell dürfte das Problem bestehen, dass Dein Editor die gleiche Komponente verwendet, wie Dein Renderer, also ein entsprechend großes Panel mit Hintergrundfarbe. Gib da einfach mal eine JCheckBox zurück.
 

JavaMichael

Aktives Mitglied
Ich danke dir dennoch für deine Hilfe. Jeder noch so kleine Hinweis kann mich da schon weiter bringen, da ich auch schon
seit Stunden herumüberlege.

Was hältst du prinzipiell von meiner Alternative, den JTree über eine JLayeredPane zu rendern ?

Ansonsten habe ich bei dem Editor deinen Rat befolgt, dort eine JCheckBox zu verwenden und nun verhält sich der JTree tatsächlich
etwas mehr, wie ich es gerne hätte. Kannst du mir kurz umreissen, woran das liegen könnte oder an welcher Stelle in den JavaDocs
man soetwas nachlesen kann ?

Vielen Dank,

Michael
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Das hatte ich oben eigentlich schon geschrieben:
prinzipiell dürfte das Problem bestehen, dass Dein Editor die gleiche Komponente verwendet, wie Dein Renderer, also ein entsprechend großes Panel mit Hintergrundfarbe.

Beim Rendern wird Dein Baum von "hinten nach vorne" gezeichnet (das ist Folge dessen, dass die Knoten der Reihe nach gezeichnet werden), was auch so gewünscht ist. Der Editor liefert dagegen eine Komponente, die im JTree als Kindkomponente platziert wird und sich somit im Vordergrund befindet. Dabei hast Du halt nochmal das halbtransparentes Panel drübergebügelt, das Du bereits zum Zeichnen der Knoten verwendet hast. Dadurch entsteht dieser Effekt.

Das ist das Standardverhalten von Swing: paint() zeichnet erst die Komponente selbst, dann die Kindelemente des Containers (eine Swing-Komponente ist auch immer ein Container).

Hier steht was dazu: https://docs.oracle.com/javase/tutorial/uiswing/painting/closer.html

Was hältst du prinzipiell von meiner Alternative, den JTree über eine JLayeredPane zu rendern ?
Wüsste ad hoc nicht, wie das funktionieren und was das bringen sollte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Falsches GUI AWT, Swing, JavaFX & SWT 1
M Falsches Ergebnis bei Bildrotation AWT, Swing, JavaFX & SWT 1
M Trotz richtiger Daten, falsches Bild wird gezeichnet?! AWT, Swing, JavaFX & SWT 4
A liefert isArray ein falsches Resultat? AWT, Swing, JavaFX & SWT 2
C BufferedImage-Fehler? Falsches Bild wir gezeichnet AWT, Swing, JavaFX & SWT 5
L Falsches Fenster erscheint im Vordergrund bei Taskwechsel AWT, Swing, JavaFX & SWT 3
R Falsches Beispiel im Buch? AWT, Swing, JavaFX & SWT 4
Yonnig Lokale HTML-Datei in Java GUI rendern AWT, Swing, JavaFX & SWT 4
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
M Sauberes Rendern ? AWT, Swing, JavaFX & SWT 12
P Rendern von Geraden im 3 dimensionalen Raum durch Rotationen AWT, Swing, JavaFX & SWT 0
Luk10 Effizienteres CPU-Rendern AWT, Swing, JavaFX & SWT 33
B JList nach dem Rendern sortieren AWT, Swing, JavaFX & SWT 3
B Label breite ermitteln vor dem rendern? AWT, Swing, JavaFX & SWT 7
K JLabel neu rendern AWT, Swing, JavaFX & SWT 5
M 2D-Grafik Offscreen-Rendern von Bildern AWT, Swing, JavaFX & SWT 2
TiME-SPLiNTER Swing JListModel: String rendern AWT, Swing, JavaFX & SWT 2
E JPanel in BufferdImage rendern problem AWT, Swing, JavaFX & SWT 2
S Wort aus Einzelbuchstaben rendern? AWT, Swing, JavaFX & SWT 3
S Swing JScrollpane Inhalt auswechseln und neu rendern?! AWT, Swing, JavaFX & SWT 5
Kr0e Text rendern AWT, Swing, JavaFX & SWT 11
Kr0e Swing in Bild rendern AWT, Swing, JavaFX & SWT 7
D Area rendern AWT, Swing, JavaFX & SWT 4
D Bild rendern AWT, Swing, JavaFX & SWT 8
S JTree rendern der Knoten [+] und [-], nicht der Node Icons AWT, Swing, JavaFX & SWT 2
R JTable - Rendern der einzelnen Zellen AWT, Swing, JavaFX & SWT 3
P Unsichtbare Komponente in ein Bild rendern? AWT, Swing, JavaFX & SWT 11
I Text innerhalb von Rectangle rendern AWT, Swing, JavaFX & SWT 3
S Automatisches Rendern einen JPanels AWT, Swing, JavaFX & SWT 8
F JTree: Elemente über ganze Zeile rendern AWT, Swing, JavaFX & SWT 6
M rendern von zeichen AWT, Swing, JavaFX & SWT 4
N Textfelder = Inhalt vorhanden && Jtable rendern AWT, Swing, JavaFX & SWT 8
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
J Java Datei durch CMD mit Parameter ausführen AWT, Swing, JavaFX & SWT 1
A Panelwechsel durch RadioButtons AWT, Swing, JavaFX & SWT 1
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
Monokuma 2D-Grafik Imageimport durch eine gezeichnete Form ersetzen AWT, Swing, JavaFX & SWT 16
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
S JavaFX Tab durch Enter ersetzten AWT, Swing, JavaFX & SWT 3
M Swing Durch Usereingabe neues Objekt AWT, Swing, JavaFX & SWT 2
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
S Speicher Leak durch Tabellenaktualisierung AWT, Swing, JavaFX & SWT 5
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
B EventHandler für durch Tastenkombination erzeugte Zeichen AWT, Swing, JavaFX & SWT 3
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
S AWT JTextFields durch Array im JMenu erzeugen? AWT, Swing, JavaFX & SWT 19
J JTable bounds ändern durch resizing des Fensters AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
G Swing Durch GlassPane auf Button klicken und ActionEvent auslösen AWT, Swing, JavaFX & SWT 0
K Swing Durch Methode erzeugte Buttons ansteuern AWT, Swing, JavaFX & SWT 5
K JTable komplett durch andere ersetzen AWT, Swing, JavaFX & SWT 4
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
Z JavaFX Inhalt einer ViewTable durch Aktion einer Menubar ändern welche in einer anderen fxml ist AWT, Swing, JavaFX & SWT 4
R AWT AWT Textfeld durch Klick auf Button erstellen? AWT, Swing, JavaFX & SWT 3
F 2D-Grafik Objekt durch Einwirkung einer Kraft im Raum bewegen AWT, Swing, JavaFX & SWT 14
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
P JFrame manuell Grösse verändern durch 'mouseDragged' AWT, Swing, JavaFX & SWT 3
Messoras JWindow/Frame durch das man durchklicken kann AWT, Swing, JavaFX & SWT 5
S Swing Navigation durch JPanels AWT, Swing, JavaFX & SWT 0
D Swing Durch JFRAME hindurch klicken AWT, Swing, JavaFX & SWT 2
C Swing Durch Inhaltsänderung eines JTextfields eine Funktion aufrufen AWT, Swing, JavaFX & SWT 5
achillesat SWT Browser öffnen durch Button click AWT, Swing, JavaFX & SWT 5
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
S Canvas durch transparentes JPanel sichtbar machen AWT, Swing, JavaFX & SWT 2
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
S Objekt durch Tasteneingabe mehrmals drehen AWT, Swing, JavaFX & SWT 9
A Minimalestopuhr: JLabel.setText() durch eigenes Event ändern AWT, Swing, JavaFX & SWT 6
A Swing JTextField durch einen JButton leeren AWT, Swing, JavaFX & SWT 15
A Swing Anpassen der Spaltenbreite durch die länge eines Strings AWT, Swing, JavaFX & SWT 3
P JPanel- Listener durch JTextArea aktivieren AWT, Swing, JavaFX & SWT 8
P Durch Bilder Scrollen AWT, Swing, JavaFX & SWT 2
J Swing JButton durch Eingabe von Zahlen in JTextFields aktivieren AWT, Swing, JavaFX & SWT 3
A JComboBox-Inhalt durch neues Array ersetzen AWT, Swing, JavaFX & SWT 2
L Border verschwindet durch Graphics.drawImage() AWT, Swing, JavaFX & SWT 4
S Swing Scrollpanes: wie kann ich durch Java-Code an den "Anfang" scrollen AWT, Swing, JavaFX & SWT 8
M Swing JMenu verdeckt durch Komponente (aber kein AWT und Swing mix!?) AWT, Swing, JavaFX & SWT 3
C Swing Fensterresize durch doppelklick - wie die neue Grösse erhalten? AWT, Swing, JavaFX & SWT 3
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
S SWT Shell durch Event in der Größe verändern AWT, Swing, JavaFX & SWT 7
F Drag & Drop durch Verbindungslinien AWT, Swing, JavaFX & SWT 10
F Wert durch ActionListener an Klasse übergeben AWT, Swing, JavaFX & SWT 3
L SWT Text SelectionText ersetzen durch anderen String AWT, Swing, JavaFX & SWT 6
O keine ähnliche Farben durch Random in Java AWT, Swing, JavaFX & SWT 21
L ListSelectionListener durch Code auslösen AWT, Swing, JavaFX & SWT 3
M Ein Tab eine JTabbedPane durch Button Druck öffen AWT, Swing, JavaFX & SWT 2
Shanks Hintergrundfarbe durch Button click ändern ?? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben