JTabbedPane Anpassen Registerkarte Aussehen

8

Ich möchte das Aussehen der Registerkarten in JTabbedPane anpassen.
Ich möchte vom einfachsten und klarsten Verhalten ausgehen: keine Grenzen, einfarbig Das Problem ist, dass eine Unschönheit immer noch bleibt: die Tabs leichte Randüberlappung.

Sie sehen, dass, seit die zweite Registerkarte ausgewählt ist, sie "in den Vordergrund" gebracht wird. Dies wird durch eine geringfügige Überlappung erreicht. Gibt es eine (nicht knifflige) Möglichkeit, dieses Verhalten zu deaktivieren?

einfacher, testbarer Code (nur Import korrigieren):

%Vor%

}

    
AgostinoX 22.10.2011, 11:04
quelle

4 Antworten

4

Der richtige Weg wäre, Custom Look & amp; Fühle nur . Aber wenn du mit XxxTabbedPaneUI spielen willst, dann vielleicht dieser Beitrag kann Ihnen dabei helfen.

für Nimbus wird es besser sein, aephyr Codedepot

    
mKorbel 22.10.2011, 11:12
quelle
2

Erste (Teil-) Lösung. Ich habe den "Positionierungs" -Code gefunden.
Es ist die Methode calculateTabRects in TabbedPaneLayout , eine innere Klasse von BasicTabbedPaneUI. Die Methode ist extrem komplex, aber das Gute ist, dass der Teil, der die Registerkarte "vorzieht", gut kommentiert und in seiner eigenen überschreibbaren Methode isoliert wird! Es ist padSelectedTab .

Erstellen Sie eine Klasse, die nichts tut, anstatt die Komponente zu erhöhen, ist so einfach wie:

%Vor%

Beachten Sie, dass es sich um eine innere Klasse von MyTabbedPane handeln muss. Es muss durch Überschreiben von MyTabbedPane.createLayoutManager:

instanziiert werden %Vor%

Sehr einfach und tatsächlich funktioniert ... außer für einen Fall. Der createLayoutManager instanziert TabbedPaneLayout, wenn die tabLayoutPolicy WRAP_TAB_LAYOUT ist, instanziiert jedoch TabbedPanelScrollLayout, wenn tabLayoutPolicy SCROLL_TAB_LAYOUT ist. Letzteres hat private und keinen geschützten Zugriff, daher ist es nicht möglich, es zu unterklassifizieren!
Meine createLayoutManager-Implementation verliert scrollbares Verhalten.

    
AgostinoX 22.10.2011 16:03
quelle
1

Sie können paintContentBorderTopEdge in MyTabbedPaneUI überschreiben, damit keine der Registerkarten ausgewählt wird. Dies ist keine schöne Lösung, aber das Hacken von UI-Klassen bietet sich meiner Erfahrung nach selten an:)

%Vor%     
kylewm 22.10.2011 15:40
quelle
1

Sie können HTML-Tags wie folgt in den ersten Parameter einfügen:

MyJTabbedPane.addTab("<html><h1 style='padding:20px;'>TEST</h1></html>", new JPanel());

    
Mike Lowry 24.03.2014 15:47
quelle

Tags und Links