Frage

Ich versuche, eine JTabbedPane zu bekommen, wo alle Registerkarten (die tatsächlichen Registerkarten, nicht die Komponenten) die gleiche Breite aufweisen (entweder die für das größte Etikett oder eine konstante Breite benötigt minimale Breite).

Ich habe versucht, BasicTabbedPaneUI.getTabBounds(int tabIndex, Rectangle dest) außer Kraft zu setzen, aber anscheinend ist dieses Verfahren nicht durch die Malweise von BasicTabbedPaneUI verwendet, sondern es eine Rects Array verwendet die Registerkarten Größe zu bestimmen.

Mein würde nächste Ansatz JTabbedPane.insertTab(String title, Icon icon, Component component, String tip, int index) außer Kraft zu setzen und die bevorzugte Größe des Etiketts Komponente einstellen, aber dies scheint nicht sehr elegant, und ich bin nicht einmal sicher, ob es überhaupt funktionieren würde.

Gibt es eine Möglichkeit, dies zu erreichen?

War es hilfreich?

Lösung

Die Antwort ist einfach. Wenn wir den Namen für die Registerkarte setzen, formatieren Sie einfach den Namen HTML verwenden. sagen

tp - JTabbedPane Objekt

tp.addTab("<html><body><table width='150'>Name</table></body></html>",Componentobject)

Andere Tipps

Ich denke, es ist nicht so kompliziert, wie du getan hast. Verwenden Sie einfach setTabComponentAt () mit einem JLabel, auf dem Sie die gewünschte Größe eingestellt haben.

Ich habe versucht, die folgenden:

tabPane.setUI(new javax.swing.plaf.metal.MetalTabbedPaneUI() {
    @Override
    protected int calculateTabHeight(int tabPlacement, int tabIndex, int fontHeight) {
        return super.calculateTabHeight(tabPlacement, tabIndex, fontHeight) + 12;
    }
});

Das scheint gut für mich zu arbeiten. Aber wenn Sie ein anderen L & F verwenden, werden Sie machen es mit dem ‚Metall‘ am Ende egal.

Ich denke, man den Standard-UI bekommen könnte und tut auf sie ein ‚instanceof‘ zu bestimmen, welche verwendet wird und instanziiert es entsprechend.

Zum Beispiel:

TabbedPaneUI ui = tabPane.getUI();

if (ui instanceof WindowsTabbedPaneUI) {
    // Create the windows rendition
} else if (ui instanceof MetalTabbedPaneUI) {
    // Create the metal rendition
} else if (ui instanceof MotifTabbedPaneUI) {
    // Create the motif rendition
} else if (ui instanceof SynthTabbedPaneUI) {
    // Etc...
}

Das ist für mich gearbeitet.

 JLabel lab = new JLabel();
        lab.setPreferredSize(new Dimension(200, 30));
        jTabbedPane1.setTabComponentAt(0, lab);  // tab index, jLabel

oder versuchen, diese Änderung auf alle Register Komponente in gleichen Größen (in main-Methode genannt)

UIManager.getLookAndFeelDefaults().put("TabbedPane:TabbedPaneTab.contentMargins", new Insets(10, 100, 0, 0));

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top