2012-03-30 3 views
2

Ich habe eine JTree, die ich versuche, es so zu ändern, dass der tatsächliche Auswahlbereich für jeden ausgewählten Knoten von ganz links von JTree bis ganz rechts von JTree erstreckt .JTree: Aussehen unabhängig von L & F ändern

Die meisten Beispiele im Internet sprechen über die Erweiterung von BasicTreeUI. Von dort aus ändern Sie einfach die Methoden, die den Auswahlbereich bestimmen, und das war's. Dies erfordert jedoch, dass JTree - unabhängig von der Plattform, auf der es ausgeführt wird - diese Implementierung verwendet. Ich werde nicht wirklich in der Lage sein, die verschiedenen UI-Implementierungen zu nutzen, die auf bestimmte Plattformen abzielen, da ich immer BasicTreeUI (und nicht die Metal, Windows oder Aquia-Implementierungen) verwenden werde.

Was ich im Idealfall tun möchte, ist, die Implementierung von BasicTreeUI, die derzeit auf dem JTree installiert ist, zu nehmen und in einen benutzerdefinierten Wrapper von mir zu packen, der BasicTreeUI erweitert. Von dort würde ich alle Methoden überschreiben und an die umschlossene UI delegieren und meine eigene Implementierung einiger Methoden durchführen, um den Knotenauswahlbereich neu zu berechnen. Die meisten Methoden auf BasicTreeUI sind jedoch geschützt, , also kann ich das wirklich tun.

Nicht sicher, wie man das schafft ... irgendwelche Ideen wären willkommen!

+0

"Die meisten Methoden auf BasicTreeUI sind jedoch geschützt" - Wenn sie geschützt sind, können Sie sie überschreiben, meinst du 'privat'? –

Antwort

2

Vielleicht könnten Sie setUI außer Kraft setzen und die bereitgestellte Benutzeroberfläche in Ihrem benutzerdefinierten Baum UI wickeln, etwa so:

@Override 
public void setUI(TreeUI ui) { 
    super.setUI(new MyCustomTreeUI(ui)); 
} 

Eine weitere Möglichkeit zu prüfen, ist ein Blick in der Bereitstellung/Einstellung Baum UI Eigenschaften im globalen UIManager. Ich glaube, dass die plattformspezifischen Baum-UIs die globalen UIManager nach Eigenschaftswerten fragen und sich entsprechend konfigurieren - vielleicht könnten Sie einfach so etwas tun wie UIManager.put("Tree.selectionWidth", 100).

+0

Danke für Ihren Vorschlag. Es wird jedoch nicht wirklich funktionieren, da MyCustomTreeUI die erforderlichen Methoden der bereitgestellten ui-Instanz nicht überschreiben kann, da sie geschützt sind. Insbesondere versuche ich, die Dimension BasicTreeUI # createNodeDimensions() zu ändern, die die Knotengröße bestimmt. – sbrattla

+0

Sie können jedoch 'geschützte' Methoden überschreiben. –

+0

Wie würden Sie eine geschützte Methode überschreiben, wenn Sie dem Paket, in dem die Klasse lebt, nichts hinzufügen können? – sbrattla