- 浏览: 904482 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (263)
- J2EE (9)
- Spring (11)
- Hibernate (11)
- Struts (5)
- opensource (19)
- Hadoop (28)
- 架构设计 (8)
- 企业应用 (10)
- SNMP (8)
- SSO (4)
- webservice (11)
- RPC (2)
- 编程语言 (0)
- Java (30)
- Javascript (5)
- NoSQL (11)
- 数据库 (0)
- oracle (8)
- MySQL (3)
- web (1)
- Android (2)
- Linux (15)
- 软件工具 (15)
- 项目构建 (11)
- 测试工具 (2)
- Exception (19)
- 杂谈 (4)
- Groovy (5)
- Nodejs (1)
- MacOSX (4)
最新评论
-
fighhin:
decode(BinaryBitmap,java.util.M ...
条形码/二维码之开源利器ZXing图文介绍 -
u013489005:
追问:楼主,请问有中文文档么?我的邮箱是frankgray@s ...
Java表达式计算引擎:Expr4J -
u013489005:
感谢博主 需要引入的包是import java.io.*;im ...
Java表达式计算引擎:Expr4J -
calosteward:
感谢楼主分享。。 Zxing 我听说过的。__________ ...
条形码/二维码之开源利器ZXing图文介绍 -
u013810758:
judasqiqi 写道感谢楼主!想请问楼主一下这个生成的图片 ...
Java实现二维码QRCode的编码和解码
blog迁移至 :http://www.micmiu.com
swing中Label添加下划线大致有下面三种实现方法:
- [一]、利用<HTML>标签实现
- [二]、利用Graphics 重写paint方法画出下划线
- [三]、完美实现下划线,支持Border设置和自定义Color
下面具体分析每种实现方式的优缺点:
[一]、利用<HTML>标签实现
优点:
- 原生态的Label,无需任何改造
- 支持自定义的Border的标签
缺点:
- 下划线的颜色和标签的颜色一致,无法单独自定义
代码示例:
package michael.swing.label; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.border.LineBorder; /** * @blog http://sjsky.iteye.com * @author Michael */ public class JLabelUnderLineHtml { /** * @param args */ public static void main(String[] args) { JFrame f = new JFrame("JLabe with Under Line"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(new Dimension(300, 200)); f.setLayout(new FlowLayout()); JLabel label1 = new JLabel("<html><u>Label下划线</u><html>"); f.add(label1); JLabel label2 = new JLabel("<html><u>Label下划线</u><html>"); label2.setForeground(Color.BLUE); f.add(label2); // 有Border的标签 JLabel label3 = new JLabel("<html><u>Label(Border)下划线</u><html>"); label3.setBorder(BorderFactory.createCompoundBorder(new LineBorder( Color.RED), BorderFactory.createEmptyBorder(8, 8, 8, 8))); f.add(label3); // f.pack(); f.setVisible(true); } }
效果图:
[二]、 利用Graphics 重写paint方法画出下划线
优点:
- 下划线的颜色可以单独自定义
缺点:
- 对于自定义的Border的标签支持不好
代码示例:
package michael.swing.label; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Rectangle; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.border.LineBorder; /** * @blog http://sjsky.iteye.com * @author Michael */ public class JLabelUnderLineSimple extends JLabel { private Color underLineColor; public JLabelUnderLineSimple() { this(""); } public JLabelUnderLineSimple(String text) { super(text); } /** * @return the underLineColor */ public Color getUnderLineColor() { return underLineColor; } /** * @param pUnderLineColor the underLineColor to set */ public void setUnderLineColor(Color pUnderLineColor) { underLineColor = pUnderLineColor; } public void paint(Graphics g) { Rectangle r; super.paint(g); r = g.getClipBounds(); if (null != underLineColor) { g.setColor(underLineColor); } // 画出下划线 g.drawLine(0, r.height - getFontMetrics(getFont()).getDescent(), getFontMetrics(getFont()).stringWidth(getText()), r.height - getFontMetrics(getFont()).getDescent()); } /** * @param args */ public static void main(String[] args) { JFrame f = new JFrame("JLabe with Under Line"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(new Dimension(300, 200)); f.setLayout(new FlowLayout()); JLabelUnderLineSimple label1 = new JLabelUnderLineSimple("Label下划线"); f.add(label1); JLabelUnderLineSimple label2 = new JLabelUnderLineSimple("Label下划线"); label2.setUnderLineColor(Color.BLUE); f.add(label2); // 有Border的标签 JLabelUnderLineSimple label3 = new JLabelUnderLineSimple( "Label(Border)下划线"); label3.setBorder(BorderFactory.createCompoundBorder(new LineBorder( Color.RED), BorderFactory.createEmptyBorder(8, 8, 8, 8))); f.add(label3); // f.pack(); f.setVisible(true); } }
效果图:
从上面的截图明显可以看出该版本不能很好支持自定义Border的标签。
[三]、完美实现下划线
优点:
- 下划线的颜色可以单独自定义
- 支持自定义的Border的标签
缺点:
- 暂时没有发现 吼吼
代码示例:
package michael.swing.label; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Insets; import java.awt.Rectangle; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.border.LineBorder; /** * @blog http://sjsky.iteye.com * @author Michael */ public class JLabelUnderLinePerfect extends JLabel { private Color underLineColor; public JLabelUnderLinePerfect() { this(""); } public JLabelUnderLinePerfect(String text) { super(text); } /** * @return the underLineColor */ public Color getUnderLineColor() { return underLineColor; } /** * @param pUnderLineColor the underLineColor to set */ public void setUnderLineColor(Color pUnderLineColor) { underLineColor = pUnderLineColor; } public void paint(Graphics g) { super.paint(g); Rectangle r = g.getClipBounds(); int xoffset = 0, yoffset = 0, pointX = 0, pointY = 0, point2X = 0, point2Y = 0; // 根据border的设置 计算出下划线的起止Point if (null != this.getBorder() && null != this.getBorder().getBorderInsets(this)) { Insets inserts = this.getBorder().getBorderInsets(this); // System.out.println(inserts); xoffset = inserts.left; yoffset = inserts.bottom; } pointX = xoffset; pointY = point2Y = r.height - yoffset - getFontMetrics(getFont()).getDescent(); point2X = pointX + getFontMetrics(getFont()).stringWidth(getText()); if (null != underLineColor) { g.setColor(underLineColor); } g.drawLine(pointX, pointY, point2X, point2Y); } /** * @param args */ public static void main(String[] args) { JFrame f = new JFrame("JLabe with Under Line"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(new Dimension(300, 200)); f.setLayout(new FlowLayout()); JLabelUnderLinePerfect label1 = new JLabelUnderLinePerfect("Label下划线"); f.add(label1); JLabelUnderLinePerfect label2 = new JLabelUnderLinePerfect("Label下划线"); label2.setUnderLineColor(Color.BLUE); f.add(label2); JLabelUnderLinePerfect label3 = new JLabelUnderLinePerfect( "Label(Border)下划线"); label3.setBorder(BorderFactory.createCompoundBorder(new LineBorder( Color.RED), BorderFactory.createEmptyBorder(8, 18, 28, 38))); label3.setUnderLineColor(Color.BLUE); f.add(label3); // f.pack(); f.setVisible(true); } }
效果图:
本文连接:http://sjsky.iteye.com/blog/1183817
转载请注明来自:Michael's blog @ http://sjsky.iteye.com
----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------
发表评论
-
$JAVA_HOME环境变量在Mac OS X中设置的问题
2014-01-19 20:31 1601系统版本:Mac OS X 10.9.1 在 ... -
JBoss IIOP实现CORBA/IIOP访问EJB的示例
2014-01-17 14:08 588目录 概述 特性 示例演示 详见:http:// ... -
JavaIDL开发CORBA实例演示
2013-10-25 15:51 496目录: 概述 开发步骤 创建Java项目 -
OpenORB开发CORBA的实例介绍
2013-10-25 15:50 1234目录: 概述 开发步骤 -
java读取控制台输入的几种方法
2013-10-24 09:01 1019java读取控制台输入的 ... -
OSX系统中各种JDK的路径说明
2013-10-15 08:50 605不同厂商发布的JDK,在OSX下的安装路径是不同的。以我本机 ... -
Java 完美判断中文字符
2012-11-23 17:23 998详见:http://www.micmiu.com/ ... -
java自带的MD5、SHA1算法演示
2012-06-04 10:23 3028详见:http://www.micmiu.com/lang ... -
解决java网络编程IPv6问题
2012-04-05 13:38 1346详见:http://www.micmiu.com/lang/j ... -
Java实现给图片添加水印
2011-08-21 12:21 15727blog迁移至 :http://www.m ... -
Java对象序列化ObjectOutputStream和ObjectInputStream示例
2011-08-01 14:14 13617blog迁移至 :http://www.m ... -
proxool连接池介绍
2011-06-29 08:42 3856blog迁移至:http://www.micmiu.c ... -
c3p0配置介绍
2011-06-28 08:56 6558blog迁移至 :http://www.micmiu. ... -
apache-DBCP基本配置介绍
2011-06-27 00:04 13290blog迁移至:http://www ... -
JAVA中IP和整数相互转化介绍
2011-06-22 18:36 4743blog迁移至 :http://www.micmiu. ... -
JAVA线程池ThreadPoolExecutor
2011-06-21 19:00 8914blog迁移至:http://www.micmiu.c ... -
Java 获取当前Classpath
2011-06-19 11:50 8072blog迁移至:http://www ... -
Array和Collection相互转换以及copy深度的小测
2011-06-18 18:46 2205blog迁移至:http://www.micmiu.c ... -
扫描指定包下的类(包括jar文件里的类)
2011-05-27 12:56 5941blog迁移至:http://www.micmiu.c ... -
Java HotSpot dcevm 在debug模式下的热部署
2011-02-16 10:41 4279blog迁移至:http://www.micmiu.c ...
相关推荐
swing 中JTABLE中添加控件的例子 可以引申出添加很多控件
(java)Swing中弹出对话框的几种方式
在swing实际开发中,使用自定义对话框是非常有用的。 该例子是翻写sun JDK中CustomDialog.java和DialogDemo.java
java swing 下划线 基础篇 我根据课程慢慢上传的 适合初学者 实用的好东西 大家快来呀!!!
主要介绍了Java Swing实现窗体添加背景图片的2种方法,结合实例形式较为详细的分析了Swing实现窗体添加背景图片的方法,并总结分析了Swing重绘中repaint与updateUI的区别,需要的朋友可以参考下
swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3...
Java Swing 中三种事件处理方法之比较
Swing样式大全(全56种经典)
java swing 皮肤大全,一次下载,终生使用
很全面的哟,swing中文帮助文件,让你快速掌握各种java swing控件
Swing模板样式(全56种经典)
swing中 tree的使用方法,详细例子,教程 树的使用 tree demo
开发环境为intellij15+jdk8.0; 功能:使用swing创建窗口,添加主面板,在主面板下有几个tab,通过tab切换绘制不同的图形。
Eclipse中swing插件Eclipse中swing插件Eclipse中swing插件
用Swing中实现小球, 控制小球数量, 算法
Java Swing实现添加数据到数据库(数据库使用Mysql)并查询数据显示在界面中。
swing中的mvc实例 mvc在swing中的体现
swing 开发 Linux和window系统解决乱码参考文档,个人总结,不喜勿碰
javaswing版本远程控制 可以完善 根据个人需求。 尼玛分享个东西描述还有字数补丁~!