2011-11-17 4 views
4

을 스크롤 할 & F의 TabbedPane 집합입니다. 후광 L & F 누락 된 디바이더 (다른 L & Fs를 (기본 & 창)들을 제공)을 스크롤 내가 탭과 후광의 L의 내용과 파란색 수평 분할을 잃었

enter image description here

당신이 랩과 기본 (사진 하단)이 동작을 표시하지 않습니다 동안 문제가 new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT) (사진 상단)로 제한됩니다 볼 수 있듯이

.

NimbusDefaults.class의 부분을 재정 의하여 다음과 같이 변경할 수 있습니다. 난 그냥 어디서 어떻게 후광이 WRAP & 스크롤 구분 알아낼 수없는 것

//Initialize TabbedPane 
    d.put("TabbedPane.contentMargins", new InsetsUIResource(0, 0, 0, 0)); 
    d.put("TabbedPane.tabAreaStatesMatchSelectedTab", Boolean.TRUE); 
    d.put("TabbedPane.nudgeSelectedLabel", Boolean.FALSE); 
    d.put("TabbedPane.tabRunOverlay", new Integer(2)); 
    d.put("TabbedPane.tabOverlap", new Integer(-1)); 
    d.put("TabbedPane.extendTabsToBase", Boolean.TRUE); 
    d.put("TabbedPane.useBasicArrows", Boolean.TRUE); 
    addColor(d, "TabbedPane.shadow", "nimbusDisabledText", 0.0f, 0.0f, 0.0f, 0); 
    addColor(d, "TabbedPane.darkShadow", "text", 0.0f, 0.0f, 0.0f, 0); 
    ... more ... 

: 여기 발췌 한 것입니다. 누가 마법에 내가 .put()에 도착해야 말해 줄래?

미리 감사드립니다.

+0

+1이 질문에 대한 답변을 제공해 주시겠습니까? http://stackoverflow.com/q/7481991/714968 – mKorbel

+0

자신감을 가져 주셔서 감사합니다.하지만 나는 그 일을하는 방법을 모르는 사람입니다. 나는 그것을 보았다. 그러나 당신의 문제에 대해 아무것도 발견하지 못했다. 이 문제를 해결하려고하는 사람들은 문제에 게시 한 SSCCE의 혜택을 누릴 수 있습니다. 감사! – Omphaloskopie

답변

1

우려 대상 :

동료가 문제의 원인을 발견했습니다. 에서 :

package javax.swing.plaf.synth.SynthTabbedPaneUI; 

는 말한다 :

protected void paint(SynthContext context, Graphics g) { 
    int selectedIndex = tabPane.getSelectedIndex(); 
    int tabPlacement = tabPane.getTabPlacement(); 

    ensureCurrentLayout(); 

// Paint tab area 
// If scrollable tabs are enabled, the tab area will be 
// painted by the scrollable tab panel instead. 
// 
if (!scrollableTabLayoutEnabled()) { // WRAP_TAB_LAYOUT 

     [...] 

     // Here is code calculating the content border 

     [...] 

    } 

    // Paint content border 
    paintContentBorder(tabContentContext, g, tabPlacement, selectedIndex); 
} 

당신이 scrollableTabLayout가 디바이더의 크기를 계산 다음 코드에서 제외됩니다 볼 수 있듯이. 괄호를 따라갈 때, 나중에는 칠해 지지만 잘못된 매개 변수는 그려집니다. 이것은 탭이 내용의 TOP 또는 LEFT로 설정된 경우 구분선이 생략되는 동작을 초래합니다. RIGHT 또는 BOTTOM으로 설정된 경우 실제로 디바이더가 표시되지만 깨져 있음 (내용이 너무 두껍고 전반적으로 길지 않음)

Synth에서 Nimbus로 모든 것을 오버라이드하는 데 꽤 많은 시간이 걸릴 것입니다. . 많은 최종 패키지 보호 클래스

따라서 당신은 쉽게 길을 할 수 있습니다 :

uiDefaults.put("TabbedPane:TabbedPaneTabArea.contentMargins", new InsetsUIResource(3, 10, 0, 10));  

이 당신의 탭에 하위 격차를 제거하고 당신은에 "가짜"디바이더를 넣을 수 있습니다 귀하의 콘텐츠 패널의 벼랑 끝. 우리가 그것을 처리하는 방법, 그게.

희망이 도움이됩니다. 즐겨!

+0

누군가가 더 나은/더 쉬운 해결책을 제시한다면 나는 "정답"- 플래그를 바꿀 것입니다. – Omphaloskopie