Java Swing 实现美化JTabbedPane标签
"这篇内容是关于Java Swing组件JTabbedPane的自定义UI实现,特别是针对JTabbedPane标签的美化。作者提供了自定义的SinaTabbedPaneUI类,该类继承自BasicTabbedPaneUI,用于增强标签的显示效果,包括颜色渐变、圆角等视觉效果。" 在Java Swing中,JTabbedPane是一个非常常用的组件,它允许用户在多个面板之间切换,每个面板代表一个独立的视图或功能区域。通常,JTabbedPane的默认样式可能无法满足所有设计需求,因此开发者经常需要自定义其外观和行为。 `SinaTabbedPaneUI`类就是这样一个自定义UI,它通过重写`BasicTabbedPaneUI`中的方法来改变标签的显示样式。例如,代码中引入了AlphaComposite、GradientPaint等图形绘制相关的类,用于实现透明度控制和渐变色填充,这可以使标签背景看起来更加丰富和动态。 `ColorSet`类可能是作者自定义的一个颜色集合,用于存储不同状态(如选中、默认、悬停)下的颜色值。通过设置这些颜色,可以改变标签在不同交互状态下的颜色表现,从而增加视觉反馈。 此外,代码中还包含对鼠标事件的监听,如MouseListener和MouseMotionListener,这表明标签可能有响应鼠标移动和点击的能力,比如改变标签高亮、提供拖放功能等。 在绘制标签时,`SinaTabbedPaneUI`可能会使用`Graphics2D`和`Shape`类,如`RoundRectangle2D`来创建带有圆角的标签形状,并利用`Area`类进行形状的组合与剪裁,以实现复杂的边框效果。`Graphics2D`允许更精确的图形绘制,如抗锯齿、渲染质量设置等,通过`RenderingHints`可以进一步优化图像质量。 这个自定义UI着重于提高JTabbedPane的视觉吸引力,通过自定义的标签样式和交互效果,使其更加符合特定应用的需求和设计风格。对于希望自定义Swing组件外观的开发者来说,这是一个很好的学习示例。
那么现在来说下用法吧,首先附上网上找来的一段代码(其实在csdn里面也有这个代码的资源,不过没说怎么用),
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Composite;
import java.awt.FontMetrics;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JComponent;
import javax.swing.JTabbedPane;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicTabbedPaneUI;
public class SinaTabbedPaneUI extends BasicTabbedPaneUI {
private static final Insets NO_INSETS = new Insets(0, 0, 0, 0);
private ColorSet selectedColorSet;
private ColorSet defaultColorSet;
private ColorSet hoverColorSet;
private Color lineColor = new Color(158, 158, 158);
private Color dividerColor = new Color(200, 200, 200);
private Insets contentInsets = new Insets(1, 1, 1, 1);
private int lastRollOverTab = -1;
public static ComponentUI createUI(JComponent c) {
return new SinaTabbedPaneUI();
}
protected LayoutManager createLayoutManager() {
if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT) {
return super.createLayoutManager();
} else { /* WRAP_TAB_LAYOUT */
return new TabbedPaneLayout();
}
}
// protected void installComponents() {
// super.installComponents();
// int counts = tabPane.getComponents().length;
// for (int i = 0; i < counts; i++) {
// if (tabPane.getComponentAt(i) instanceof JPanel) {
// ((JPanel) tabPane.getComponentAt(i)).setLayout(new FlowLayout(
// 10, 0, FlowLayout.LEFT));
// ((JPanel) tabPane.getComponentAt(i)).updateUI();
// }
// }
//
// }
public SinaTabbedPaneUI() {
selectedColorSet = new ColorSet();
selectedColorSet.topGradColor1 = new Color(255,0,0);//new Color(233, 237, 248);//选中的最上层
剩余11页未读,继续阅读
- 粉丝: 9
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全