0

我为我的 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);
    }

}

它输出这个:输出

4

1 回答 1

0

通过覆盖paintTab() 方法,您可以防止标题被基类绘制。

您有以下两种选择之一:

  1. 覆盖paintTabBackground() 和paintTabBorder() 而不是覆盖paintTab() 方法,让基类绘制标题
  2. 在您的 paintTab() 方法中自己绘制标题
于 2013-08-30T20:42:24.217 回答