<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>David Qiao's Blog</title>
	<atom:link href="http://www.jidesoft.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jidesoft.com/blog</link>
	<description>Love being a Swing developer</description>
	<pubDate>Mon, 30 Jun 2008 23:24:53 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Vista Icon Set</title>
		<link>http://www.jidesoft.com/blog/2008/06/30/vista-icon-set/</link>
		<comments>http://www.jidesoft.com/blog/2008/06/30/vista-icon-set/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 23:24:22 +0000</pubDate>
		<dc:creator>David Qiao</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[graphics design]]></category>

		<category><![CDATA[icon]]></category>

		<category><![CDATA[vista]]></category>

		<guid isPermaLink="false">http://www.jidesoft.com/blog/?p=42</guid>
		<description><![CDATA[After a few month preparation, we got one more icon set ready. It is for Windows Vista this time. It has the same number of icons as the first XP icons except it gets bigger. The Vista style is more realistic than illustrative, but not quite photorealistic. Icons have a maximum size of 256&#215;256 pixels (comparing [...]]]></description>
			<content:encoded><![CDATA[<div><span style="font-size: x-small; font-family: Verdana;"><a href="http://www.jidesoft.com/blog/wp-content/uploads/2008/06/vista.png"></a>After a few month preparation, we got one more icon set ready. It is for Windows Vista this time. It has the same number of icons as the first XP icons except it gets bigger. </span><span style="font-family: Verdana;"><span style="font-size: x-small;">The Vista style is more realistic than illustrative, but not quite photorealistic. Icons have a maximum size of 256&#215;256 pixels (comparing to 64&#215;64 maximum in XP icon set), making them suitable for high-dpi (dots per inch) displays. These high-resolution icons allow for high visual quality in list views with large icons. We tried to use the same design idea as the existing Vista&#8217;s icon so that your application looks consistent with any native Vista applications. </span></span></div>
<div><span style="font-size: x-small; font-family: Verdana;"> </span></div>
<div><span style="font-size: x-small; font-family: Verdana;">Here are some links for this icon set.</span></div>
<div><span style="font-size: x-small; font-family: Verdana;"> </span></div>
<div><img class="aligncenter size-full wp-image-43" title="vista" src="http://www.jidesoft.com/blog/wp-content/uploads/2008/06/vista.png" alt="Vista Icons" width="400" height="357" /></div>
<div><span style="font-size: x-small; font-family: Verdana;"> </span></div>
<div><span style="font-size: x-small; font-family: Verdana;">Icon Service Overview: </span><a href="http://www.jidesoft.com/icon/index.html"><span style="font-size: x-small; color: #0000ff; font-family: Verdana;">http://www.jidesoft.com/icon/index.html</span></a></div>
<div><span style="font-size: x-small; font-family: Verdana;">Icon Preview: </span><a href="http://www.jidesoft.com/icon/preview.htm"><span style="font-size: x-small; color: #0000ff; font-family: Verdana;">http://www.jidesoft.com/icon/preview.htm</span></a></div>
<div><span style="font-size: x-small; font-family: Verdana;">Custom Icon Design: </span><a href="http://www.jidesoft.com/icon/design.htm"><span style="font-size: x-small; color: #0000ff; font-family: Verdana;">http://www.jidesoft.com/icon/design.htm</span></a></div>
<div><span style="font-size: x-small; font-family: Verdana;">Icon Set Purchase: </span><a href="http://www.jidesoft.com/store/index.php?cPath=33"><span style="font-size: x-small; color: #0000ff; font-family: Verdana;">http://www.jidesoft.com/store/index.php?cPath=33</span></a></div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.jidesoft.com/blog/2008/06/30/vista-icon-set/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Arrow key support in ButtonPanel</title>
		<link>http://www.jidesoft.com/blog/2008/06/22/arrow-key-support-in-buttonpanel/</link>
		<comments>http://www.jidesoft.com/blog/2008/06/22/arrow-key-support-in-buttonpanel/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 04:44:59 +0000</pubDate>
		<dc:creator>David Qiao</dc:creator>
		
		<category><![CDATA[JIDE]]></category>

		<category><![CDATA[Java and Swing]]></category>

		<category><![CDATA[arrow key]]></category>

		<category><![CDATA[button panel]]></category>

		<guid isPermaLink="false">http://www.jidesoft.com/blog/?p=41</guid>
		<description><![CDATA[There is one missing feature in ButtonPanel. That&#8217;s the arrow key support. On Windows (probably on Mac as well), people get used to use left or right keys to navigate among buttons on a horizontal button panel or up/down keys for vertical button panel. However Swing doesn&#8217;t have that. For example, in the JOptionPane, arrow keys don&#8217;t change [...]]]></description>
			<content:encoded><![CDATA[<p>There is one missing feature in ButtonPanel. That&#8217;s the arrow key support. On Windows (probably on Mac as well), people get used to use left or right keys to navigate among buttons on a horizontal button panel or up/down keys for vertical button panel. However Swing doesn&#8217;t have that. For example, in the JOptionPane, arrow keys don&#8217;t change button focus. So I decide to add this feature. it has about 200 lines simple code. I included it below. The javadoc tells you how to use it. It is already checked in to JIDE Common Layer so feel free to check it out and use it. JIDE&#8217;s ButtonPanel called it already. JideOptionPane, since it uses ButtonPanel, also works beautifully.</p>
<div class="codecolorer-container java" style="height:980px;"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">package</span> com.<span class="me1">jidesoft</span>.<span class="me1">swing</span>;<br />
<br />
<span class="co2">import javax.swing.*;</span><br />
<span class="co2">import java.awt.*;</span><br />
<span class="co2">import java.awt.event.ActionEvent;</span><br />
<span class="co2">import java.awt.event.ActionListener;</span><br />
<span class="co2">import java.awt.event.KeyEvent;</span><br />
<span class="co2">import java.util.ArrayList;</span><br />
<span class="co2">import java.util.List;</span><br />
<br />
<span class="coMULTI">/**<br />
 * This is a util class to support the four arrow keys navigation in any container. To use it, you can call<br />
 * &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;<br />
 * new ArrowKeyNavigationSupport().install(container);<br />
 * &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;<br />
 * The container could be any container. A typical use case is the button panel. By default we used it in &lt;a href=&quot;mailto:{@link&quot;&gt;{@link&lt;/a&gt;<br />
 * com.jidesoft.dialog.ButtonPanel} class to enable left/right/up/down key.<br />
 * &amp;lt;p/&amp;gt;<br />
 * By default, all components will be navigable in the container but you can further define what components are<br />
 * navigable by using the constructor<br />
 * &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;<br />
 * new ArrowKeyNavigationSupport(Class[] componentTypes)<br />
 * &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;<br />
 * where componentTypes is the list of the classes of the components that you would like to be navigable. For example,<br />
 * &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;<br />
 * new ArrowKeyNavigationSupport(new Class[]{ AbstractButton.class }).install(container);<br />
 * &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;<br />
 * to only allow any buttons (JButton, JideButton, JCheckBox, JRadioButton) etc.<br />
 * &amp;lt;p/&amp;gt;<br />
 * You can also allow certain keys to be used. For example.<br />
 * &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;<br />
 * new ArrowKeyNavigationSupport(new int[]{ KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT}).install(container);<br />
 * &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;<br />
 * if only left and right keys are making sense to navigate in your container.<br />
 */</span><br />
<span class="kw2">public</span> <span class="kw2">class</span> ArrowKeyNavigationSupport <span class="br0">&#123;</span><br />
    <span class="kw2">private</span> <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> _keyCode = <span class="kw2">new</span> <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#123;</span><span class="kw3">KeyEvent</span>.<span class="me1">VK_LEFT</span>, <span class="kw3">KeyEvent</span>.<span class="me1">VK_RIGHT</span>, <span class="kw3">KeyEvent</span>.<span class="me1">VK_UP</span>, <span class="kw3">KeyEvent</span>.<span class="me1">VK_DOWN</span><span class="br0">&#125;</span>;<br />
    <span class="kw2">private</span> <span class="kw2">Class</span><span class="br0">&#91;</span><span class="br0">&#93;</span> _componentTypes;<br />
    <span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw3">String</span> CLIENT_PROPERTY_ARROWKEY_NAVIGATION_SUPPORT = <span class="st0">&quot;ArrowKeyNavigationSupport.previousAction&quot;</span>;<br />
<br />
    <span class="kw2">public</span> ArrowKeyNavigationSupport<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
    <span class="br0">&#125;</span><br />
<br />
    <span class="kw2">public</span> ArrowKeyNavigationSupport<span class="br0">&#40;</span><span class="kw2">Class</span><span class="br0">&#91;</span><span class="br0">&#93;</span> componentTypes<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
        _componentTypes = componentTypes;<br />
    <span class="br0">&#125;</span><br />
<br />
    <span class="kw2">public</span> ArrowKeyNavigationSupport<span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> keyCodes<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
        _keyCode = keyCodes;<br />
    <span class="br0">&#125;</span><br />
<br />
    <span class="kw2">public</span> ArrowKeyNavigationSupport<span class="br0">&#40;</span><span class="kw2">Class</span><span class="br0">&#91;</span><span class="br0">&#93;</span> componentTypes, <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> keyCode<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
        _keyCode = keyCode;<br />
        _componentTypes = componentTypes;<br />
    <span class="br0">&#125;</span><br />
<br />
    <span class="coMULTI">/**<br />
     * Installs the actions for arrow keys to allow user to nagivate components using arrow keys.<br />
     *<br />
     * @param container the container such as ButtonPanel, JPanel etc.<br />
     */</span><br />
    <span class="kw2">public</span> <span class="kw4">void</span> install<span class="br0">&#40;</span><span class="kw3">JComponent</span> container<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
        <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> keyCode : _keyCode<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
            <span class="kw3">InputMap</span> inputMap = container.<span class="me1">getInputMap</span><span class="br0">&#40;</span><span class="kw3">JComponent</span>.<span class="me1">WHEN_ANCESTOR_OF_FOCUSED_COMPONENT</span><span class="br0">&#41;</span>;<br />
            <span class="kw3">KeyStroke</span> keyStroke = <span class="kw3">KeyStroke</span>.<span class="me1">getKeyStroke</span><span class="br0">&#40;</span>keyCode, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
            <span class="kw3">Object</span> actionName = inputMap.<span class="me1">get</span><span class="br0">&#40;</span>keyStroke<span class="br0">&#41;</span>;<br />
            <span class="kw1">if</span> <span class="br0">&#40;</span>actionName != <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                container.<span class="me1">putClientProperty</span><span class="br0">&#40;</span>CLIENT_PROPERTY_ARROWKEY_NAVIGATION_SUPPORT, actionName<span class="br0">&#41;</span>;<br />
            <span class="br0">&#125;</span><br />
            container.<span class="me1">registerKeyboardAction</span><span class="br0">&#40;</span><span class="kw2">new</span> NavigationAction<span class="br0">&#40;</span>container, keyCode<span class="br0">&#41;</span>, <span class="st0">&quot;ArrowKeyNavigation &quot;</span> + keyCode, keyStroke, <span class="kw3">JComponent</span>.<span class="me1">WHEN_ANCESTOR_OF_FOCUSED_COMPONENT</span><span class="br0">&#41;</span>;<br />
        <span class="br0">&#125;</span><br />
    <span class="br0">&#125;</span><br />
<br />
    <span class="coMULTI">/**<br />
     * Uninstalls the actions for arrow keys.<br />
     *<br />
     * @param container the container such as ButtonPanel, JPanel etc.<br />
     */</span><br />
    <span class="kw2">public</span> <span class="kw4">void</span> uninstall<span class="br0">&#40;</span><span class="kw3">JComponent</span> container<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
        <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> keyCode : _keyCode<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
            <span class="kw3">Object</span> actionName = container.<span class="me1">getClientProperty</span><span class="br0">&#40;</span>CLIENT_PROPERTY_ARROWKEY_NAVIGATION_SUPPORT<span class="br0">&#41;</span>;<br />
            <span class="kw1">if</span> <span class="br0">&#40;</span>actionName != <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                <span class="kw3">InputMap</span> inputMap = container.<span class="me1">getInputMap</span><span class="br0">&#40;</span><span class="kw3">JComponent</span>.<span class="me1">WHEN_ANCESTOR_OF_FOCUSED_COMPONENT</span><span class="br0">&#41;</span>;<br />
                <span class="kw3">KeyStroke</span> keyStroke = <span class="kw3">KeyStroke</span>.<span class="me1">getKeyStroke</span><span class="br0">&#40;</span>keyCode, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
                inputMap.<span class="me1">put</span><span class="br0">&#40;</span>keyStroke, actionName<span class="br0">&#41;</span>;<br />
            <span class="br0">&#125;</span><br />
            <span class="kw1">else</span> <span class="br0">&#123;</span><br />
                container.<span class="me1">unregisterKeyboardAction</span><span class="br0">&#40;</span><span class="kw3">KeyStroke</span>.<span class="me1">getKeyStroke</span><span class="br0">&#40;</span>keyCode, <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
            <span class="br0">&#125;</span><br />
        <span class="br0">&#125;</span><br />
    <span class="br0">&#125;</span><br />
<br />
    <span class="kw2">private</span> <span class="kw2">class</span> NavigationAction <span class="kw2">implements</span> <span class="kw3">ActionListener</span> <span class="br0">&#123;</span><br />
        <span class="kw2">private</span> <span class="kw3">JComponent</span> _parent;<br />
        <span class="kw2">private</span> <span class="kw4">int</span> _keyCode;<br />
<br />
        <span class="kw2">public</span> NavigationAction<span class="br0">&#40;</span><span class="kw3">JComponent</span> c, <span class="kw4">int</span> key<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
            _parent = c;<br />
            _keyCode = key;<br />
        <span class="br0">&#125;</span><br />
<br />
        <span class="kw2">public</span> <span class="kw4">void</span> actionPerformed<span class="br0">&#40;</span><span class="kw3">ActionEvent</span> e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
            <span class="kw2">final</span> List&amp;lt;Rectangle&amp;gt; rects = <span class="kw2">new</span> <span class="kw3">ArrayList</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
            <span class="kw2">final</span> List&amp;lt;Component&amp;gt; components = <span class="kw2">new</span> <span class="kw3">ArrayList</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
            JideSwingUtilities.<span class="me1">setRecursively</span><span class="br0">&#40;</span>_parent, <span class="kw2">new</span> JideSwingUtilities.<span class="me1">Handler</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                <span class="kw2">public</span> <span class="kw4">void</span> postAction<span class="br0">&#40;</span><span class="kw3">Component</span> c<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                <span class="br0">&#125;</span><br />
<br />
                <span class="kw2">public</span> <span class="kw4">void</span> action<span class="br0">&#40;</span><span class="kw3">Component</span> c<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                    <span class="kw1">if</span> <span class="br0">&#40;</span>_componentTypes != <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                        <span class="kw4">boolean</span> allowed = <span class="kw2">false</span>;<br />
                        <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">Class</span> allowedType : _componentTypes<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                            <span class="kw1">if</span> <span class="br0">&#40;</span>allowedType.<span class="me1">isAssignableFrom</span><span class="br0">&#40;</span>c.<span class="me1">getClass</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                                allowed = <span class="kw2">true</span>;<br />
                                <span class="kw2">break</span>;<br />
                            <span class="br0">&#125;</span><br />
                        <span class="br0">&#125;</span><br />
                        <span class="kw1">if</span> <span class="br0">&#40;</span>!allowed<span class="br0">&#41;</span> <span class="kw2">return</span>;<br />
                    <span class="br0">&#125;</span><br />
                    <span class="kw3">Rectangle</span> bounds = c.<span class="me1">getBounds</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
                    rects.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw3">SwingUtilities</span>.<span class="me1">convertRectangle</span><span class="br0">&#40;</span>c, bounds, _parent<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
                    components.<span class="me1">add</span><span class="br0">&#40;</span>c<span class="br0">&#41;</span>;<br />
                <span class="br0">&#125;</span><br />
<br />
                <span class="kw2">public</span> <span class="kw4">boolean</span> condition<span class="br0">&#40;</span><span class="kw3">Component</span> c<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                    <span class="kw2">return</span> <span class="br0">&#40;</span>c.<span class="me1">isVisible</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; c.<span class="me1">isDisplayable</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; c.<span class="me1">isFocusable</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; c.<span class="me1">isEnabled</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
                <span class="br0">&#125;</span><br />
            <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
            <span class="kw3">Component</span> owner = KeyboardFocusManager.<span class="me1">getCurrentKeyboardFocusManager</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getFocusOwner</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
            <span class="kw3">Component</span> c = <span class="kw2">null</span>;<br />
            <span class="kw1">switch</span> <span class="br0">&#40;</span>_keyCode<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                <span class="kw1">case</span> <span class="kw3">KeyEvent</span>.<span class="me1">VK_RIGHT</span>:<br />
                    c = findComponentToRight<span class="br0">&#40;</span>owner, rects, components<span class="br0">&#41;</span>;<br />
                    <span class="kw2">break</span>;<br />
                <span class="kw1">case</span> <span class="kw3">KeyEvent</span>.<span class="me1">VK_LEFT</span>:<br />
                    c = findComponentToLeft<span class="br0">&#40;</span>owner, rects, components<span class="br0">&#41;</span>;<br />
                    <span class="kw2">break</span>;<br />
                <span class="kw1">case</span> <span class="kw3">KeyEvent</span>.<span class="me1">VK_UP</span>:<br />
                    c = findComponentToAbove<span class="br0">&#40;</span>owner, rects, components<span class="br0">&#41;</span>;<br />
                    <span class="kw2">break</span>;<br />
                <span class="kw1">case</span> <span class="kw3">KeyEvent</span>.<span class="me1">VK_DOWN</span>:<br />
                    c = findComponentToBelow<span class="br0">&#40;</span>owner, rects, components<span class="br0">&#41;</span>;<br />
                    <span class="kw2">break</span>;<br />
            <span class="br0">&#125;</span><br />
            <span class="kw1">if</span> <span class="br0">&#40;</span>c != <span class="kw2">null</span><span class="br0">&#41;</span> c.<span class="me1">requestFocusInWindow</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
        <span class="br0">&#125;</span><br />
<br />
        <span class="kw2">private</span> <span class="kw3">Component</span> findComponentToRight<span class="br0">&#40;</span><span class="kw3">Component</span> c, List&amp;lt;Rectangle&amp;gt; rects, List&amp;lt;Component&amp;gt; components<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
            <span class="kw4">int</span> max = <span class="kw3">Integer</span>.<span class="me1">MAX_VALUE</span>;<br />
            <span class="kw3">Component</span> found = <span class="kw2">null</span>;<br />
            <span class="kw3">Rectangle</span> src = <span class="kw3">SwingUtilities</span>.<span class="me1">convertRectangle</span><span class="br0">&#40;</span>c, c.<span class="me1">getBounds</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, _parent<span class="br0">&#41;</span>;<br />
            <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i = <span class="nu0">0</span>; i &amp;lt; rects.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                <span class="kw3">Rectangle</span> dst = rects.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>;<br />
                <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">x</span> &amp;lt;= src.<span class="me1">x</span> + src.<span class="me1">width</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// not on the left</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
                <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">y</span> + dst.<span class="me1">height</span> &amp;lt; src.<span class="me1">y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// on top</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
                <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">y</span> &amp;gt; src.<span class="me1">y</span> + src.<span class="me1">height</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// on bottom</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
<br />
                <span class="kw4">int</span> dist = dst.<span class="me1">x</span> - src.<span class="me1">x</span> - src.<span class="me1">width</span>;<br />
                <span class="kw1">if</span> <span class="br0">&#40;</span>dist &amp;lt; max<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                    max = dist;<br />
                    found = components.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>;<br />
                <span class="br0">&#125;</span><br />
            <span class="br0">&#125;</span><br />
<br />
            <span class="kw2">return</span> found;<br />
        <span class="br0">&#125;</span><br />
<br />
        <span class="kw2">private</span> <span class="kw3">Component</span> findComponentToBelow<span class="br0">&#40;</span><span class="kw3">Component</span> c, List&amp;lt;Rectangle&amp;gt; rects, List&amp;lt;Component&amp;gt; components<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
            <span class="kw4">int</span> max = <span class="kw3">Integer</span>.<span class="me1">MAX_VALUE</span>;<br />
            <span class="kw3">Component</span> found = <span class="kw2">null</span>;<br />
            <span class="kw3">Rectangle</span> src = <span class="kw3">SwingUtilities</span>.<span class="me1">convertRectangle</span><span class="br0">&#40;</span>c, c.<span class="me1">getBounds</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, _parent<span class="br0">&#41;</span>;<br />
            <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i = <span class="nu0">0</span>; i &amp;lt; rects.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                <span class="kw3">Rectangle</span> dst = rects.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>;<br />
                <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">y</span> &amp;lt;= src.<span class="me1">y</span> + src.<span class="me1">height</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// not on the left</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
                <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">x</span> + dst.<span class="me1">width</span> &amp;lt; src.<span class="me1">x</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// on top</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
                <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">x</span> &amp;gt; src.<span class="me1">x</span> + src.<span class="me1">width</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// on bottom</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
<br />
                <span class="kw4">int</span> dist = dst.<span class="me1">y</span> - src.<span class="me1">y</span> - src.<span class="me1">height</span>;<br />
                <span class="kw1">if</span> <span class="br0">&#40;</span>dist &amp;lt; max<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                    max = dist;<br />
                    found = components.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>;<br />
                <span class="br0">&#125;</span><br />
            <span class="br0">&#125;</span><br />
<br />
            <span class="kw2">return</span> found;<br />
        <span class="br0">&#125;</span><br />
<br />
        <span class="kw2">private</span> <span class="kw3">Component</span> findComponentToLeft<span class="br0">&#40;</span><span class="kw3">Component</span> c, List&amp;lt;Rectangle&amp;gt; rects, List&amp;lt;Component&amp;gt; components<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
            <span class="kw4">int</span> max = <span class="kw3">Integer</span>.<span class="me1">MAX_VALUE</span>;<br />
            <span class="kw3">Component</span> found = <span class="kw2">null</span>;<br />
            <span class="kw3">Rectangle</span> src = <span class="kw3">SwingUtilities</span>.<span class="me1">convertRectangle</span><span class="br0">&#40;</span>c, c.<span class="me1">getBounds</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, _parent<span class="br0">&#41;</span>;<br />
            <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i = <span class="nu0">0</span>; i &amp;lt; rects.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                <span class="kw3">Rectangle</span> dst = rects.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>;<br />
                <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">x</span> + dst.<span class="me1">width</span> &amp;gt;= src.<span class="me1">x</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// not on the right</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
                <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">y</span> + dst.<span class="me1">height</span> &amp;lt; src.<span class="me1">y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// on top</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
                <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">y</span> &amp;gt; src.<span class="me1">y</span> + src.<span class="me1">height</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// on bottom</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
<br />
                <span class="kw4">int</span> dist = src.<span class="me1">x</span> - dst.<span class="me1">x</span> - dst.<span class="me1">width</span>;<br />
                <span class="kw1">if</span> <span class="br0">&#40;</span>dist &amp;lt; max<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                    max = dist;<br />
                    found = components.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>;<br />
                <span class="br0">&#125;</span><br />
            <span class="br0">&#125;</span><br />
<br />
            <span class="kw2">return</span> found;<br />
        <span class="br0">&#125;</span><br />
<br />
        <span class="kw2">private</span> <span class="kw3">Component</span> findComponentToAbove<span class="br0">&#40;</span><span class="kw3">Component</span> c, List&amp;lt;Rectangle&amp;gt; rects, List&amp;lt;Component&amp;gt; components<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
            <span class="kw4">int</span> max = <span class="kw3">Integer</span>.<span class="me1">MAX_VALUE</span>;<br />
            <span class="kw3">Component</span> found = <span class="kw2">null</span>;<br />
            <span class="kw3">Rectangle</span> src = <span class="kw3">SwingUtilities</span>.<span class="me1">convertRectangle</span><span class="br0">&#40;</span>c, c.<span class="me1">getBounds</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, _parent<span class="br0">&#41;</span>;<br />
            <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i = <span class="nu0">0</span>; i &amp;lt; rects.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                <span class="kw3">Rectangle</span> dst = rects.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>;<br />
                <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">y</span> + dst.<span class="me1">height</span> &amp;gt;= src.<span class="me1">y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// not on the above</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
                <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">x</span> + dst.<span class="me1">width</span> &amp;lt; src.<span class="me1">x</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// on left</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
                <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>dst.<span class="me1">x</span> &amp;gt; src.<span class="me1">x</span> + src.<span class="me1">width</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// on right</span><br />
                    <span class="kw2">continue</span>;<br />
                <span class="br0">&#125;</span><br />
<br />
                <span class="kw4">int</span> dist = src.<span class="me1">y</span> - dst.<span class="me1">y</span> - dst.<span class="me1">height</span>;<br />
                <span class="kw1">if</span> <span class="br0">&#40;</span>dist &amp;lt; max<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
                    max = dist;<br />
                    found = components.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>;<br />
                <span class="br0">&#125;</span><br />
            <span class="br0">&#125;</span><br />
<br />
            <span class="kw2">return</span> found;<br />
        <span class="br0">&#125;</span><br />
<br />
    <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.jidesoft.com/blog/2008/06/22/arrow-key-support-in-buttonpanel/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Support Synthetica L&#038;F in JIDE</title>
		<link>http://www.jidesoft.com/blog/2008/06/17/support-synthetica-lf-in-jide/</link>
		<comments>http://www.jidesoft.com/blog/2008/06/17/support-synthetica-lf-in-jide/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 17:29:02 +0000</pubDate>
		<dc:creator>David Qiao</dc:creator>
		
		<category><![CDATA[JIDE]]></category>

		<category><![CDATA[lookandfeel]]></category>

		<category><![CDATA[synthetica]]></category>

		<category><![CDATA[themes]]></category>

		<guid isPermaLink="false">http://www.jidesoft.com/blog/?p=40</guid>
		<description><![CDATA[I had been working closely with Wolfgang in last couple of months or so trying to support Synthetica L&#38;F in all JIDE product lines. I am glad to say we are finally there. You can find some nice screenshots of our demos under various Synthetica themes below. They are all taken under JIDE 2.2.8 release [...]]]></description>
			<content:encoded><![CDATA[<p>I had been working closely with Wolfgang in last couple of months or so trying to support Synthetica L&amp;F in all JIDE product lines. I am glad to say we are finally there. You can find some nice screenshots of our demos under various Synthetica themes below. They are all taken under JIDE 2.2.8 release with Synthetica 2.7.2/SyntheticaAddons 0.9.7.</p>
<ul>
<li><a href="/images/synthetica-blackmoon.png">Black Moon Theme</a></li>
<li><a href="/images/synthetica-blackstar.png">Black Start Theme</a></li>
<li><a href="/images/synthetica-blueice.png">Blue Ice Theme</a></li>
<li><a href="/images/synthetica-bluemoon.png">Blue Moon Theme</a></li>
<li><a href="/images/synthetica-bluesteel.png">Blue Steel Theme</a></li>
<li><a href="/images/synthetica-greendream.png">Green Dream Theme</a></li>
<li><a href="/images/synthetica-mauvemetalic.png">Mauve Mmetalic Theme</a></li>
<li><a href="/images/synthetica-orangemetalic.png">Orange Mmetalic Theme</a></li>
<li><a href="/images/synthetica-silvermoon.png">Silver Moon Theme</a></li>
<li><a href="/images/synthetica-skymetal.png">Sky Metal Theme</a></li>
<li><a href="/images/synthetica-whitevision.png">White Vision Theme</a></li>
<li><a href="/images/synthetica-standard.png">Standard Theme</a></li>
</ul>
<p>Wolfgang, thanks for the support. The Synthetica L&amp;F looks awesome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jidesoft.com/blog/2008/06/17/support-synthetica-lf-in-jide/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Slides and demo source code for my JavaOne 2008 BOF session</title>
		<link>http://www.jidesoft.com/blog/2008/06/06/slides-and-demo-source-code-for-my-javaone-2008-bof-session/</link>
		<comments>http://www.jidesoft.com/blog/2008/06/06/slides-and-demo-source-code-for-my-javaone-2008-bof-session/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 05:52:25 +0000</pubDate>
		<dc:creator>David Qiao</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<category><![CDATA[Java and Swing]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jidesoft.com/blog/?p=37</guid>
		<description><![CDATA[As I mentioned before, I had an interesting BOF session for the this year JavaOne. The title is &#8220;Workaround Swing Bugs&#8221;. Even though it was conflicted with the afterdark party, there was still a decent number of people showed up. Since several people asked for it, I post the slides and the demo source code below.
Slides for [...]]]></description>
			<content:encoded><![CDATA[<p>As I mentioned before, I had an interesting BOF session for the this year JavaOne. The title is &#8220;Workaround Swing Bugs&#8221;. Even though it was conflicted with the afterdark party, there was still a decent number of people showed up. Since several people asked for it, I post the slides and the demo source code below.</p>
<p><a href="http://www.jidesoft.com/blog/wp-content/uploads/2008/06/bof-5133.pdf">Slides for BOF-5133</a><br />
<a href="http://www.jidesoft.com/blog/wp-content/uploads/2008/06/bof-5133-demo.zip">Demo Souce Code for BOF-5133</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jidesoft.com/blog/2008/06/06/slides-and-demo-source-code-for-my-javaone-2008-bof-session/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Discussions on Swing, RIA and JavaFX</title>
		<link>http://www.jidesoft.com/blog/2008/05/24/discussions-on-swing-ria-and-javafx/</link>
		<comments>http://www.jidesoft.com/blog/2008/05/24/discussions-on-swing-ria-and-javafx/#comments</comments>
		<pubDate>Sat, 24 May 2008 00:05:02 +0000</pubDate>
		<dc:creator>David Qiao</dc:creator>
		
		<category><![CDATA[JIDE]]></category>

		<category><![CDATA[Java and Swing]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jidesoft.com/blog/2008/05/24/discussions-on-swing-ria-and-javafx/</guid>
		<description><![CDATA[Kirill just posted an interview with me on his blog on Swing, RIA and JavaFX. It is a series of interviews with Amy Fowler, Mikael Grev and myself. I guess Kirill probably will have more interviews after the first three. Interesting discussions.
]]></description>
			<content:encoded><![CDATA[<p>Kirill just posted <a href="http://www.pushing-pixels.org/?p=316">an interview</a> with me on his blog on Swing, RIA and JavaFX. It is a series of interviews with Amy Fowler, Mikael Grev and myself. I guess Kirill probably will have more interviews after the first three. Interesting discussions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jidesoft.com/blog/2008/05/24/discussions-on-swing-ria-and-javafx/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JWebPane</title>
		<link>http://www.jidesoft.com/blog/2008/05/08/jwebpane/</link>
		<comments>http://www.jidesoft.com/blog/2008/05/08/jwebpane/#comments</comments>
		<pubDate>Thu, 08 May 2008 16:02:46 +0000</pubDate>
		<dc:creator>David Qiao</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<category><![CDATA[Java and Swing]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jidesoft.com/blog/2008/05/08/jwebpane/</guid>
		<description><![CDATA[This is something Java/Swing community has been crying for years. We even received numerous requests to make such a component (and we declined all requests). That&#8217;s a lightweighted Swing component for html viewing (or editing). JDIC gave us some hope several years ago even though it is JNI based but that&#8217;s project went nowhere. There [...]]]></description>
			<content:encoded><![CDATA[<p>This is something Java/Swing community has been crying for years. We even received numerous requests to make such a component (and we declined all requests). That&#8217;s a lightweighted Swing component for html viewing (or editing). JDIC gave us some hope several years ago even though it is JNI based but that&#8217;s project went nowhere. There was no indication that Sun is working on it, until the first day of JavaOne when a JWebPane component was announced. Surprise! The demo looked pretty good. It is just there is no demo for public to play with at the moment. I am certainly eager to give it a try when it is avaialble in June or July.</p>
<p>For those whose are interested in it, the author just posted a blog on it.<br />
<a href="http://weblogs.java.net/blog/ixmal/archive/2008/05/introducing_jwe.html">http://weblogs.java.net/blog/ixmal/archive/2008/05/introducing_jwe.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jidesoft.com/blog/2008/05/08/jwebpane/feed/</wfw:commentRss>
		</item>
		<item>
		<title>See You at JavaOne 2008</title>
		<link>http://www.jidesoft.com/blog/2008/05/05/see-you-at-javaone-2008/</link>
		<comments>http://www.jidesoft.com/blog/2008/05/05/see-you-at-javaone-2008/#comments</comments>
		<pubDate>Mon, 05 May 2008 18:31:48 +0000</pubDate>
		<dc:creator>David Qiao</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://www.jidesoft.com/blog/2008/05/05/see-you-at-javaone-2008/</guid>
		<description><![CDATA[It is JavaOne time again this week. Even though I talked with many of you in emails or over the phone but never met in person. If you will be in San Francisco for this year JavaOne, let&#8217;s see if we can meet! I will have a BOF-5133 on Thursday night from 8:30 to 9:20 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: 10pt; font-family: 'Verdana','sans-serif'">It is JavaOne time again this week. Even though I talked with many of you in emails or over the phone but never met in person. If you will be in San Francisco for this year JavaOne, let&#8217;s see if we can meet! I will have a BOF-5133 on Thursday night from 8:30 to 9:20 PM at Hall E 135. The topic for the BOF &#8220;Workaround Swing Bugs&#8221;, which is coincidentally something we are doing all the time. So please come and join me during that time. If you want to schedule another time to meet, you can email me at david at jidesoft.com </span><span style="font-size: 10pt; font-family: 'Verdana','sans-serif'">and suggest a time. I will check email and will be in Moscone Center most of the time during the day.</span><span style="font-size: 8.5pt; font-family: 'Verdana','sans-serif'"><o:p></o:p></span><span style="font-size: 8.5pt; font-family: 'Verdana','sans-serif'"><o:p> </o:p></span><span style="font-size: 8.5pt; font-family: 'Verdana','sans-serif'"><o:p></o:p></span><span style="font-size: 10pt; font-family: 'Verdana','sans-serif'">Enjoy and Have Fun at JavaOne!</span><span style="font-size: 8.5pt; font-family: 'Verdana','sans-serif'"><o:p></o:p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jidesoft.com/blog/2008/05/05/see-you-at-javaone-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JDAF 2.0 official release</title>
		<link>http://www.jidesoft.com/blog/2008/04/15/jdaf-20-official-release/</link>
		<comments>http://www.jidesoft.com/blog/2008/04/15/jdaf-20-official-release/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 13:35:00 +0000</pubDate>
		<dc:creator>David Qiao</dc:creator>
		
		<category><![CDATA[JIDE]]></category>

		<category><![CDATA[Java and Swing]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jidesoft.com/blog/2008/04/15/jdaf-20-official-release/</guid>
		<description><![CDATA[After nine month beta period, we finally release JIDE Desktop Application Framework officially. Comparing to other JIDE component products, JDAF is a whole different story. It is a ground-breaking platform for developing truly cross-platform desktop applications in Java and Swing. There are many concepts in JDAF that are the first of its kind, such as [...]]]></description>
			<content:encoded><![CDATA[<p>After nine month beta period, we finally release JIDE Desktop Application Framework officially. Comparing to other JIDE component products, JDAF is a whole different story. It is a ground-breaking platform for developing truly cross-platform desktop applications in Java and Swing. There are many concepts in JDAF that are the first of its kind, such as Managed UI, OS-guideline driven Application UI, built-in MVC and FileFormat etc. It also provides easy integration with JIDE Docking/Action Framework and DocumentPane. I encourage to check out the <a href="http://www.jidesoft.com/jdaf/index.htm">JDAF product</a> page or the self-guided <a href="http://www.jidesoft.com/jdaf/tutorial.htm">JDAF tutorial</a> to learn more about JDAF and find out how it can make your application development easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jidesoft.com/blog/2008/04/15/jdaf-20-official-release/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JIDE Icon Set – beautiful icons for your Java/Swing applications</title>
		<link>http://www.jidesoft.com/blog/2008/03/20/jide-icon-set-%e2%80%93-beautiful-icons-for-your-javaswing-applications/</link>
		<comments>http://www.jidesoft.com/blog/2008/03/20/jide-icon-set-%e2%80%93-beautiful-icons-for-your-javaswing-applications/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 05:45:05 +0000</pubDate>
		<dc:creator>David Qiao</dc:creator>
		
		<category><![CDATA[JIDE]]></category>

		<guid isPermaLink="false">http://www.jidesoft.com/blog/2008/03/20/jide-icon-set-%e2%80%93-beautiful-icons-for-your-javaswing-applications/</guid>
		<description><![CDATA[Here is the exciting news for all developers who hate being forced to design icons (I said it for myself :). As JIDE is focused on UI design area, we think it would be nice if we can create some icons for our customers who are Java/Swing developers. Developers are not good at designing icons but [...]]]></description>
			<content:encoded><![CDATA[<p>Here is the exciting news for all developers who hate being forced to design icons (I said it for myself :). As JIDE is focused on UI design area, we think it would be nice if we can create some icons for our customers who are Java/Swing developers. Developers are not good at designing icons but icon is a very important part to any user interface. You can&#8217;t just ignore it. So after several months of hardwork, we finally release our first <a target="_blank" href="http://www.jidesoft.com/icon/preview.htm">stock icon set</a> with 141 professionally designed icons. This icon set is built by our graphic designer along with our developers for JIDE component products. By combining both the artistic talent and the logical thinking talent together, this icon set is designed with developer in mind which makes it extremely easy to use in any software applications, especially for Java/Swing applications which all our existing JIDE customers and users are building. It even comes with a jar file that you can put into your class path and start to use those beautiful icons right away. Anyway, you can find more information about the developer oriented features over <a target="_blank" href="http://www.jidesoft.com/icon/index.html">here</a>. Even though it is not free, the price for this icon set is at a very affordable $149.99 for the Java version which is roughly $1 per icon. At the same time, we also introduced <a target="_blank" href="http://www.jidesoft.com/icon/design.htm">custom icon design services </a>to meet your need. If you dream to have a consistent user interface with a set of unique icons across all applications in your company, we are right here to help you.</p>
<p><a href="http://www.jidesoft.com/blog/wp-content/uploads/2008/03/file-new.png" title="file-new.png"></a><img src="http://www.jidesoft.com/blog/wp-content/uploads/2008/03/file-new.png" alt="file-new.png" /><img src="http://www.jidesoft.com/blog/wp-content/uploads/2008/03/file-save.png" alt="file-save.png" /><img src="http://www.jidesoft.com/blog/wp-content/uploads/2008/03/file-print.png" alt="file-print.png" /><img src="http://www.jidesoft.com/blog/wp-content/uploads/2008/03/file-property.png" alt="file-property.png" /><img src="http://www.jidesoft.com/blog/wp-content/uploads/2008/03/hardware-clock.png" alt="hardware-clock.png" /></p>
<p>Here are a few links related to this icon set.</p>
<ul>
<li>Icon Service Overview: <a href="http://www.jidesoft.com/icon/index.html">http://www.jidesoft.com/icon/index.html</a></li>
<li>Icon Preview: <a href="http://www.jidesoft.com/icon/preview.htm">http://www.jidesoft.com/icon/preview.htm</a></li>
<li>Custom Icon Design: <a href="http://www.jidesoft.com/icon/design.htm">http://www.jidesoft.com/icon/design.htm</a></li>
<li>Icon Set Purchase: <a href="http://www.jidesoft.com/store/index.php?cPath=33">http://www.jidesoft.com/store/index.php?cPath=33</a></li>
</ul>
<p>Hope you will like those icons. If you have any suggestions, please feel free to let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jidesoft.com/blog/2008/03/20/jide-icon-set-%e2%80%93-beautiful-icons-for-your-javaswing-applications/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Auto-fit visible rows only</title>
		<link>http://www.jidesoft.com/blog/2008/03/08/26/</link>
		<comments>http://www.jidesoft.com/blog/2008/03/08/26/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 01:35:38 +0000</pubDate>
		<dc:creator>David Qiao</dc:creator>
		
		<category><![CDATA[JIDE]]></category>

		<category><![CDATA[Java and Swing]]></category>

		<guid isPermaLink="false">http://www.jidesoft.com/blog/2008/03/08/26/</guid>
		<description><![CDATA[I don&#8217;t like Vista as it is apparently slower than XP. However I discovered something nice about it. Today, I was doing a build on Vista and I double clicked on Explorer table header to auto-fit a column, I noticed it didn&#8217;t fully expanded as I knew there is a long file name in this [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t like Vista as it is apparently slower than XP. However I discovered something nice about it. Today, I was doing a build on Vista and I double clicked on Explorer table header to auto-fit a column, I noticed it didn&#8217;t fully expanded as I knew there is a long file name in this folder. Bug? I soon realized it only auto-fits the cells that are currently visible. I have to say this is a great idea as user only cares about what they can see when they auto-fit. I verified on Windows XP, it doesn&#8217;t work like that so it is obviously a new feature Vista introduced.</p>
<p>TableUtils class in JIDE Grids has autoResizeAllColumns and autoResizeColumn method which will auto-fit the columns in a JTable. If JideTable#setColumnAutoResizable(true), user can double click on the table column header between two columns to auto-fit the column, just like what Excel and Explorer (pre-Vista) does. It worked greatly. However when there are a huge number of rows in that table, or the getValueAt method of the table model is very slow, the cell renderer is slow to create, it could take a long time. User reported this issue on PivotTablePane as the autoResizeAllColumns method is slow on huge pivot table. I&#8217;ve been spent time to tune it but still not satisfied with it. But this new discovery on Vista gives me the hope. I quickly changed the code and added an extra parameter &#8220;visibleRowsOnly&#8221; to TableUtils#autoResizeColumn(&#8230;). The performance is excellent (of course, as there are only 20 visible rows when I tested on a table with 10000 rows) as it took less than 1 ms comparing to ~200 ms before. So if you are using this feature in JIDE Grids, you can consider using this new feature if it makes more sense to auto-fit the visible rows only in your application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jidesoft.com/blog/2008/03/08/26/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
