`
sjsky
  • 浏览: 921682 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

swing中Label添加下划线几种方法(含完美版本)

    博客分类:
  • Java
 
阅读更多

   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

----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------

 

 

 

 

  • 大小: 17.6 KB
  • 大小: 12.1 KB
  • 大小: 24.4 KB
3
3
分享到:
评论
1 楼 君心可晴 2011-10-08  
学习了!!!

相关推荐

    java swing 下划线

    此外,JMenuItem还可以通过`setAccelerator()`方法设置快捷键,这通常会自动在菜单项的文字中显示对应的下划线。 在Swing中处理下划线需要注意的是,过度使用下划线可能会使用户界面显得杂乱,因此应当谨慎地选择...

    swing中自定义对话框的几种实际用法

    在Swing中,对话框是一种特殊的窗口,用于向用户提供临时信息或者需要用户进行交互的情况。自定义对话框则允许开发者根据需求定制对话框的外观和行为,以满足特定的应用场景。 一、Swing中的对话框类型 Swing提供了...

    Swing中JTABLE中添加JBUTTON控件

    在Java的Swing库中,`JTable`是用于创建数据网格视图的重要组件,它允许用户以表格的形式查看和操作数据。而`JButton`则是一个常用的按钮控件,通常用于触发某些动作或事件。将`JButton`添加到`JTable`中可以为用户...

    (java)Swing中弹出对话框的几种方式

    在Java的Swing框架中,弹出对话框是与用户交互的一种常见方式,主要用于限制用户行为、提示用户操作结果或请求用户输入。JOptionPane类在Swing中扮演着关键角色,它提供了一系列静态方法用于创建各种标准对话框,如...

    Java Swing 24种皮肤合集以及使用方法

    在Java Swing中更改皮肤的方法主要有以下步骤: 1. **导入所需的Look and Feel库**: 首先,你需要导入对应的L&F库。对于第三方L&F,可能需要下载并添加到项目的类路径中。 2. **初始化Look and Feel**: 在程序...

    JAVA swing中文离线API文档

    Java Swing是Java标准库中的一个组件集合,用于构建桌面应用程序用户界面。它是Java Foundation Classes (JFC)的一部分,提供了一套轻量级的GUI(图形用户界面)组件,支持丰富的交互功能。本离线API文档详细阐述了...

    swing中使用jfreenchart绘制柱状图,折线图,折线图中可动态添加线

    本教程将详细讲解如何利用JFreeChart在Swing应用程序中实现这些功能,以及如何在折线图中动态添加线。 首先,确保你的开发环境已经配置了IntelliJ IDEA 15和Java 8。JFreeChart库也需要添加到项目中,可以通过Maven...

    Java 实现swing中嵌入html 实例 适合新手

    这是一个开源项目,它扩展了Java Swing,添加了对Web浏览器组件的支持。项目提供了两个核心的JAR文件:DJNativeSwing.jar和DJNativeSwing-SWT.jar。DJNativeSwing.jar是纯Swing实现,而DJNativeSwing-SWT.jar则利用...

    Java Swing 中三种事件处理方法之比较

    Java Swing 中三种事件处理方法之比较 Java Swing 是 Java 中不可缺少的窗口工具组,是用户建立图形化用户界面(GUI)程序的强大工具。Java Swing 组件自动产生各种事件来响应用户行为。如当用户点击按钮或选择菜单...

    Java Swing 中文Api

    在Java 2 Platform Standard Edition 5.0版本中,Swing提供了丰富的组件和功能,使得开发者能够创建美观且功能强大的桌面应用程序。这份"Java Swing 中文Api"文档是针对中国开发者设计的,它提供了详细的中文解释,...

    javaswing版本远程控制

    Java Swing是一种用于构建桌面应用程序的Java库,它是Java Foundation Classes (JFC)的一部分。在Java Swing中,你可以创建丰富的用户界面,尽管它主要用于本地应用程序,但通过特定的技术和框架,Swing也可以支持...

    Swing 添加超链接 打开页面

    在Swing中添加超链接并实现打开网页的功能,是很多开发者在创建交互式应用时可能遇到的需求。这篇博客文章(https://lazycat774880994.iteye.com/blog/567412)很可能详细讲解了如何在Swing应用中集成超链接,并且...

    Swing样式大全(全56种经典)

    本资源“Swing样式大全(全56种经典)”涵盖了56种不同的Swing样式,这为开发者提供了广泛的选择,以便根据项目需求和用户喜好定制UI。下面将对Swing样式的一些核心概念和如何应用这些样式进行详细说明: 1. **默认...

    Java Swing实现窗体添加背景图片的2种方法详解

    本文将详细介绍两种在Java Swing中实现窗体添加背景图片的方法,并探讨Swing重绘过程中的`repaint()`和`updateUI()`的区别。 方法一:利用JLabel加载图片 此方法依赖于JLabel组件的`setIcon(Icon icon)`方法来加载...

    8款完美Swing皮肤

    标题中的"8款完美Swing皮肤"指的是有八种不同的LookAndFeel设计,这些设计可能包括各种颜色主题、边框样式、图标集等,旨在提升Swing应用的美观性和用户体验。每款皮肤都经过了“完美修复”,意味着它们已经解决了...

    Swing基本标签使用

    在Swing中,标签(JLabel)是一种非交互式的组件,用于展示文本或图像信息。本文将深入探讨Swing标签的使用,包括其创建、属性设置、事件处理等方面,帮助开发者构建丰富的GUI应用。 1. 创建Swing标签 创建Swing...

    Swing模板样式(全56种经典)

    Swing是Java编程语言中的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分。在Java中,Swing提供了丰富的组件库,用于创建美观且功能强大的桌面应用程序。Swing模板样式,即Swing组件的外观...

    在Swing中实现小球

    Swing是Java提供的一种轻量级的图形组件库,它允许开发者构建丰富的交互式应用。下面我们将深入探讨如何使用Swing来实现小球的显示、移动以及控制小球的数量,并涉及到与之相关的算法。 首先,我们需要导入Swing库...

    Java中的swing绘图

    Java Swing 是Java编程语言中用于构建桌面应用的一个图形用户界面(GUI)工具包。它是Java Foundation Classes (JFC)的一部分,提供了丰富的组件和功能,让开发者能够创建美观且功能丰富的应用程序。 Swing 绘图主要...

Global site tag (gtag.js) - Google Analytics