2013-08-30 2 views
0

JTabbedPane에 대한 사용자 정의 LaF를 작성했습니다. 유일한 문제는 텍스트가 아닌 탭을 렌더링한다는 것입니다. 제발, 모든 것을 시도했습니다!사용자 정의 JTabbedPane LaF가 텍스트를 표시하지 않음

package com.jama.lyricist.ui; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.FontMetrics; 
import java.awt.Graphics; 
import java.awt.Insets; 
import java.awt.Rectangle; 

import javax.swing.plaf.basic.BasicTabbedPaneUI; 

public class AdvancedTabbedPaneUI extends BasicTabbedPaneUI{ 

    @Override 
    protected void paintTab(Graphics g, int tabPlacement, Rectangle[] rects, int  tabIndex, Rectangle iconRect, Rectangle textRect) { 
     Color savedColor = g.getColor(); 
     g.setColor(new Color(238,238,238)); 
     g.fillRect(rects[tabIndex].x, rects[tabIndex].y, 
       rects[tabIndex].width, rects[tabIndex].height); 
     g.setColor(new Color(153, 153, 153)); 
     g.drawRect(rects[tabIndex].x, rects[tabIndex].y, 
       rects[tabIndex].width, rects[tabIndex].height); 
     g.setColor(new Color(102,102,102)); 
     g.setColor(savedColor); 
    } 


    private final Insets borderInsets = new Insets(0, 0, 0, 0); 
    @Override 
    protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) { 
    } 
    @Override 
    protected Insets getContentBorderInsets(int tabPlacement) { 
     return borderInsets; 
    } 

    @Override 
    protected void paintContentBorderTopEdge(Graphics g, int tabPlacement, 
          int selectedIndex, int x, int y, int w, int h) { 
     super.paintContentBorderTopEdge(g, tabPlacement, -1, x, y, w, h); 
    } 

}

그것은이 출력 다음 paintTab() 메서드를 재정의함으로써 Output

+2

여기서 탭 제목을 그립니다. 제 생각에 당신은 당신의'paintTab' 메쏘드의 어딘가에서'paintText'를 던질 필요가 있다고 생각합니다, [here] (http://kickjava.com/src/javax/swing/plaf/basic/BasicTabbedPaneUI.java.htm#576) –

답변

0

을, 당신은 기본 클래스에 의해 그려진되는 제목을 방지하고 있습니다.

당신이 두 가지 옵션 중 하나를

  1. 재정 paintTabBackground()와 paintTabBorder() 대신 기본 클래스에 페인트 제목 자신을 제목
  2. 페인트시키는의 paintTab() 메서드를 재정의하여 paintTab() 메서드
+0

고마워, 내가 지금 가지고 있다고 생각해! – Jama

+0

그게 작동하지 않습니다 ... – Jama