﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-BeanSoft's Java Blog-随笔分类-Swing, GUI</title><link>http://www.blogjava.net/beansoft/category/20433.html</link><description>MyEclipse, Java EE 5, JSPWiki, Spring, Struts, Hibernate, JPA, SWT, Swing, AJAX, JavaScript, Netbeans</description><language>zh-cn</language><lastBuildDate>Sat, 06 Oct 2007 15:36:45 GMT</lastBuildDate><pubDate>Sat, 06 Oct 2007 15:36:45 GMT</pubDate><ttl>60</ttl><item><title>精美开源 Swing 组件(仿XP界面) -  L2FProd.com Common Components 下载</title><link>http://www.blogjava.net/beansoft/archive/2007/09/28/149280.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 28 Sep 2007 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/28/149280.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/149280.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/28/149280.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/149280.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/149280.html</trackback:ping><description><![CDATA[<p>下载地址: </p> <p><a href="https://l2fprod-common.dev.java.net/files/documents/1218/53087/l2fprod-common-7.3-20070317.zip"><img height="32" src="http://common.l2fprod.com/images/web.png" width="32" align="absMiddle" border="0"></a> <a href="https://l2fprod-common.dev.java.net/files/documents/1218/53087/l2fprod-common-7.3-20070317.zip">L2FProd.com Common Components 7.3 - 1.96mB - March 17th, 2007</a>  <p>官方站点: <a title="http://common.l2fprod.com/" href="http://common.l2fprod.com/">http://common.l2fprod.com/</a>&nbsp;这个站点还有其它一些 Swing 组件.</p> <p>更推荐 Swing 高手的大本营: <a title="http://community.java.net/javadesktop/" href="http://community.java.net/javadesktop/">http://community.java.net/javadesktop/</a>&nbsp;没有想不到, 只有做不到.</p> <p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="542" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/SwingXPL2FProd.comCommonComponents_F1FA/image_1.png" width="648" border="0"> </p> <p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="262" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/SwingXPL2FProd.comCommonComponents_F1FA/image_3.png" width="448" border="0"> </p> <p>介绍:</p> <p>Swing has lot of components built-in but still some are missing. This project provides the developer community with these missing components, components inspired (copied?!) from modern user interfaces.</p> <p><img height="160" src="http://common.l2fprod.com/images/PropertySheetPanel-small.gif" width="130"><br><strong>Editing properties<br></strong>This is the main job of the PropertySheet component, it puts together a list of properties and their editors. Each property is given a name, a type, a description.It also supports JavaBeans through BeanInfos and PropertyDescriptors. <p><strong>News</strong> <p>March 17th, 2007: a new build has been posted, get it <a href="http://common.l2fprod.com/download.php">here.</a> <p>March 28, 2005: some of the components may one day be included in Swing through <a href="http://www.javadesktop.org/forums/thread.jspa?threadID=11278&amp;tstart=0">SwingX</a>. <p>Try the Java WebStart demo  <p><a href="http://common.l2fprod.com/jnlp/demo.jnlp"><img height="79" src="http://www.l2fprod.com/images/V3/gobutton.gif" width="81" border="0"></a> <p><img height="165" src="http://common.l2fprod.com/images/JTaskPane-small.gif" width="130"><br><strong>Building task oriented applications<br></strong>Lot of recent applications bring contextual item lists from which you can pick tasks related to the current selection or context. The JTaskPane and JTaskPaneGroup deliver this feature to java applications. <p><img height="155" src="http://common.l2fprod.com/images/JButtonBar-small.gif" width="130"><br><strong>Organizing the option dialog<br></strong>Even if this is not the primary goal of the JButtonBar, this is where you often find it. It is a bar made of buttons [sic], you have seen it in Mozilla Firebird, IntelliJ. <p><img height="175" src="http://common.l2fprod.com/images/JOutlookBar.gif" width="120"> <p><strong>Build the nextgen e-mail client<br></strong>the JOutlookBar (seen in...Outlook) stacks components together and allows only one of the stack to be visible at a given time. The component extends the JTabbedPane, no surprise regarding its API <p><img height="170" src="http://common.l2fprod.com/images/FontAndDirectory-small.gif" width="148"><br><strong>Selecting fonts and directories<br></strong>Surprisingly Swing has no font chooser and using the original JFileChooser to select a directory is kind of not so user friendly...well, you know how it works. JFontChooser and JDirectoryChooser address these two issues. <p><img height="155" src="http://common.l2fprod.com/images/totd.png" width="203"><br><strong>Did you know...<br></strong>... you do not have a Tip of The Day dialog in Swing. Well, now you have it with the JTipOfTheDay component!  <p><strong>...and others<br></strong>BannerPanel, BaseDialog, other utilities are part of the library to support the main components.  <p><a href="http://common.l2fprod.com/jnlp/demo.jnlp"><img height="79" src="http://www.l2fprod.com/images/V3/gobutton.gif" width="81" border="0"></a> <p>If your browser is not WebStart enabled, <a href="http://servlet.java.sun.com/logRedirect/getjava-L2FProd/http://java.sun.com/getjava/download.html">go get it</a> <p><strong>JavaWebStart Demo</strong> <p>Try the new components! Run the javawebstart demo. <p>If you do not want to access the webstart demo, you can view<strong> an <a href="http://www.l2fprod.com/software/l2fprod-common/images/demoloop.gif">animated gif</a>.</strong> <p>Icons used in the demo application are courtesy of <a href="http://www.shareit.com/affiliate.html?publisherid=200008750&amp;affiliate=jt&amp;target=http://www.iconshock.com/">Iconshock.com</a><br><a href="http://www.shareit.com/affiliate.html?publisherid=200008750&amp;affiliate=jt&amp;target=http://www.iconshock.com/"><img height="39" src="http://common.l2fprod.com/images/iconshock.gif" width="316" border="0"></a></p><img src ="http://www.blogjava.net/beansoft/aggbug/149280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-28 17:19 <a href="http://www.blogjava.net/beansoft/archive/2007/09/28/149280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原创: 在自定义 JToolTip 里面显示组件</title><link>http://www.blogjava.net/beansoft/archive/2007/09/22/147388.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 22 Sep 2007 05:23:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/22/147388.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/147388.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/22/147388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/147388.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/147388.html</trackback:ping><description><![CDATA[<p>在自定义 JToolTip 里面显示组件</p> <p><img height="231" alt="JToolTip" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JToolTip_BC02/JToolTip_1.gif" width="368"> </p> <p>我们经常可以看到很多 Windows 程序显示出各种各样好看的工具栏提示, 不是默认的那种只有文字的提示... 但是 Java Swing 默认的那个, 似乎只有那个一行文字, well, how can we change it? 请参阅: JFC -- Chapter 24 - Building a Custom Component <a href="http://mail.phys-iasi.ro/Library/Computing/jfc_unleashed/ch24.htm">http://mail.phys-iasi.ro/Library/Computing/jfc_unleashed/ch24.htm</a></p> <p>笔者基于文中的介绍写出了自己的解决方案. First, 写一个自定义的 ToolTipUI 来显示 JToolTip, 实现下列逻辑:<br>1. 如果没有在 JToolTip 中包含子组件(还记得嘛, 所有 JComponent 都是容器), 那么按照普通的模式显示 JToolTip, 稍微改进了一点, 就是可以显示多行的文字, 例如 "a\nb" 这样的文字就被显示为两行, 而不是默认的 JToolTip 显示的单行文本.<br>2. 如果包含了子组件, 就忽略设置的提示文本, 转而显示里面包含的组件, 这样就实现了在 JToolTip 中显示组件的功能. 源代码如下:</p> <p>import java.awt.*;<br>import java.util.StringTokenizer;<br>import javax.swing.*;<br>import javax.swing.plaf.ComponentUI;<br>import javax.swing.plaf.basic.BasicToolTipUI;<br>/**<br>&nbsp;* The ComponentToolTipUI class may be registered with the UIManager<br>&nbsp;* to replace the ToolTipUI for JToolTip instances. When used, it<br>&nbsp;* divides the ToolTip into multiple lines, if has child components,<br>&nbsp;* all child components will be displayed instead of only some tooltip<br>&nbsp;* text. Each line is divided by<br>&nbsp;* the '\ n' character.<br>&nbsp;* &lt;p&gt;<br>&nbsp;* @author Mike Foley<br>&nbsp;**/<br>public class ComponentToolTipUI extends BasicToolTipUI<br>{<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * The single shared UI instance.<br>&nbsp;&nbsp;&nbsp;&nbsp; **/<br>&nbsp;&nbsp;&nbsp; static ComponentToolTipUI sharedInstance = new ComponentToolTipUI();<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * The margin around the text.<br>&nbsp;&nbsp;&nbsp;&nbsp; **/<br>&nbsp;&nbsp;&nbsp; static final int MARGIN = 2;<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * The character to use in the StringTokenizer to<br>&nbsp;&nbsp;&nbsp;&nbsp; * separate lines in the ToolTip. This could be the<br>&nbsp;&nbsp;&nbsp;&nbsp; * system property end of line character.<br>&nbsp;&nbsp;&nbsp;&nbsp; **/<br>&nbsp;&nbsp;&nbsp; static final String lineSeparator = "\n";<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * MultiLineToolTipUI, constructor.<br>&nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; * Have the constructor be protected so we can be subclassed,<br>&nbsp;&nbsp;&nbsp;&nbsp; * but not created by client classes.<br>&nbsp;&nbsp;&nbsp;&nbsp; **/<br>&nbsp;&nbsp;&nbsp; protected ComponentToolTipUI()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * Create the UI component for the given component.<br>&nbsp;&nbsp;&nbsp;&nbsp; * The same UI can be shared for all components, so<br>&nbsp;&nbsp;&nbsp;&nbsp; * return our shared instance.<br>&nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param c The component to create the UI for.<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return Our shared UI component instance.<br>&nbsp;&nbsp;&nbsp;&nbsp; **/<br>&nbsp;&nbsp;&nbsp; public static ComponentUI createUI(JComponent c)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sharedInstance;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * Paint the ToolTip. Use the current font and colors<br>&nbsp;&nbsp;&nbsp;&nbsp; * set for the given component.<br>&nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param g The graphics to paint with.<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param c The component to paint.<br>&nbsp;&nbsp;&nbsp;&nbsp; **/<br>&nbsp;&nbsp;&nbsp; public void paint(Graphics g, JComponent c)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;// Paints each of the components in this container.<br>&nbsp;&nbsp;if(c.getComponentCount() &gt; 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.paintComponents(g);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;// If no components, then paint a muiltiple line tooltip</p> <p><br>&nbsp;&nbsp;//<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Determine the size for each row.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Font font = c.getFont();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FontMetrics fontMetrics = c.getFontMetrics(font);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int fontHeight = fontMetrics.getHeight();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int fontAscent = fontMetrics.getAscent();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Paint the background in the tip color.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(c.getBackground());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dimension size = c.getSize();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.fillRect(0, 0, size.width, size.height);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Paint each line in the tip using the<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // foreground color. Use a StringTokenizer<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // to parse the ToolTip. Each line is left<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // justified, and the y coordinate is updated<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // through the loop.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(c.getForeground());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int y = 2+fontAscent;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String tipText = ((JToolTip)c).getTipText();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringTokenizer tokenizer = new StringTokenizer(tipText, lineSeparator);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int numberOfLines = tokenizer.countTokens();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; numberOfLines; i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.drawString(tokenizer.nextToken(), MARGIN, y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y += fontHeight;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</p> <p>&nbsp;&nbsp;&nbsp; // paint<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * The preferred size for the ToolTip is the width of<br>&nbsp;&nbsp;&nbsp;&nbsp; * the longest row in the tip, and the height of a<br>&nbsp;&nbsp;&nbsp;&nbsp; * single row times the number of rows in the tip.<br>&nbsp;&nbsp;&nbsp;&nbsp; *<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param c The component whose size is needed.<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return The preferred size for the component.<br>&nbsp;&nbsp;&nbsp;&nbsp; **/<br>&nbsp;&nbsp;&nbsp; public Dimension getPreferredSize(JComponent c)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // If has children components<br>&nbsp;&nbsp;if(c.getComponentCount() &gt; 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return c.getLayout().preferredLayoutSize(c);<br>&nbsp;&nbsp;}</p> <p>&nbsp;&nbsp;//<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Determine the size for each row.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Font font = c.getFont();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FontMetrics fontMetrics = c.getFontMetrics(font);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int fontHeight = fontMetrics.getHeight();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Get the tip text string.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String tipText = ((JToolTip)c).getTipText();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Empty tip, use a default size.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (tipText == null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new Dimension(2 * MARGIN, 2 * MARGIN);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create a StringTokenizer to parse the ToolTip.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringTokenizer tokenizer = new StringTokenizer(tipText, lineSeparator);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int numberOfLines = tokenizer.countTokens();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Height is number of lines times height of a single line.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int height = numberOfLines * fontHeight;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Width is width of longest single line.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int width = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; numberOfLines; i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int thisWidth = fontMetrics.stringWidth(tokenizer.nextToken());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width = Math.max(width, thisWidth);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Add the margin to the size, and return.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (new Dimension(width + 2 * MARGIN, height + 2 * MARGIN));</p> <p>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; // getPreferredSize<br>}</p> <p>// ComponentToolTipUI</p> <p>接着, 我们定义一个包含了其它组件的 JToolTip:</p> <p>import java.awt.*;<br>import java.awt.event.*;<br>import javax.swing.*;</p> <p>public class MyTooltip extends javax.swing.JToolTip<br>{<br>&nbsp; JButton jButton1 = new JButton();<br>&nbsp; FlowLayout flowLayout1 = new FlowLayout();<br>&nbsp; JTextField jTextField1 = new JTextField();</p> <p>&nbsp;public MyTooltip()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; try&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jbInit();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; catch(Exception e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;}</p> <p>&nbsp;public void setTipText(String tipText) {<br>&nbsp;&nbsp;&nbsp; super.setTipText(tipText);<br>//&nbsp;&nbsp;&nbsp; button.setText(tipText);<br>&nbsp;}</p> <p>&nbsp;</p> <p>&nbsp; private void jbInit() throws Exception {<br>//&nbsp;&nbsp;&nbsp; jLabel1.setMaximumSize(new Dimension(400, 300));<br>//&nbsp;&nbsp;&nbsp; jLabel1.setMinimumSize(new Dimension(400, 300));<br>//&nbsp;&nbsp;&nbsp; jLabel1.setPreferredSize(new Dimension(400, 300));<br>&nbsp;&nbsp;&nbsp; jButton1.setText("This is a button included in the tool tip.");<br>&nbsp;&nbsp;&nbsp; this.setLayout(flowLayout1);<br>&nbsp;&nbsp;&nbsp; this.setOpaque(true);<br>&nbsp;&nbsp;&nbsp; jTextField1.setText("jTextField1");<br>&nbsp;&nbsp;&nbsp; this.add(jButton1, null);<br>&nbsp;&nbsp;&nbsp; this.add(jTextField1, null);<br>&nbsp; }</p> <p><br>}</p> <p>最后, 我们编写一个测试类来测试这个 JToolTip:</p> <p>import java.awt.event.*;<br>import javax.swing.*;</p> <p>public class MyButton extends javax.swing.JButton<br>{</p> <p>&nbsp;public MyButton()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;}</p> <p>&nbsp;public JToolTip createToolTip() {<br>&nbsp;&nbsp;JToolTip tip = new MyTooltip();<br>&nbsp;&nbsp;tip.setComponent(this);<br>&nbsp;&nbsp;tip.setTipText(getToolTipText());<br>&nbsp;&nbsp;return tip;<br>&nbsp;}</p> <p>&nbsp;public static void main(String[] args)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());<br>&nbsp;&nbsp;} catch (Exception ex) {<br>&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br>&nbsp;&nbsp;}</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String multiLineToolTipUIClassName =<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ComponentToolTipUI";</p> <p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(multiLineToolTipUIClassName);</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UIManager.put( "ToolTipUI", multiLineToolTipUIClassName );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UIManager.put( multiLineToolTipUIClassName,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class.forName( multiLineToolTipUIClassName ) );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch( ClassNotFoundException cnfe )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println( "MultiLine ToolTip UI class not found" );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println( cnfe );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p> <p>&nbsp;&nbsp;final JFrame frame = new JFrame("Test JToolTip");<br>&nbsp;&nbsp;frame.addWindowListener(new java.awt.event.WindowAdapter() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;public void windowClosing(WindowEvent e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;frame.dispose();<br>&nbsp;&nbsp;&nbsp;&nbsp;System.exit(0);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;});</p> <p>&nbsp;&nbsp;MyButton button = new MyButton();<br>&nbsp;&nbsp;button.setText("这个按钮显示一个包含组件的工具提示");<br>&nbsp;&nbsp;button.setToolTipText("提示");</p> <p>&nbsp;&nbsp;frame.getContentPane().add(button);</p> <p>&nbsp;&nbsp;JButton buttonPlain = new JButton("这是一个包含多行文本提示的普通按钮");<br>&nbsp;&nbsp;buttonPlain.setToolTipText("Line 1\nLine 2\n");</p> <p>&nbsp;&nbsp;frame.getContentPane().add(java.awt.BorderLayout.SOUTH, buttonPlain);</p> <p>//&nbsp;&nbsp;frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br>&nbsp;&nbsp;frame.pack();<br>&nbsp;&nbsp;frame.show();<br>&nbsp;}</p> <p><br>}</p> <p>编译并运行最后一个类: MyButton, 就可以看到包含了可以交互的按钮和文本框, 以及一个显示两行文本的工具栏提示.</p><img src ="http://www.blogjava.net/beansoft/aggbug/147388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-22 13:23 <a href="http://www.blogjava.net/beansoft/archive/2007/09/22/147388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Video with speech: Using MyEclipse 5.5 to Develop Swing Applications</title><link>http://www.blogjava.net/beansoft/archive/2007/09/01/141995.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 01 Sep 2007 14:15:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/01/141995.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/141995.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/01/141995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/141995.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/141995.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 入门视频: 使用 MyEclipse 开发 Swing 应用(英文讲解)&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/09/01/141995.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/141995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-01 22:15 <a href="http://www.blogjava.net/beansoft/archive/2007/09/01/141995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>腾讯TM 2008界面和 Windows Live Messenger 惊人相似</title><link>http://www.blogjava.net/beansoft/archive/2007/08/26/139557.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sun, 26 Aug 2007 10:54:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/08/26/139557.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/139557.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/08/26/139557.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/139557.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/139557.html</trackback:ping><description><![CDATA[<p>先看一下官方的截图:<br></p>
<p><img height=498 src="http://im.qq.com/tm/2008/images/feature/01-ui.png" width=378><br></p>
<p>不过主页背景图上的 MM 挺漂亮的, 呵呵.<br></p>
<p><img height=569 src="http://im.qq.com/tm/2008/images/feature/bg.jpg" width=1600></p>
<p>再看 Windows&nbsp;Live Messenger 8.5:<br></p>
<p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/WindowsLiveMessenger8.5_EC83/image%7B0%7D%5B8%5D.png" atomicselection="true"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=737 src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/WindowsLiveMessenger8.5_EC83/image%7B0%7D_thumb%5B4%5D.png" width=316 border=0></a> </p>
<p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/WindowsLiveMessenger8.5_EC83/image%7B0%7D%5B9%5D.png" atomicselection="true"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=473 src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/WindowsLiveMessenger8.5_EC83/image%7B0%7D_thumb%5B5%5D.png" width=580 border=0></a> </p>
<img src ="http://www.blogjava.net/beansoft/aggbug/139557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-08-26 18:54 <a href="http://www.blogjava.net/beansoft/archive/2007/08/26/139557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文本放大器,大三时候写的小玩意</title><link>http://www.blogjava.net/beansoft/archive/2007/07/31/133474.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Tue, 31 Jul 2007 00:27:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/07/31/133474.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/133474.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/07/31/133474.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/133474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/133474.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/07/31/133474.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/133474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-07-31 08:27 <a href="http://www.blogjava.net/beansoft/archive/2007/07/31/133474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows Live Messenger 8.5</title><link>http://www.blogjava.net/beansoft/archive/2007/07/17/130886.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Tue, 17 Jul 2007 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/07/17/130886.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/130886.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/07/17/130886.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/130886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/130886.html</trackback:ping><description><![CDATA[<p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/WindowsLiveMessenger8.5_EC83/image%7B0%7D%5B8%5D.png" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="737" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/WindowsLiveMessenger8.5_EC83/image%7B0%7D_thumb%5B4%5D.png" width="316" border="0"></a> </p> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/WindowsLiveMessenger8.5_EC83/image%7B0%7D%5B9%5D.png" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="473" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/WindowsLiveMessenger8.5_EC83/image%7B0%7D_thumb%5B5%5D.png" width="580" border="0"></a> </p> <p>&nbsp;界面画的不错, Vista 风格.</p><img src ="http://www.blogjava.net/beansoft/aggbug/130886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-07-17 16:52 <a href="http://www.blogjava.net/beansoft/archive/2007/07/17/130886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sun UI 设计器源码学习 - 按钮设计器拖放调整组件大小示例</title><link>http://www.blogjava.net/beansoft/archive/2007/07/02/127430.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 02 Jul 2007 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/07/02/127430.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/127430.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/07/02/127430.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/127430.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/127430.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 拖放设计按钮的 demo 代码&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/07/02/127430.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/127430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-07-02 09:31 <a href="http://www.blogjava.net/beansoft/archive/2007/07/02/127430.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jigloo 开发 Swing 的入门教程</title><link>http://www.blogjava.net/beansoft/archive/2007/04/30/114752.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 30 Apr 2007 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/04/30/114752.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/114752.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/04/30/114752.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/114752.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/114752.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 应部分朋友的要求, 撰写如何用 Eclipse Jigloo 插件开发 Swing 界面的入门教程, 含操作Flash动画.&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/04/30/114752.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/114752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-04-30 13:15 <a href="http://www.blogjava.net/beansoft/archive/2007/04/30/114752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Swing: 用 GlassPane 显示一个透明的正在操作框</title><link>http://www.blogjava.net/beansoft/archive/2007/03/07/102421.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 07 Mar 2007 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/03/07/102421.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/102421.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/03/07/102421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/102421.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/102421.html</trackback:ping><description><![CDATA[<p>这个组件可以让用户看到界面里的显示但是无法操作.</p> <p>需要的图: <img alt="http://www.blogjava.net/images/blogjava_net/beansoft/20272/o_loading.gif" src="http://www.blogjava.net/images/blogjava_net/beansoft/20272/o_loading.gif">&nbsp;loading.gif</p> <p>代码(main() 方法里是demo代码):</p> <p>运行效果截图:<br> <a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/e9faed10a82a_DC90/loading_glass_pane%5B1%5D.png" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="240" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/e9faed10a82a_DC90/loading_glass_pane.png" width="240" border="0"></a> </p> <p><font color="#0080ff">import javax.swing.*; </font> <p><font color="#0080ff">import java.awt.BorderLayout;<br>import java.awt.Cursor;<br>import java.awt.FlowLayout;<br>import java.awt.event.*; </font> <p><font color="#0080ff">/**<br>* We have to provide our own glass pane so that it can paint a loading<br>* dialog and then the user can see the progress but can't operation<br>* the GUI, it's a transparent pane so the below contents is visible.<br>* <br>* Also please refer to articles by Sun - How to Use Root Panes:<br>* {@link </font><a href="http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html}"><font color="#0080ff">http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html}</font></a><br><font color="#0080ff">* @author Jacky Liu<br>* @version 1.0 2006-08<br>*/<br>public class LoadingGlassPane extends JPanel {<br>private static final long serialVersionUID = 1L;<br>/**<br>* A label displays status text and loading icon.<br>*/<br>private JLabel statusLabel = new JLabel("Reading data, please wait..."); </font> <p><font color="#0080ff">public LoadingGlassPane() {<br>try {<br>statusLabel.setIcon(new ImageIcon(getClass().getResource(<br>"loading.gif")));<br>} catch (RuntimeException e1) {<br>// TODO Auto-generated catch block<br>e1.printStackTrace();<br>} </font> <p><font color="#0080ff">statusLabel.setHorizontalAlignment(JLabel.CENTER); </font> <p><font color="#0080ff">// Must add a mouse listener, otherwise the event will not be<br>// captured<br>this.addMouseListener(new java.awt.event.MouseAdapter() {<br>public void mousePressed(MouseEvent e) {<br>}<br>}); </font> <p><font color="#0080ff">this.setLayout(new BorderLayout()); </font> <p><font color="#0080ff">this.add(statusLabel);<br>// Transparent<br>setOpaque(false);<br>} </font> <p><font color="#0080ff">/**<br>* Set the text to be displayed on the glass pane.<br>* <br>* @param text<br>*/<br>public void setStatusText(final String text) {<br>SwingUtilities.invokeLater(new Runnable() {<br>public void run() {<br>statusLabel.setText(text);<br>}<br>});<br>}<br>/**<br>* Install this to the jframe as glass pane.<br>* @param frame<br>*/<br>public void installAsGlassPane(JFrame frame) {<br>frame.setGlassPane(this);<br>}<br>/**<br>* A small demo code of how to use this glasspane.<br>* @param args<br>*/<br>public static void main(String[] args) {<br>JFrame frame = new JFrame("Test GlassPane");<br>final LoadingGlassPane glassPane = new LoadingGlassPane();<br>glassPane.installAsGlassPane(frame);<br>JButton button = new JButton("Test Query");<br>button.addActionListener(new ActionListener() { </font> <p><font color="#0080ff">public void actionPerformed(ActionEvent e) {<br>// Call in new thread to allow the UI to update<br>Thread th = new Thread() {<br>public void run() {<br>glassPane.setVisible(true);<br>glassPane.setCursor(new Cursor(Cursor.WAIT_CURSOR));<br>// TODO Long time operation here<br>try {<br>Thread.sleep(2000);<br>} catch (InterruptedException e) {<br>// TODO Auto-generated catch block<br>e.printStackTrace();<br>}<br>glassPane.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));<br>glassPane.setVisible(false);<br>}<br>}; </font> <p><font color="#0080ff">th.start();<br>}<br>});<br>frame.getContentPane().setLayout(new FlowLayout());<br>frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br>frame.getContentPane().add(button);<br>frame.setSize(200, 200);<br>frame.setVisible(true);<br>} </font> <p><font color="#0080ff">}</font></p><img src ="http://www.blogjava.net/beansoft/aggbug/102421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-03-07 15:49 <a href="http://www.blogjava.net/beansoft/archive/2007/03/07/102421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>