在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新手,将详细讲解如何使用DJ Native Swing库在Java Swing应用中嵌入HTML。 首先,我们需要了解DJ Native Swing库。这是一个开源项目,它扩展了Java Swing,添加了对Web浏览器组件的支持。项目提供了...
本文将详细介绍如何在Java Swing环境中实现超链接标签以及超链接按钮,并提供具体的实现示例。 #### 实现原理 在Java Swing中,可以通过创建自定义的标签组件来实现超链接功能。这种自定义组件通常继承自`JLabel`...
根据html的table标签作为配置文件,进行swing GridBagLayout方式的布局管理。简化swing复杂界面布局不方便,容器定位的问题。 具体思想是将tabel td等标签相关元素和属性映射成GridBagConstraints的属性值,将布局...
下面我们将详细探讨在Applet中使用Swing的知识点。 首先,理解Applet的概念。Applet是Java的一个特殊类,继承自`java.applet.Applet`,它可以嵌入到HTML页面中,由Web浏览器加载并执行。Applet的生命周期包括初始化...
- JButton、JLabel、JTextField、JTextArea、JCheckBox、JRadioButton等:Swing中的常用组件,分别对应按钮、标签、文本框、文本域、复选框和单选按钮。 2. **布局管理器** - FlowLayout:按照从左到右,从上到下...
`ButtonHtmlDemo.java`和`ButtonHtmlDemo.jnlp`文件可能展示了如何在按钮上使用HTML标签来格式化文本,如改变字体、颜色或对齐方式,使得按钮更具表现力。 在这些实例中,开发者可以学习到如何创建Swing应用的基本...
1. **创建`JLabel`**:首先,创建一个`JLabel`,并设置其文本为要显示的超链接文本,如`"<HTML>点击这里打开页面</U></HTML>"`,使用HTML标签来格式化文本,使其看起来像超链接。 2. **添加监听器**:为`JLabel`...
在 Swing 中,外观主题(LookAndFeel)扮演着关键角色,它决定了应用程序的视觉风格,包括窗口、按钮、菜单等组件的外观。"PgsLookAndFeel"是一个特定的外观主题,用于定制Swing应用的UI设计,使其具有更加吸引人的...
在Java Swing的第二版中,通常会涵盖更多的高级特性和最佳实践,以便开发者能够更有效地利用这一强大的工具。 Swing是Java AWT(Abstract Window Toolkit)的扩展,它用纯Java实现,因此具有跨平台的特性。Swing...
**HTMLDemo** 涉及到在Swing组件中展示HTML内容,可能是在标签(JLabel)或文本组件(JTextComponent)中。`components-HtmlDemoProject.zip`将展示如何处理包含HTML标记的字符串,使得文本可以拥有格式化效果,如...
- `JInternalFrame`:在JDesktopPane中使用的可移动和可最小化的内部窗口。`JInternalFrame()`和`JInternalFrame(String title)`是创建方法。 - `JLayeredPane`:允许组件在不同的层次上重叠。`JLayeredPane()`是...
描述中提到“Applet与Swing编写一个简单的HTML浏览器”,这暗示了开发者使用Java Applet作为基础,结合Swing的组件来创建一个可以在本地运行的简单浏览器。Applet在HTML页面中嵌入,可以接收和发送HTTP请求,从而...
与AWT中的组件不同,Swing组件不直接依赖于操作系统,而是用纯Java实现,这使得它们在各种平台上具有更好的一致性。此外,Swing提供了丰富的可定制性,允许开发者通过调整外观和行为来创建独特的用户界面。 **第2章...
在前端开发领域,"Swing"通常指的是Java GUI库,但在这个上下文中,考虑到描述中提到的“刷卡界面”,这里的“Swing”可能是指一种设计模式或者特定的前端库或框架,用于实现用户界面的动态滑动效果,类似于在移动...
- `JApplet` 用于创建网页中的小程序,但现在已不太常用,因为现代浏览器倾向于使用Web Start或HTML5技术。 - `JDialog` 创建对话框,可以用来显示临时信息或者获取用户输入。 - `JWindow` 是一个无边界窗口,较...
在"Java Swing, 2nd Edition"这本书中,读者可以深入学习Swing的相关知识,提升自己的GUI设计能力。 Swing提供了各种组件,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、面板(JPanel)、滚动窗格...
Swing提供了大量的组件,包括按钮(JButton)、文本字段(JTextField)、标签(JLabel)、面板(JPanel)、滚动窗格(JScrollPane)、列表(JList)、表格(JTable)、树形视图(JTree)和菜单(JMenu、JMenuItem)...
- `JFrame`、`JDialog`、`JWindow`和`JApplet`等属于此类,它们是Swing中的特殊组件,虽然也继承自`JRootPane`,但它们的绘制需要使用本地系统资源。这是因为它们代表了窗口级别的组件,必须与底层操作系统进行交互...
标题中的"tablelayout for swing"指的是在Java Swing中使用TableLayout进行界面布局管理的知识点。TableLayout是一种自定义的布局管理器,它允许开发者通过表格形式来组织组件,提供了更灵活和精确的控制方式。 ...
如果是为了美观或者特殊需求,可以使用HTML标签来控制文本的格式,包括添加下划线: ```java JLabel label = new JLabel("<html>This is an <u>underlined</u> text.</html>"); ``` 这段代码会创建一个显示...