<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Suraj&#039;s blog &#187; Java</title>
	<atom:link href="http://www.surajshrestha.com.np/category/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.surajshrestha.com.np</link>
	<description>imagination more important than knowledge</description>
	<lastBuildDate>Sun, 08 Aug 2010 23:20:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Configure Eclipse to show Content help (intellisense) in Java</title>
		<link>http://www.surajshrestha.com.np/java/configure-eclipse-to-show-content-help-intellisense-in-java.html</link>
		<comments>http://www.surajshrestha.com.np/java/configure-eclipse-to-show-content-help-intellisense-in-java.html#comments</comments>
		<pubDate>Fri, 26 Jun 2009 13:34:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Content Assist]]></category>
		<category><![CDATA[Eclipse]]></category>

		<guid isPermaLink="false">http://www.surajshrestha.com.np/?p=202</guid>
		<description><![CDATA[If you are running Eclipse for first time for Java, you may not get content assitant help while pressing Ctrl+Space saying &#8220;No Default Proposals&#8221;. To get Content Assist Help (like Intellisense in Microsoft Visual Studio), you have to configure it at first.
In Eclipse IDE, go to Windows -&#62; Preferences. A new window opens.
In left pane, [...]]]></description>
			<content:encoded><![CDATA[<p>If you are running Eclipse for first time for Java, you may not get content assitant help while pressing Ctrl+Space saying &#8220;No Default Proposals&#8221;. To get Content Assist Help (like Intellisense in Microsoft Visual Studio), you have to configure it at first.</p>
<p>In Eclipse IDE, go to Windows -&gt; Preferences. A new window opens.</p>
<p>In left pane, click Java -&gt; Editor -&gt; Content Assit -&gt; Advanced.</p>
<p>Now, in right pane top box, you can select Proposals to be shown in Default Proposal of Content Assist.</p>
<p>Finally, Click Ok to save the configuration and you are done.</p>
<p><img class="aligncenter" title="Content Assist Configuration in Eclipse" src="http://farm4.static.flickr.com/3379/3662786718_37e9c82f5b.jpg?v=0" alt="" width="480" height="500" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.surajshrestha.com.np/java/configure-eclipse-to-show-content-help-intellisense-in-java.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Parallel Rank sort using Java Thread</title>
		<link>http://www.surajshrestha.com.np/java/parallel-rank-sort-using-java-thread.html</link>
		<comments>http://www.surajshrestha.com.np/java/parallel-rank-sort-using-java-thread.html#comments</comments>
		<pubDate>Wed, 24 Jun 2009 21:32:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Thread]]></category>
		<category><![CDATA[Parallel Rank Sort]]></category>
		<category><![CDATA[Rank Sort]]></category>

		<guid isPermaLink="false">http://www.surajshrestha.com.np/?p=194</guid>
		<description><![CDATA[In this post, I have included code that uses Java Threads to calculate ranks of numbers in list[] array and put then in respective position (determined by rank) in finallist[] array. It is a relaxed algorithm as none of the threads created interact with each other.
import java.util.Random; /* library file to generate random number */
public [...]]]></description>
			<content:encoded><![CDATA[<p>In this post, I have included code that uses Java Threads to calculate ranks of numbers in list[] array and put then in respective position (determined by rank) in finallist[] array. It is a relaxed algorithm as none of the threads created interact with each other.</p>
<p><strong>import</strong> java.util.Random; /* library file to generate random number */</p>
<p><strong>public</strong> <strong>class</strong> ParallelRankSort {</p>
<p>      <strong>int</strong>[] list = <strong>new</strong> <strong>int</strong>[10]; </p>
<p>      <strong>int</strong> finallist[] = <strong>new</strong> <strong>int</strong>[10];</p>
<p>      <strong>final</strong> <strong>int</strong> n = 10;     </p>
<p>      <strong>public</strong> <strong>void</strong> initialize(){</p>
<p>            Random r = <strong>new</strong> Random(10);           </p>
<p>            <strong>for</strong>(<strong>int</strong> i=0; i&lt;n; i++){</p>
<p>                  list[n-1-i] =r.nextInt(50);</p>
<p>            }          </p>
<p>      }</p>
<p>      <strong>public</strong> <strong>void</strong> runThreads(){</p>
<p>            Thread t[] = <strong>new</strong> Thread[n];       </p>
<p>            <strong>for</strong>(<strong>int</strong> i=0; i&lt;n; i++){</p>
<p>                  FindRank f = <strong>new</strong> FindRank(list[i],list,finallist);</p>
<p>                  t[i] = <strong>new</strong> Thread(f);</p>
<p>                  t[i].start();</p>
<p>            }</p>
<p>            <strong>for</strong>(<strong>int</strong> i=0; i&lt;n; i++){</p>
<p>                  <strong>try</strong> {</p>
<p>                        t[i].join();</p>
<p>                  } <strong>catch</strong> (InterruptedException e) {                   </p>
<p>                        e.printStackTrace();</p>
<p>                  }</p>
<p>            }</p>
<p> </p>
<p>      }</p>
<p>     </p>
<p>      <strong>public</strong> <strong>void</strong> displayOutput(){</p>
<p>            //initial data</p>
<p>            System.<em>out</em>.println(&#8221;Initial data&#8221;);</p>
<p>            <strong>for</strong>(<strong>int</strong> i=0; i&lt;n; i++){</p>
<p>                  System.<em>out</em>.println(&#8221;list[" + i + "] = &#8221; + list[i]);</p>
<p>            }           </p>
<p>            System.<em>out</em>.println(&#8221;After sorting&#8221;);</p>
<p>            System.<em>out</em>.println(&#8221;");</p>
<p>            <strong>for</strong>(<strong>int</strong> i=0; i&lt;n; i++){</p>
<p>                  System.<em>out</em>.println(&#8221;finalList[" + i + "] = &#8221; + finallist[i]);</p>
<p>            }</p>
<p>      }</p>
<p>      <strong>public</strong> <strong>static</strong> <strong>void</strong> main(String[] args){</p>
<p>            ParallelRankSort p = <strong>new</strong> ParallelRankSort();</p>
<p>            p.initialize();</p>
<p>            p.runThreads();</p>
<p>            p.displayOutput();</p>
<p>      }</p>
<p> </p>
<p>}</p>
<p> //Runnable classes to be run by threads created above</p>
<p><strong>class</strong> FindRank <strong>implements</strong> Runnable{</p>
<p>      <strong>int</strong> data;</p>
<p>      <strong>int</strong> list[];</p>
<p>      <strong>int</strong> finallist[];</p>
<p>      FindRank(<strong>int</strong> data, <strong>int</strong>[] list, <strong>int</strong> finallist[]){</p>
<p>            <strong>this</strong>.data = data;</p>
<p>            <strong>this</strong>.list = list;</p>
<p>            <strong>this</strong>.finallist = finallist;</p>
<p>      }</p>
<p> </p>
<p>      <strong>public</strong> <strong>void</strong> run(){</p>
<p>            <strong>int</strong> count =0 ;</p>
<p>            <strong>for</strong>(<strong>int</strong> i=0; i&lt;list.length; i++){</p>
<p>                  <strong>if</strong>(list[i]&lt;data){</p>
<p>                        count++;</p>
<p>                  }</p>
<p>            }</p>
<p>            finallist[count] = data;</p>
<p>      }</p>
<p>}</p>
<p><strong>The output obtained is shown below.</strong></p>
<div><span style="font-size: x-small;"></span></div>
<p> </p>
<p><span style="font-size: x-small;"></p>
<p align="left">Initial data</p>
<p align="left">list[0] = 14</p>
<p align="left">list[1] = 31</p>
<p align="left">list[2] = 38</p>
<p align="left">list[3] = 47</p>
<p align="left">list[4] = 6</p>
<p align="left">list[5] = 46</p>
<p align="left">list[6] = 40</p>
<p align="left">list[7] = 43</p>
<p align="left">list[8] = 30</p>
<p align="left">list[9] = 13</p>
<p align="left">After sorting</p>
<p align="left"> </p>
<p align="left">finalList[0] = 6</p>
<p align="left">finalList[1] = 13</p>
<p align="left">finalList[2] = 14</p>
<p align="left">finalList[3] = 30</p>
<p align="left">finalList[4] = 31</p>
<p align="left">finalList[5] = 38</p>
<p align="left">finalList[6] = 40</p>
<p align="left">finalList[7] = 43</p>
<p align="left">finalList[8] = 46</p>
<p>finalList[9] = 47</p>
<p> </p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.surajshrestha.com.np/java/parallel-rank-sort-using-java-thread.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selective Iterator demo for Iterator Pattern in Java</title>
		<link>http://www.surajshrestha.com.np/java/selective-iterator-demo-for-iterator-pattern-in-java.html</link>
		<comments>http://www.surajshrestha.com.np/java/selective-iterator-demo-for-iterator-pattern-in-java.html#comments</comments>
		<pubDate>Mon, 13 Apr 2009 05:56:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Iterator]]></category>
		<category><![CDATA[Iterator Pattern]]></category>
		<category><![CDATA[JFrame]]></category>

		<guid isPermaLink="false">http://www.surajshrestha.com.np/?p=140</guid>
		<description><![CDATA[In this post, I am going to show demo of External and Internal Selective Iterator done in Java. Selective Iterator iterates through the collection but leaves the elements which do not meet criteria specified in predicate logic. ]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> <img class="alignleft size-full wp-image-141" title="Selective Iterator Demo" src="http://www.surajshrestha.com.np/wp-content/uploads/2009/04/selective-iterator-demo.jpg" alt="Selective Iterator Demo" width="460" height="310" />  </span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">In my <a title="Reverse Iterator Demo" href="http://www.surajshrestha.com.np/java/reverse-iterator-demo.html" target="_self">earlier post</a>, I have shown demo of External Complete Reverse Iterator for Iterator Pattern.</span></span><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">In this post, I am going to show demo of External and Internal Selective Iterator done in Java. Selective </span></span><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">Iterator iterates through the collection but leaves the elements which do not meet criteria specified in predicate logic. </span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">For this to implement using Iterator pattern, major requirements are : functor interface, concrete functor class, predicate interface, concrete predicate class, customized collection (like Vector, Arraylist), Object class, selective Iterator and main application.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">Functor interface and class are used to implement certain function. The function is included in an object which executes the function based on input parameters. The functor call is like below.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">Functor&lt;Swimmer&gt; functor = </span><strong><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">new</span></strong><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> SwimmerFunctor(</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">JTextArea2</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">);</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">functor.process(swimmer);</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">And its implementation is like below.</span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><strong></strong> <strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">public</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">void</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> process(Swimmer swimmer){<span style="mso-tab-count: 2;">           </span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span></span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">textArea</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">.append(swimmer.getFname()+</span><span style="font-family: &quot;Courier New&quot;; color: #2a00ff; font-size: 10pt; mso-ansi-language: EN-GB;">&#8221; &#8220;</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">+swimmer.getLname()+ </span><span style="font-family: &quot;Courier New&quot;; color: #2a00ff; font-size: 10pt; mso-ansi-language: EN-GB;">&#8221; \n&#8221;</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">);<span style="mso-tab-count: 1;">      </span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 1;">      </span>}</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"> </p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">Using this technique to delegate work to another object is called functor pattern. </span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">Predicate is also a special functor but it always return true or false. In my example, I have used predicate to check whether the age of swimmer is above or equal to 12 or not.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">A selective Iterator uses predicate to check whether to iterate through a particular element or not.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">The iteration loop becomes like this</span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">Functor&lt;Swimmer&gt; functor = </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">new</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> SwimmerFunctor(</span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">JTextArea2</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">);</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">Predicate&lt;Swimmer&gt; pred = </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">new</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> SwimmerPredicate();</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">Iterator&lt;Swimmer&gt; swIterator = </span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">slist</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">.selectiveIterator(pred);</span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: 0.5in; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">while</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">(swIterator.hasNext()){<span style="mso-tab-count: 3;">              </span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span>Swimmer swimmer = swIterator.next();</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span>functor.process(swimmer);</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 1;">      </span>}</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">If iteration is placed inside the collection, then it becomes Internal selective Iteration. If placed outside, it becomes<span style="mso-spacerun: yes;">  </span>External Selective Iteratoration.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">In the demo, I have created Swimmer as object and added 9 swimmers of age 11 and 12 to customized concrete collection of type myList. An external complete built-in iterator is used to populate all the swimmers in first JTextArea of JFrame. The selective external iterator is used to populate swimmers that have age of 12 or greater in the second JTextArea of the JFrame. Also, I have created a method inside myList named doAll(Functor&lt;T&gt; functor, Predicate&lt;T&gt; pred) which does selective iteration inside the myList i.e. Internal Selective Iteration.</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.surajshrestha.com.np/java/selective-iterator-demo-for-iterator-pattern-in-java.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reverse Iterator Demo using Iterator Pattern</title>
		<link>http://www.surajshrestha.com.np/java/reverse-iterator-demo.html</link>
		<comments>http://www.surajshrestha.com.np/java/reverse-iterator-demo.html#comments</comments>
		<pubDate>Sun, 12 Apr 2009 07:16:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Iterator]]></category>
		<category><![CDATA[Iterator Pattern]]></category>
		<category><![CDATA[JFrame]]></category>

		<guid isPermaLink="false">http://www.surajshrestha.com.np/?p=127</guid>
		<description><![CDATA[In this post, I have tried to show a customized Iterator that can be used in Iterator Pattern in Java using JFrame. It is an External Complete Iterator Pattern. This Iterator (IteratorReverse) implements java built-in Iterator and overwrites next(), hasNext() and remove() method.]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">In this post, I have tried to show a customized Iterator that can be used in Iterator Pattern in Java using JFrame. It is an External Complete Iterator Pattern. This Iterator (IteratorReverse) implements java built-in Iterator and overwrites next(), hasNext() and remove() method. I do not concern much about remove() method so, I have left it blank. However, I have modified next() method to return element from the back of the collection that it is iterating. Also, hasNext() checks if final element has reached or not. The complete description goes below. Full source code is available here. <a title="Reverse Iterator Demo Source Code" href="http://qp1d8g.bay.livefilestore.com/y1prY318c2wF25H2bHla0MM-dg6PFMBTNXRqQrwaVHszYnXQj36IOXa1EDWwTp43-iuYy-wWqQ6Uag8RTvjaTzTuIKVRNntc8NS/ReverseIterator.zip?download" target="_self">Download</a></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><img class="alignnone" title="Reverser Iterator Demo" src="http://farm4.static.flickr.com/3369/3434002090_e87e4bfab1.jpg?v=0" alt="" width="460" height="310" /> </p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">First of all, I created a customized collection myList which extends built-in Vector. It has got two methods. </span></span></p>
<p class="MsoListParagraphCxSpFirst" style="text-indent: -0.25in; margin: 0in 0in 0pt 0.75in; mso-add-space: auto; mso-list: l0 level1 lfo1;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">1.</span><span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">revIterator(): It returns IteratorReverse that I am going to create </span></span></p>
<p class="MsoListParagraphCxSpLast" style="text-indent: -0.25in; margin: 0in 0in 10pt 0.75in; mso-add-space: auto; mso-list: l0 level1 lfo1;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;" lang="EN-US"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">2.</span><span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">doAll(): It processes all the elements of collection internally using functor.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">doAll() implementation is simple. It is shown below.</span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: #3f7f5f; font-size: 10pt; mso-ansi-language: EN-GB;">//method to to internal reverse operation (phase 3)</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-spacerun: yes;">    </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">public</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">void</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> <span style="background: silver; mso-highlight: silver;">doAll</span>(Functor&lt;T&gt; functor){</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-spacerun: yes;">    </span><span style="mso-tab-count: 1;">  </span>Iterator&lt;T&gt; it = </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">this</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">.revIterator();</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-spacerun: yes;">    </span><span style="mso-tab-count: 1;">  </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">while</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">(it.hasNext()){</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-spacerun: yes;">    </span><span style="mso-tab-count: 2;">        </span>functor.process(it.next());</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-spacerun: yes;">    </span><span style="mso-tab-count: 1;">  </span>}<span style="mso-spacerun: yes;">    </span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-spacerun: yes;">    </span>}</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">But here, IteratorRevese (implementing Iterator and returned by revIterator) has to return element from reverse side of collection. The implementation of IteratorReverse goes like below.</span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">public</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">class</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> IteratorReverse&lt;T&gt; </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">implements</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> Iterator&lt;T&gt;{</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 1;">      </span>myList&lt;T&gt; </span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">myList</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">;</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 1;">      </span></span><strong><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">int</span></strong><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> </span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">index</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">; </span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: #3f7f5f; font-size: 10pt; mso-ansi-language: EN-GB;">//to maintain state or to maintain position of it in collection</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">I have implemented next() and hasNext() method as follows.</span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: #646464; font-size: 10pt; mso-ansi-language: EN-GB;">@Override</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 1;">      </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">public</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> T next() {</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">if</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">(</span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">index</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">&gt;= </span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">myList</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">.size()){</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 3;">                  </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">return</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">null</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">;</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span>}</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">else</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">{</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 3;">                  </span>T t = </span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">myList</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">.elementAt(</span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">myList</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">.size()-</span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">index</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">-1);<span style="mso-tab-count: 3;">              </span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 3;">                  </span></span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">index</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> = </span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">index</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> +1;</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 3;">                  </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">return</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> t;</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span>}<span style="mso-tab-count: 2;">           </span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 1;">      </span>}</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: #646464; font-size: 10pt; mso-ansi-language: EN-GB;">@Override</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 1;">      </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">public</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">boolean</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> hasNext() {</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">if</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">(</span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">index</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">&gt;= </span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">myList</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">.size()){</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 3;">                  </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">return</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">false</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">;</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span>}</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 2;">            </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">else</span></strong></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 3;">                  </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">return</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"> </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt; mso-ansi-language: EN-GB;">true</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">;</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;"><span style="mso-tab-count: 1;">      </span>}</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">IteratorReverse use generics for type safety and reuse. The following summarizes the main logic of back reversal</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">T t = </span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">myList</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">.elementAt(</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">myList</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">.size()-</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">index</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">-1);<span style="mso-tab-count: 2;">        </span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">When we forward ‘index’ keeps on increasing while </span></span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">myList</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">.size()-</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt; mso-ansi-language: EN-GB;">index</span><span style="line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt; mso-ansi-language: EN-GB;">-1 </span><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">keeps on decreasing.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">I have implemented Functor pattern through interface. SwimmerFunctor is concrete implementation of Interface Functor which takes JTextArea2 from mainApp as argument and appends text into it as shown in picture above.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"> </p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;">As shown in figure above, when ‘All Swimmers’<span style="mso-spacerun: yes;">  </span>button is pressed, it will use built-in Iterator and iterates through the collection in forward direction.<span style="mso-spacerun: yes;">  </span>But when ‘All Swimmers Backward’ button is pressed, it will use IteratorReverse and iterates through the collection in backward direction.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.surajshrestha.com.np/java/reverse-iterator-demo.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A simple JMenu and JMenuItem Demonstration</title>
		<link>http://www.surajshrestha.com.np/java/a-simple-jmenu-and-jmenuitem-demonstration.html</link>
		<comments>http://www.surajshrestha.com.np/java/a-simple-jmenu-and-jmenuitem-demonstration.html#comments</comments>
		<pubDate>Sun, 05 Apr 2009 18:49:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[ActionListener]]></category>
		<category><![CDATA[JFrame]]></category>
		<category><![CDATA[JMenu]]></category>
		<category><![CDATA[JMenuBar]]></category>
		<category><![CDATA[JMenuItem]]></category>

		<guid isPermaLink="false">http://www.surajshrestha.com.np/?p=97</guid>
		<description><![CDATA[Menu and Menu Items are tools to facilitate users to command the software they are using. JMenu and JMenuItem are Swing components of Java which work exactly as Menu and MenuItems of AWT (Abstract Window Toolkit) of Java. In this post, I have shown how to use JMenu and JMenuItems in Java.
First of all, we [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0in 0in 10pt;">Menu and Menu Items are tools to facilitate users to command the software they are using. JMenu and JMenuItem are Swing components of Java which work exactly as Menu and MenuItems of AWT (Abstract Window Toolkit) of Java. In this post, I have shown how to use JMenu and JMenuItems in Java.</p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-family: Calibri; font-size: small;">First of all, we have to create a JFrame window which acts as container for all components. Then we have to add JMenuBar in it. The JMenuBar will contain JMenus and each JMenu will contain JMenuItems. During actual coding we go in reverse order. First we create JMenuItems. We give a label to it and add ActionListener to it. ActionListener is the way of saying JVM (Java Virtual Machine) which method to execute when the user clicks the particular JMenuItem. After that, we create JMenus and add those created JMenuItems in required JMenus. Then after, we create JMenuBar and add those JMenus in it in required order. Finally, we attach the JMenuBar to the JFrame. To demonstrate all these, I have created two java files -<span style="mso-spacerun: yes;">  </span>AppMenuBar.java and JMenuTest.java. The Full source code with descriptive comments can be downloaded here. – <a title="Sample Code for JMenubar, JMenu and JMenuItems" href="http://www.surajshrestha.com.np/wp-content/uploads/2009/04/JMenuTest.zip" target="_blank">Source Code</a>.</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; font-size: 10pt;"> </span></p>
<p class="MsoNoSpacing" style="margin: 0in 0in 0pt;"><span style="font-family: Calibri; font-size: small;">Sample code</span></p>
<p class="MsoNoSpacing" style="margin: 0in 0in 0pt;"><span style="font-family: Calibri; font-size: small;"> </span></p>
<p class="MsoNoSpacing" style="margin: 0in 0in 0pt;"><span style="font-family: Calibri; font-size: small;">To create JMenuItem.</span></p>
<p class="MsoNoSpacing" style="margin: 0in 0in 0pt;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">JMenuItem item = </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt;">new</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;"> JMenuItem(</span><span style="font-family: &quot;Courier New&quot;; color: #2a00ff; font-size: 10pt;">&#8220;Show All Empty Seats&#8221;</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">);</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">item.addActionListener(</span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt;">this</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">);</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;"> </span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;">This creates a menu item with label ‘Show All Empty Seats’ and adds itself (the object which is calling the statement—the object of class AppMenuBar). </span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="mso-spacerun: yes;"><span style="font-family: Calibri; font-size: small;"> </span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;"> </span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">JMenu </span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt;">showMenu </span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">=<span style="mso-spacerun: yes;">  </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt;">new</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;"> JMenu(</span><span style="font-family: &quot;Courier New&quot;; color: #2a00ff; font-size: 10pt;">&#8220;Show&#8221;</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">);</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt;">showMenu</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">.add(item);</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;"> </span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;">These above statements create a JMenu with label ‘Show’ and add a JMenuItem created above.</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;"> </span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;">The signature of actionPerformed() method in class which implements the ActionListener Interface should be like this.</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt;">public</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;"> </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt;">void</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;"> <strong style="mso-bidi-font-weight: normal;">actionPerformed</strong>(ActionEvent e) {</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;"><span style="mso-tab-count: 2;">            </span></span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt;">if</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">(e.getActionCommand()==</span><span style="font-family: &quot;Courier New&quot;; color: #2a00ff; font-size: 10pt;">&#8220;Reserve a Seat&#8221;</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">){</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;"><span style="mso-tab-count: 3;">                  </span></span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt;">jMenuTest</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">.showMessage(</span><span style="font-family: &quot;Courier New&quot;; color: #2a00ff; font-size: 10pt;">&#8220;A Seat Reserved&#8221;</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">);<span style="mso-tab-count: 3;">             </span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;"><span style="mso-tab-count: 2;">            </span>}</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">}</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;"> </span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;">Finally, the JMenus created above can be added to JMenuBar like below.</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">JMenuBar menubar = </span><strong><span style="font-family: &quot;Courier New&quot;; color: #7f0055; font-size: 10pt;">new</span></strong><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;"><span style="mso-spacerun: yes;">  </span>JMenuBar();</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">menubar.add(</span><span style="font-family: &quot;Courier New&quot;; color: #0000c0; font-size: 10pt;">showMenu</span><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">);</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;"> </span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;">The menubar created above can be set as JMenuBar of the JFrame as below.</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; color: black; font-size: 10pt;">setJMenuBar(menubar);</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: Calibri; font-size: small;"> </span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; font-size: 10pt;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-family: Calibri; font-size: small;">In the source code attached, AppMenuBar.java creates a JMenuBar with a JMenu named ‘Show’ with 2 JMenuItems and another JMenu named ‘Transaction’ with 4 JMenuItems. AppMenuBar class inherits built-In class JMenuBar. It also implements ActionListener Interface class. That’s why, it has got actionPerformed() method. Any class which implemensts ActionListener Interface can be action listener of the JMenuItem and those classes will have actionPerformed() method. I have used this actionPerformed() method to change the Message label text of the calling JFrame.</span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="font-family: &quot;Courier New&quot;; font-size: 10pt;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-family: Calibri; font-size: small;">JMenuTest class inherits the built-in classs JFrame. In constructor method, it creates an AppMenuBar and sets that as its JMenuBar. Also, it creates a JLabel and adds that to it. I have not use any layout format so far, so the JLabel is added to middle covering the entire JFrame container. I will discuss more on the Layouts in forth coming posts. The final output picture is shown below.</span></p>
<div id="attachment_101" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-101 " title="JMenu Test Sample Picture" src="http://www.surajshrestha.com.np/wp-content/uploads/2009/04/jmenutest1-300x232.jpg" alt="JMenu Test Sample Picture" width="300" height="232" /><p class="wp-caption-text">JMenu Test Sample Picture</p></div>
<p class="MsoNormal" style="TEXT-ALIGN: center; MARGIN: 0in 0in 10pt"> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.surajshrestha.com.np/java/a-simple-jmenu-and-jmenuitem-demonstration.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Confusing Access Modifiers in Java Class and Members</title>
		<link>http://www.surajshrestha.com.np/java/confusing-access-modifiers-in-java-class-and-members.html</link>
		<comments>http://www.surajshrestha.com.np/java/confusing-access-modifiers-in-java-class-and-members.html#comments</comments>
		<pubDate>Tue, 31 Mar 2009 19:16:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Access Modifiers]]></category>

		<guid isPermaLink="false">http://www.surajshrestha.com.np/?p=3</guid>
		<description><![CDATA[Access Modifiers like Private, Protected, Public can confuse a novice programmer.  Access modifiers define where the class or method can be accessed in same class and another classes.
There are two levels of access control.
1.       At the Class level – ‘public’ or nothing(package-driven or default)
a.       If a class is defined as public, it can be accessed [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-family: Calibri; font-size: small;">Access Modifiers like Private, Protected, Public can confuse a novice programmer.<span style="mso-spacerun: yes;">  </span>Access modifiers define where the class or method can be accessed in same class and another classes.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-family: Calibri; font-size: small;">There are two levels of access control.</span></p>
<p class="MsoListParagraphCxSpFirst" style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">1.</span><span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-family: Calibri; font-size: small;">At the Class level – ‘public’ or nothing(package-driven or default)</span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in; margin: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">a.</span><span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-family: Calibri; font-size: small;">If a class is defined as public, it can be accessed from all the classes anywhere (means from any package).</span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in; margin: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">b.</span><span style="font: 7pt &quot;Times New Roman&quot;;">      </span></span></span><span style="font-family: Calibri; font-size: small;">If a class is defined without any modifier, then it is package-driven that means, it is only visible inside the package in which it is defined.</span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">2.</span><span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-family: Calibri; font-size: small;">At the Data Member level – ‘public’, ‘protected’, ‘private’ or nothing(package-driven or default)</span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in; margin: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">a.</span><span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-family: Calibri; font-size: small;">If a data member of a class is defined as public as shown below, then it can be seen from anywhere.</span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent: -1.5in; margin: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1; mso-add-space: auto; mso-text-indent-alt: -9.0pt;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font: 7pt &quot;Times New Roman&quot;;">                                                               </span><span style="font-family: Calibri; font-size: small;">i.</span><span style="font: 7pt &quot;Times New Roman&quot;;">      </span></span></span><span style="font-family: Calibri; font-size: small;">public int a;</span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in; margin: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">b.</span><span style="font: 7pt &quot;Times New Roman&quot;;">      </span></span></span><span style="font-family: Calibri; font-size: small;">If a data member of a class is defined as protected, then it can be accessed only in its class and its child classes.</span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in; margin: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">c.</span><span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-family: Calibri; font-size: small;">If a data member of a class is defined as private, then it can be only accessed in its class.</span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in; margin: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1; mso-add-space: auto;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">d.</span><span style="font: 7pt &quot;Times New Roman&quot;;">      </span></span></span><span style="font-family: Calibri; font-size: small;">If a data member is defined without any modifier, then it is package-driven. So, it is visible inside the package where it is defined.</span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0pt 1in; mso-add-space: auto;"><span style="font-family: Calibri; font-size: small;"> </span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0pt 1in; mso-add-space: auto;"><span style="font-family: Calibri; font-size: small;">The above rules defined for data member also applies for the methods of a class.</span></p>
<p class="MsoListParagraphCxSpLast" style="margin: 0in 0in 10pt 1in; mso-add-space: auto;"><span style="font-family: Calibri; font-size: small;">The following table summarizes the rules discussed above.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><strong style="mso-bidi-font-weight: normal;"></strong></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Calibri;">Access Levels</span></span></strong></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Calibri;">Modifier<span style="mso-tab-count: 1;">              </span>Class<span style="mso-tab-count: 1;">      </span><span style="mso-tab-count: 1;">                </span>Package<span style="mso-tab-count: 1;">               </span>Subclass<span style="mso-tab-count: 1;">               </span>World</span></span></strong></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-family: Calibri; font-size: small;">Public<span style="mso-tab-count: 1;">    </span><span style="mso-tab-count: 1;">                </span>Y<span style="mso-tab-count: 1;">              </span><span style="mso-tab-count: 1;">                </span>Y<span style="mso-tab-count: 1;">              </span><span style="mso-tab-count: 1;">                </span>Y<span style="mso-tab-count: 1;">              </span><span style="mso-tab-count: 1;">                </span>Y</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-family: Calibri; font-size: small;">protected<span style="mso-tab-count: 1;">              </span>Y<span style="mso-tab-count: 1;">              </span><span style="mso-tab-count: 1;">                </span>Y<span style="mso-tab-count: 1;">              </span><span style="mso-tab-count: 1;">                </span>Y<span style="mso-tab-count: 1;">              </span><span style="mso-tab-count: 1;">                </span>N</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-family: Calibri; font-size: small;">no modifier<span style="mso-tab-count: 1;">           </span>Y<span style="mso-tab-count: 1;">              </span><span style="mso-tab-count: 1;">                </span>Y<span style="mso-tab-count: 1;">              </span><span style="mso-tab-count: 1;">                </span>N<span style="mso-tab-count: 1;">             </span><span style="mso-tab-count: 1;">                </span>N</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-family: Calibri; font-size: small;">private<span style="mso-tab-count: 1;">  </span><span style="mso-tab-count: 1;">                </span>Y<span style="mso-tab-count: 1;">              </span><span style="mso-tab-count: 1;">                </span>N<span style="mso-tab-count: 1;">             </span><span style="mso-tab-count: 1;">                </span>N<span style="mso-tab-count: 1;">             </span><span style="mso-tab-count: 1;">                </span>N</span></p>
<p class="MsoNormal" style="margin: 0in 0in 10pt;"><span style="font-family: Calibri; font-size: small;"> </span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt;"> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.surajshrestha.com.np/java/confusing-access-modifiers-in-java-class-and-members.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->
