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

在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技术中为数不多的亮点之一。
分享到:
评论

相关推荐

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

    本实例面向Java新手,将详细讲解如何使用DJ Native Swing库在Java Swing应用中嵌入HTML。 首先,我们需要了解DJ Native Swing库。这是一个开源项目,它扩展了Java Swing,添加了对Web浏览器组件的支持。项目提供了...

    基于Java Swing的超链接标签

    本文将详细介绍如何在Java Swing环境中实现超链接标签以及超链接按钮,并提供具体的实现示例。 #### 实现原理 在Java Swing中,可以通过创建自定义的标签组件来实现超链接功能。这种自定义组件通常继承自`JLabel`...

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

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

    JAVA100例之实例76 在Applet中使用Swing

    下面我们将详细探讨在Applet中使用Swing的知识点。 首先,理解Applet的概念。Applet是Java的一个特殊类,继承自`java.applet.Applet`,它可以嵌入到HTML页面中,由Web浏览器加载并执行。Applet的生命周期包括初始化...

    精通Java Swing程序设计(中文CHM)

    - JButton、JLabel、JTextField、JTextArea、JCheckBox、JRadioButton等:Swing中的常用组件,分别对应按钮、标签、文本框、文本域、复选框和单选按钮。 2. **布局管理器** - FlowLayout:按照从左到右,从上到下...

    使用Swing的实例

    `ButtonHtmlDemo.java`和`ButtonHtmlDemo.jnlp`文件可能展示了如何在按钮上使用HTML标签来格式化文本,如改变字体、颜色或对齐方式,使得按钮更具表现力。 在这些实例中,开发者可以学习到如何创建Swing应用的基本...

    Swing 添加超链接 打开页面

    1. **创建`JLabel`**:首先,创建一个`JLabel`,并设置其文本为要显示的超链接文本,如`"&lt;HTML&gt;点击这里打开页面&lt;/U&gt;&lt;/HTML&gt;"`,使用HTML标签来格式化文本,使其看起来像超链接。 2. **添加监听器**:为`JLabel`...

    swing 外观主题

    在 Swing 中,外观主题(LookAndFeel)扮演着关键角色,它决定了应用程序的视觉风格,包括窗口、按钮、菜单等组件的外观。"PgsLookAndFeel"是一个特定的外观主题,用于定制Swing应用的UI设计,使其具有更加吸引人的...

    Java Swing(第二版)(chm和pdf)

    在Java Swing的第二版中,通常会涵盖更多的高级特性和最佳实践,以便开发者能够更有效地利用这一强大的工具。 Swing是Java AWT(Abstract Window Toolkit)的扩展,它用纯Java实现,因此具有跨平台的特性。Swing...

    JAVA swing基本控件实例

    **HTMLDemo** 涉及到在Swing组件中展示HTML内容,可能是在标签(JLabel)或文本组件(JTextComponent)中。`components-HtmlDemoProject.zip`将展示如何处理包含HTML标记的字符串,使得文本可以拥有格式化效果,如...

    Swing组件一览表

    - `JInternalFrame`:在JDesktopPane中使用的可移动和可最小化的内部窗口。`JInternalFrame()`和`JInternalFrame(String title)`是创建方法。 - `JLayeredPane`:允许组件在不同的层次上重叠。`JLayeredPane()`是...

    一个简单的HTML浏览器.zip_applet_html 浏览器_java Applet_java 浏览器_swing

    描述中提到“Applet与Swing编写一个简单的HTML浏览器”,这暗示了开发者使用Java Applet作为基础,结合Swing的组件来创建一个可以在本地运行的简单浏览器。Applet在HTML页面中嵌入,可以接收和发送HTTP请求,从而...

    JAVA Swing 全教程

    与AWT中的组件不同,Swing组件不直接依赖于操作系统,而是用纯Java实现,这使得它们在各种平台上具有更好的一致性。此外,Swing提供了丰富的可定制性,允许开发者通过调整外观和行为来创建独特的用户界面。 **第2章...

    前端项目-swing.zip

    在前端开发领域,"Swing"通常指的是Java GUI库,但在这个上下文中,考虑到描述中提到的“刷卡界面”,这里的“Swing”可能是指一种设计模式或者特定的前端库或框架,用于实现用户界面的动态滑动效果,类似于在移动...

    JavaSwing界面设计(所有控件及示例)

    - `JApplet` 用于创建网页中的小程序,但现在已不太常用,因为现代浏览器倾向于使用Web Start或HTML5技术。 - `JDialog` 创建对话框,可以用来显示临时信息或者获取用户输入。 - `JWindow` 是一个无边界窗口,较...

    Java_ Swing, 2nd Edition

    在"Java Swing, 2nd Edition"这本书中,读者可以深入学习Swing的相关知识,提升自己的GUI设计能力。 Swing提供了各种组件,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、面板(JPanel)、滚动窗格...

    swing 学习 有时间学学

    Swing提供了大量的组件,包括按钮(JButton)、文本字段(JTextField)、标签(JLabel)、面板(JPanel)、滚动窗格(JScrollPane)、列表(JList)、表格(JTable)、树形视图(JTree)和菜单(JMenu、JMenuItem)...

    Swing读书笔记

    - `JFrame`、`JDialog`、`JWindow`和`JApplet`等属于此类,它们是Swing中的特殊组件,虽然也继承自`JRootPane`,但它们的绘制需要使用本地系统资源。这是因为它们代表了窗口级别的组件,必须与底层操作系统进行交互...

    tablelayout for swing

    标题中的"tablelayout for swing"指的是在Java Swing中使用TableLayout进行界面布局管理的知识点。TableLayout是一种自定义的布局管理器,它允许开发者通过表格形式来组织组件,提供了更灵活和精确的控制方式。 ...

    java swing 下划线

    如果是为了美观或者特殊需求,可以使用HTML标签来控制文本的格式,包括添加下划线: ```java JLabel label = new JLabel("&lt;html&gt;This is an &lt;u&gt;underlined&lt;/u&gt; text.&lt;/html&gt;"); ``` 这段代码会创建一个显示...

Global site tag (gtag.js) - Google Analytics