`
love19820823
  • 浏览: 935221 次
文章分类
社区版块
存档分类
最新评论

在Swing中使用Html标签

 
阅读更多
在Swing中,有时可能会出现一些较为复杂的样式表现需求,如果单纯通过代码实现,往往得不偿失。这时,我们就可以利用html标签,在组件中得到我们想要的效果。

例子如下:

packageorg.loon.test;

importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Desktop;
importjava.awt.Dimension;
importjava.awt.EventQueue;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.GridLayout;
importjava.awt.color.ColorSpace;
importjava.awt.event.ActionEvent;
importjava.awt.image.BufferedImage;
importjava.awt.image.ColorConvertOp;
importjava.io.IOException;
importjava.net.URI;
importjava.net.URISyntaxException;

importjavax.swing.AbstractAction;
importjavax.swing.BorderFactory;
importjavax.swing.JCheckBox;
importjavax.swing.JComponent;
importjavax.swing.JEditorPane;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.UIManager;
importjavax.swing.WindowConstants;
importjavax.swing.event.HyperlinkEvent;
importjavax.swing.event.HyperlinkListener;

/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:
*</p>
*<p>
*Copyright:Copyright(c)2007
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*
@authorchenpeng
*@email:ceponline@yahoo.com.cn
*
@version0.1
*/

publicclassHtmlLableextendsJPanel...{
//内置了本地系统桌面操作支持
privateDesktopdesktop;

privatestaticfinallongserialVersionUID=1L;

//html内容
privatestaticfinalStringHTML_TEXT="<html><fontcolor='red'><ahref="http://www.helpsoff.com.cn"target="_blank">支持SOFF,插件无罪</a></font>";

publicHtmlLable()...{
super(newBorderLayout());
finalJLabellabel0=newJLabel("普通的JLabel");
finalJLabellabel1=newJLabel(HTML_TEXT);
finalJLabellabel2=newJLabel(HTML_TEXT)...{

privatestaticfinallongserialVersionUID=1L;

//设定Enabled样式
publicvoidsetEnabled(booleanb)...{
super.setEnabled(b);
setForeground(b
?(Color)UIManager.get("Label.foreground")
:(Color)UIManager.get(
"Label.disabledForeground"));
}

}
;
finalJLabellabel3=newJLabel(HTML_TEXT)...{
privatestaticfinallongserialVersionUID=1L;

//阴影
privateBufferedImageshadow;

//设定Enabled样式
publicvoidsetEnabled(booleanb)...{
setForeground(b
?(Color)UIManager.get("Label.foreground")
:(Color)UIManager.get(
"Label.disabledForeground"));
if(!b)...{
BufferedImagesource
=newBufferedImage(getWidth(),
getHeight(),BufferedImage.TYPE_INT_ARGB);
Graphics2Dg2
=source.createGraphics();
g2.setPaint(
newColor(0,0,0,0));
g2.fillRect(
0,0,getWidth(),getHeight());
paint(g2);
g2.dispose();
ColorConvertOpcolorConvert
=newColorConvertOp(ColorSpace
.getInstance(ColorSpace.CS_GRAY),
null);
shadow
=colorConvert.filter(source,null);
}

super.setEnabled(b);
}


publicvoidpaintComponent(Graphicsg)...{
if(isEnabled())...{
super.paintComponent(g);
}
else...{
if(shadow!=null)
g.drawImage(shadow,
0,0,this);
}

}

}
;

/***//**
*设定为html
*/

finalJEditorPaneeditor1=newMyHtmlEdit("text/html",HTML_TEXT);
editor1.setOpaque(
false);
editor1.setEditable(
false);

finalJEditorPaneeditor2=newMyHtmlEdit("text/html",HTML_TEXT);
editor2.setOpaque(
false);
editor2.setEditable(
false);

editor2.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES,
Boolean.TRUE);
editor2.setFont((Font)UIManager.get(
"Label.font"));

JPanelbox
=newJPanel(newGridLayout(2,3));
box.add(makePanel(
"JLabel",label0));
box.add(makePanel(
"JLabel+Html",label1));
box.add(makePanel(
"JLabel+Html+",label2));
box.add(makePanel(
"JLabel+Html++",label3));
box.add(makePanel(
"JEditorPane",editor1));
box.add(makePanel(
"JEditorPane+",editor2));

JCheckBoxcheck
=newJCheckBox("setEnabled",true);
check.setAction(
newAbstractAction("setEnabled")...{
privatestaticfinallongserialVersionUID=1L;

publicvoidactionPerformed(ActionEvente)...{
booleanflag=((JCheckBox)e.getSource()).isSelected();
setVisible(
false);
label0.setEnabled(flag);
label1.setEnabled(flag);
label2.setEnabled(flag);
label3.setEnabled(flag);
editor1.setEnabled(flag);
editor2.setEnabled(flag);
setVisible(
true);
}

}
);

add(check,BorderLayout.NORTH);
add(box,BorderLayout.CENTER);
desktop
=Desktop.getDesktop();

}


/***//**
*自定义一个JEditorPane,用以处理html事件
*
*
@authorchenpeng
*
*/

classMyHtmlEditextendsJEditorPaneimplementsHyperlinkListener...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;

publicMyHtmlEdit(Stringtype,Stringtext)...{
super(type,text);
addHyperlinkListener(
this);

}


publicvoidhyperlinkUpdate(HyperlinkEvente)...{

if(e.getEventType()==HyperlinkEvent.EventType.ACTIVATED)...{
try...{
//在本地浏览器中打开uri(jdk1.6后由于强化了awt,就不用再自己写本地浏览器调用了)
desktop.browse(e.getURL().toURI());

}
catch(IOExceptionex)...{
ex.printStackTrace();
}
catch(URISyntaxExceptionex)...{
ex.printStackTrace();
}


}


}

}


/***//**
*创建面板
*
*
@paramtitle
*
@paramlabel
*
@return
*/

privateJPanelmakePanel(Stringtitle,JComponentlabel)...{
JPanelp
=newJPanel(newGridLayout(1,1));
p.setBorder(BorderFactory.createTitledBorder(title));
p.add(label);
returnp;
}


publicstaticvoidmain(String[]args)...{
EventQueue.invokeLater(
newRunnable()...{
publicvoidrun()...{
createGUI();
}

}
);
}


publicstaticvoidcreateGUI()...{

JFrameframe
=newJFrame("在Swing中使用Html标签");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(
newDimension(450,200));

frame.getContentPane().add(
newHtmlLable());

frame.setResizable(
false);
frame.setLocationRelativeTo(
null);
//jdk1.6新项,置顶
frame.setAlwaysOnTop(true);
frame.setVisible(
true);
}


}


效果图:



这时的Swing,既可以实现Swing原有组件功能,也可以接受Html操作,可说是JavaGUI技术中为数不多的亮点之一。
分享到:
评论

相关推荐

    html的table标签作配置,进行swing的GridBagLayout布局

    根据html的table标签作为配置文件,进行swing GridBagLayout方式的布局管理。简化swing复杂界面布局不方便,容器定位的问题。 具体思想是将tabel td等标签相关元素和属性映射成GridBagConstraints的属性值,将布局...

    SpinnerDemo:演示在 Matlab 中使用 Java Spinner 控件的实用程序-matlab开发

    SpinnerDemo 演示了 Java 微调控件 (javax.swing.JSpinner) 在 Matlab 应用程序中的使用。 该演示包括三个具有不同数据模型的微调器:列表(字符串元胞数组)、数字和日期。 Spinner 使用它们的 ...

    Python Cookbook

    11.3 在tkSimpleDialog函数中使用默认值和区间 405 11.4 给Tkinter列表框增加拖曳排序能力 406 11.5 在Tkinter部件中输入一个重音字符 408 11.6 在Tkinter中嵌入内联的GIF 410 11.7 转换图片格式 412 11.8 在...

    从Java走向Java+EE+.rar

    第4章 在Java EE中使用XML 26 4.1 什么是XML 26 4.1.1 理解XML 26 4.1.2 XML的语法 27 4.1.3 XML命名空间 31 4.2 XML能用来干什么 32 4.3 用DTD验证XML文档 33 4.4 用Schema验证XML文档 35 4.4.1 ...

    java开源包8

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    Java语言基础下载

    在Java中使用HQL 709 内容总结 712 独立实践 712 第三十七章 Spring介绍 713 学习目标 713 Spring简介 714 IOC控制反转 714 Spring的容器 715 AOP面向切面编程 715 AOP的专业术语 715 Spring事务管理 718 Spring与...

    JAVA上百实例源码以及开源项目

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    Java开发技术大全 电子版

    14.8.1标签(Jlabel)使用示例488 14.8.2按钮(JButton)使用示例491 14.8.3文本框(JTextField)和密码框(JPasswordField)使用示例492 14.8.4文本区(JTextArea)使用示例496 14.8.5复选框(JcheckBox)使用...

    java必了解的六大问题

    *第七阶段:HTML语言学习,包括HTML标签,表单标签以及CSS,这是Web应用开发的基础; *第八阶段:JavaScript脚本语言,包括javaScript语法和对象,就这两个方面的内容; *第九阶段:DOM编程,包括DOM原理,常用...

    JAVA上百实例源码以及开源项目源代码

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    Java2核心技术.part5

    5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2接口与抽象类 6.2对象克隆 ...

    Java2核心技术.part3

    5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2接口与抽象类 6.2对象克隆 ...

    Java2核心技术.part1

    5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2接口与抽象类 6.2对象克隆 6.3接口与回...

    Java2核心技术.part6

    5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2接口与抽象类 6.2对象克隆 ...

    Java2核心技术.part4

    5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2接口与抽象类 6.2对象克隆 ...

    Java2核心技术.part2

    5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2接口与抽象类 6.2对象克隆 ...

    Conan:媒体元数据图书馆员

    应用程序(现在是命令行测试/调试功能,稍后是 Swing 还是 html GUI?) 属性树: 树结构模板类 每个节点都有一个“属性”,描述它的含义以及它是什么数据类型(类) 提供了一个没有值成员的抽象类 PropertyTree...

    java开源包1

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

Global site tag (gtag.js) - Google Analytics