JTabbedPane 自定义显示效果

直接贴点代码吧



package inci.emp.ctrl.whole;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.Window;

import javax.swing.JComponent;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicTabbedPaneUI;

public class RecTabbedPaneUI extends BasicTabbedPaneUI
{
/**
* by: QQ: 725137 Name:whole
*/
private Color defaultColor = new Color(192, 192, 192);

private Color selectedColor = new Color(155, 159, 232);

public static ComponentUI createUI(JComponent c)
{

return new RecTabbedPaneUI();
}

protected void paintTabBackground(Graphics g, int tabPlacement,
int tabIndex, int x, int y, int w, int h, boolean isSelected)
{
g.setColor(!isSelected || selectedColor == null ? defaultColor
: selectedColor);

switch (tabPlacement)
{
case LEFT:
g.fillRect(x + 1, y + 1, w - 1, h - 3);
break;
case RIGHT:
g.fillRect(x, y + 1, w - 2, h - 3);
break;
case BOTTOM:
g.fillRect(x + 1, y, w - 3, h - 1);
break;
case TOP:

default:
g.fillRect(x + 1, y + 1, w - 3, h - 1);

}

}

protected LayoutManager createLayoutManager()
{


return new TabbedPaneLayout();

}// 设置Layout

public class TabbedPaneLayout extends BasicTabbedPaneUI.TabbedPaneLayout
{

protected void calculateTabRects(int tabPlacement, int tabCount)
{
super.calculateTabRects(tabPlacement, tabCount);

setRec(10);
// 设置间距
tabInsets.bottom = 10;//设置选项卡高度
}

public void setRec(int rec)
{
for (int i = 0; i < rects.length; i++)
{
rects[i].x = rects[i].x + rec * i;
}
}
}

public void setDefaultColor(Color defaultColor)
{
this.defaultColor = defaultColor;
}

public void setSelectedColor(Color selectedColor)
{
this.selectedColor = selectedColor;
}

protected void paintContentBorder(Graphics g, int tabPlacement,
int selectedIndex)
{
int width = tabPane.getWidth();
int height = tabPane.getHeight();
Insets insets = tabPane.getInsets();
Insets tabAreaInsets = getTabAreaInsets(tabPlacement);

int x = insets.left;
int y = insets.top;
int w = width - insets.right - insets.left;
int h = height - insets.top - insets.bottom;

switch (tabPlacement)
{
case LEFT:
x += calculateTabAreaWidth(tabPlacement, runCount, maxTabWidth);

w -= (x - insets.left);
break;
case RIGHT:
w -= calculateTabAreaWidth(tabPlacement, runCount, maxTabWidth);

w += tabAreaInsets.left;

break;
case BOTTOM:
h -= calculateTabAreaHeight(tabPlacement, runCount, maxTabHeight);

h += tabAreaInsets.top;

break;
case TOP:



default:
y += calculateTabAreaHeight(tabPlacement, runCount, maxTabHeight);

y -= tabAreaInsets.bottom;

h -= (y - insets.top);
}

// Fill region behind content area
Color color = UIManager.getColor("TabbedPane.contentAreaColor");
if (color != null)
{
g.setColor(color);
}
else if (selectedColor == null)
{
g.setColor(tabPane.getBackground());
}
else
{
g.setColor(selectedColor);
}
g.fillRect(x, y, w, h);
g.setColor(selectedColor);
Graphics2D g2d = (Graphics2D) g;
g2d.setStroke(new BasicStroke(10.0f));

g.drawLine(x+6, y+5,w, y+5);
g2d.setStroke(new BasicStroke(1.0f));

}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值