Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 545|回复: 0

[Swing学习]Swing中使用Html标签

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-11 23:57:07 | 显示全部楼层 |阅读模式
    在Swing中,有时可能会出现一些较为复杂的样式表现需求,如果单纯通过代码实现,往往得不偿失。这时,我们就可以利用HTML标签,在组件中得到我们想要的效果。



    例子如下:
    1. package org.loon.test;
    2. import java.awt.BorderLayout;
    3. import java.awt.Color;
    4. import java.awt.Desktop;
    5. import java.awt.Dimension;
    6. import java.awt.EventQueue;
    7. import java.awt.Font;
    8. import java.awt.Graphics;
    9. import java.awt.Graphics2D;
    10. import java.awt.GridLayout;
    11. import java.awt.color.ColorSpace;
    12. import java.awt.event.ActionEvent;
    13. import java.awt.image.BufferedImage;
    14. import java.awt.image.ColorConvertOp;
    15. import java.io.IOException;
    16. import java.net.URI;
    17. import java.net.URISyntaxException;
    18. import javax.swing.AbstractAction;
    19. import javax.swing.BorderFactory;
    20. import javax.swing.JCheckBox;
    21. import javax.swing.JComponent;
    22. import javax.swing.JEditorPane;
    23. import javax.swing.JFrame;
    24. import javax.swing.JLabel;
    25. import javax.swing.JPanel;
    26. import javax.swing.UIManager;
    27. import javax.swing.WindowConstants;
    28. import javax.swing.event.HyperlinkEvent;
    29. import javax.swing.event.HyperlinkListener;
    30. /**
    31. * @author chenpeng
    32. * @email:ceponline@yahoo.com.cn
    33. * @version 0.1
    34. */
    35. public class HtmlLable extends JPanel {
    36.     // 内置了本地系统桌面操作支持
    37.     private Desktop desktop;
    38.     private static final long serialVersionUID = 1L;
    复制代码
    // html内容
    private static final String HTML_TEXT = "<html><font color="red"><a href=
          "http://www.helpsoff.com.cn" target="_blank">支持SOFF,插件无罪</a></font>";
    1. public HtmlLable() {
    2.         super(new BorderLayout());
    3.         final JLabel label0 = new JLabel("普通的JLabel");
    4.         final JLabel label1 = new JLabel(HTML_TEXT);
    5.         final JLabel label2 = new JLabel(HTML_TEXT) {
    6.             private static final long serialVersionUID = 1L;
    7.             // 设定Enabled样式
    8.             public void setEnabled(boolean b) {
    9.                 super.setEnabled(b);
    10.                 setForeground(b ? (Color) UIManager.get("Label.foreground")
    11.                         : (Color) UIManager.get("Label.disabledForeground"));
    12.             }
    13.         };
    14.         final JLabel label3 = new JLabel(HTML_TEXT) {
    15.             private static final long serialVersionUID = 1L;
    16.             // 阴影
    17.             private BufferedImage shadow;
    18.             // 设定Enabled样式
    19.             public void setEnabled(boolean b) {
    20.                 setForeground(b ? (Color) UIManager.get("Label.foreground")
    21.                         : (Color) UIManager.get("Label.disabledForeground"));
    22.                 if (!b) {
    23.                     BufferedImage source = new BufferedImage(getWidth(),
    24.                             getHeight(), BufferedImage.TYPE_INT_ARGB);
    25.                     Graphics2D g2 = source.createGraphics();
    26.                     g2.setPaint(new Color(0, 0, 0, 0));
    27.                     g2.fillRect(0, 0, getWidth(), getHeight());
    28.                     paint(g2);
    29.                     g2.dispose();
    30.                     ColorConvertOp colorConvert = new ColorConvertOp(ColorSpace
    31.                             .getInstance(ColorSpace.CS_GRAY), null);
    32.                     shadow = colorConvert.filter(source, null);
    33.                 }
    34.                 super.setEnabled(b);
    35.             }
    36.             public void paintComponent(Graphics g) {
    37.                 if (isEnabled()) {
    38.                     super.paintComponent(g);
    39.                 } else {
    40.                     if (shadow != null)
    41.                         g.drawImage(shadow, 0, 0, this);
    42.                 }
    43.             }
    44.         };
    45.         /** *//**
    46.          * 设定为html
    47.          */
    48.         final JEditorPane editor1 = new MyHtmlEdit("text/html", HTML_TEXT);
    49.         editor1.setOpaque(false);
    50.         editor1.setEditable(false);
    51.         final JEditorPane editor2 = new MyHtmlEdit("text/html", HTML_TEXT);
    52.         editor2.setOpaque(false);
    53.         editor2.setEditable(false);
    54.         editor2.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES,
    55.                 Boolean.TRUE);
    56.         editor2.setFont((Font) UIManager.get("Label.font"));
    57.         JPanel box = new JPanel(new GridLayout(2, 3));
    58.         box.add(makePanel("JLabel", label0));
    59.         box.add(makePanel("JLabel+Html", label1));
    60.         box.add(makePanel("JLabel+Html+", label2));
    61.         box.add(makePanel("JLabel+Html++", label3));
    62.         box.add(makePanel("JEditorPane", editor1));
    63.         box.add(makePanel("JEditorPane+", editor2));
    64.         JCheckBox check = new JCheckBox("setEnabled", true);
    65.         check.setAction(new AbstractAction("setEnabled") {
    66.             private static final long serialVersionUID = 1L;
    67.             public void actionPerformed(ActionEvent e) {
    68.                 boolean flag = ((JCheckBox) e.getSource()).isSelected();
    69.                 setVisible(false);
    70.                 label0.setEnabled(flag);
    71.                 label1.setEnabled(flag);
    72.                 label2.setEnabled(flag);
    73.                 label3.setEnabled(flag);
    74.                 editor1.setEnabled(flag);
    75.                 editor2.setEnabled(flag);
    76.                 setVisible(true);
    77.             }
    78.         });
    79.         add(check, BorderLayout.NORTH);
    80.         add(box, BorderLayout.CENTER);
    81.         desktop = Desktop.getDesktop();
    82.         
    83.     }
    84.     /** *//**
    85.      * 自定义一个JEditorPane,用以处理html事件
    86.      *
    87.      * @author chenpeng
    88.      *
    89.      */
    90.     class MyHtmlEdit extends JEditorPane implements HyperlinkListener {
    91.         /** *//**
    92.          *
    93.          */
    94.         private static final long serialVersionUID = 1L;
    95.         public MyHtmlEdit(String type, String text) {
    96.             super(type, text);
    97.             addHyperlinkListener(this);
    98.             
    99.         }
    100.         public void hyperlinkUpdate(HyperlinkEvent e) {
    101.             if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
    102.                 try {
    103.                     // 在本地浏览器中打开uri(jdk1.6后由于强化了awt,就不用再自己写本地浏览器调用了)
    104.                     desktop.browse(e.getURL().toURI());
    105.                     
    106.                 } catch (IOException ex) {
    107.                     ex.printStackTrace();
    108.                 } catch (URISyntaxException ex) {
    109.                     ex.printStackTrace();
    110.                 }
    111.             }
    112.         }
    113.     }
    114.     /** *//**
    115.      * 创建面板
    116.      *
    117.      * @param title
    118.      * @param label
    119.      * @return
    120.      */
    121.     private JPanel makePanel(String title, JComponent label) {
    122.         JPanel p = new JPanel(new GridLayout(1, 1));
    123.         p.setBorder(BorderFactory.createTitledBorder(title));
    124.         p.add(label);
    125.         return p;
    126.     }
    127.     public static void main(String[] args) {
    128.         EventQueue.invokeLater(new Runnable() {
    129.             public void run() {
    130.                 createGUI();
    131.             }
    132.         });
    133.     }
    134.     public static void createGUI() {
    135.         JFrame frame = new JFrame("在Swing中使用Html标签");
    136.         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    137.         frame.setSize(new Dimension(450, 200));
    138.         frame.getContentPane().add(new HtmlLable());
    139.         frame.setResizable(false);
    140.         frame.setLocationRelativeTo(null);
    141.         //jdk1.6新项,置顶
    142.         frame.setAlwaysOnTop(true);
    143.         frame.setVisible(true);
    144.     }
    145. }
    复制代码


       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/11/235706843.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 08:06 , Processed in 0.295516 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表