문제

나는 얻으려고 노력하고있다 JTabbedPane 모든 탭 (구성 요소가 아닌 실제 탭)의 너비 (가장 넓은 레이블에 필요한 최소 너비 또는 일정한 너비)를 갖는 경우.

나는 무시하려고 노력했다 BasicTabbedPaneUI.getTabBounds(int tabIndex, Rectangle dest), 그러나 분명히이 방법은 그림 방법으로 사용되지 않습니다. BasicTabbedPaneUI, 대신 rects 배열을 사용하여 탭 크기를 결정합니다.

내 다음 접근법은 무시하는 것입니다 JTabbedPane.insertTab(String title, Icon icon, Component component, String tip, int index) 그리고 레이블 구성 요소의 선호하는 크기를 설정하지만 이것은 매우 우아하지 않은 것처럼 보이며 전혀 작동하지 않을 것입니다.

이것을 달성 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

대답은 간단합니다. 탭의 이름을 넣으면 HTML을 사용하여 이름을 형식화하십시오. 말하다

tp -jtabbedpane 객체

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

다른 팁

나는 당신이 한 것만 큼 복잡하지 않다고 생각합니다. 선호하는 크기를 설정 한 jlabel과 함께 settabcomponentat ()을 사용하십시오.

다음을 시도했습니다.

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;
    }
});

이것은 나에게 잘 작동하는 것 같습니다. 그러나 다른 L & F를 사용하는 경우 결국 '금속'으로 렌더링하게됩니다.

나는 당신이 기본 UI를 얻고 어떤 사용 중인지 결정하고 그에 따라 인스턴스화하기 위해 '인스턴스'를 수행 할 수 있다고 생각합니다.

예를 들어:

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...
}

이것은 나를 위해 효과가 있습니다.

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

또는이 변경을 동일한 크기로 모든 탭 구성 요소로 시도하십시오 (주요 방법으로 호출)

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top