| By Yakov Fain | Article Rating: |
|
| September 24, 2006 07:30 PM EDT | Reads: |
20,588 |
We usually run Flex training for private clients of Farata Systems , but once in a while we teach public classes for people with different programming background (my next Flex class at New York University starts in November). All students usually get excited by Adobe Flex, but each of them comes with different understanding of how to do things right. So I’ll tell you the story that might have happened in a real life, but first, let me remind you of an old Indian tale about seven blind men and an elephant . In short, one blind man touched the elephant’s head, the other one touched the tail, someone was by the leg. And each of them visualized an elephant differently based on what he touched…
My students usually arrive to the classroom early, but this time three seats were empty. Five minutes later I got a phone call from one of them explaining that they got stuck in the elevator and will stay there for another fifteen minute until the serviceman arrives. Needless to say that each of them had a laptop (do not leave home without it), so I gave them a short assignment to trying to help them use this time productively.
Here’s the assignment: Create a Window with a Panel that can resize itself by clicking on the button +/- that is located in the right corner of the panel. One click should minimize the panel’s height to 20 pixels, and a subsequent one should maximize to 100 pixels, and so on.
For example, these are the two states of such panel:


I forgot to tell you that one of these guys was a Cobol programmer, the other one had Java background, and the third one was a Smalltalk fan.
From Cobol to Flex
The Cobol programmer thought to himself,”I used to write long programs because during job interviews they would ask how many lines of code did I write. These guys are different, so to earn a good grade, this program should be small ”. He finished the program on time and this is what it looked like:
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Panel id="thePanel" title="The Panel" height="90" width="100%" headerHeight="20" />
<mx:HBox width="100%" horizontalAlign="right" paddingRight="2">
<mx:Label text="-" fontSize="16" width="20" height="17" fontWeight="bold"
id="minimizeActions"
click="{if (minimizeActions.text=='+'){
minimizeActions.text='-';
thePanel.height=100;
} else {
minimizeActions.text='+';
thePanel.height=20;
}
}" />
</mx:HBox>
</mx:Application>
From Java to Flex
The Java programmer thought, “The standard Flex Panel class does not have the property that remembers the current state of the Panel, but Flex components are easily extendable, so I’ll create a descendent of the Panel in ActionScript, add a private state flag (minimized) , public setter and getter, and resize function. This way my new Panel class will be reusable and self contained.” This is his reusable ActionScript class called ResizableJPanel:
package {
import mx.containers.Panel;
public class ResizableJPanel extends Panel {
// state of the panel
private var isPanelMinimized:Boolean;
public function get minimized():Boolean{
return isPanelMinimized;
}
public function set minimized(state:Boolean){
isPanelMinimized=state;
}
public function resizeMe():void{
if (minimized){
minimized=false;
height=maxHeight;
} else {
minimized=true;
height=minHeight;
}
}
}
}
This is Javist's mxml code:
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" layout="absolute"
applicationComplete="minimizeActions.addEventListener(MouseEvent.CLICK, resizePanel);">
<mx:Canvas id="theCanvas" height="100" width="100%" >
<local:ResizableJPanel id="thePanel" height="90" width="100%"
title="The Paaanel" minHeight="20" maxHeight="100" headerHeight="20" />
<mx:HBox width="100%" horizontalAlign="right" paddingRight="2">
<mx:Label text="-" fontSize="16" width="20" height="17" fontWeight="bold"
id="minimizeActions" />
</mx:HBox>
</mx:Canvas>
<mx:Script>
<![CDATA[
function resizePanel(event:MouseEvent):void{
if (thePanel.minimized){
minimizeActions.text="-";
thePanel.resizeMe();
theCanvas.height=thePanel.maxHeight;
} else {
minimizeActions.text="+";
thePanel.resizeMe();
theCanvas.height=thePanel.minHeight;
}
}
]]>
</mx:Script>
</mx:Application>
From Smalltalk to Flex
The Smalltalk guy thought, “Let me see if the standard Panel is a dynamic class. If not I’ll extend it just to make it dynamic and will be assigning the panel’s state on the fly. I hope Yakov is not one of these object-oriented Nazis”. This is his panel ActionScript class that just adds a dynamic behavior to the Panel:
package{
import mx.containers.Panel;
public dynamic class ResizableSmtPanel extends Panel
{
}
}
His mxml class looked like this:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" layout="absolute">
<ResizableSmtPanel title="The Panel" id="thePanel" height="90" width="100%"
minHeight="20" maxHeight="100" headerHeight="20">
</ResizableSmtPanel>
<mx:HBox width="100%" horizontalAlign="right" paddingRight="2">
<mx:Label text="-" fontSize="16" width="20" height="17" fontWeight="bold"
id="minimizeActions" click="resizePanel()" />
</mx:HBox>
<mx:Script>
<![CDATA[
function resizePanel():void{
if (thePanel.minimized){
minimizeActions.text="-";
thePanel.minimized=false;
thePanel.height=thePanel.maxHeight;
} else {
minimizeActions.text="+";
thePanel.minimized=true;
thePanel.height=thePanel.minHeight;
}
}
]]>
</mx:Script>
Since we are not in the classroom, I’m not going to go to a code review and lengthy discussions, I will just say the I gave an “A” to each of these guys...and here's the Flex version:
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" layout="absolute">
<mx:Component className="ResizablePanel">
<mx:Panel>
<mx:Script>
[Bindable]
public var minimized:Boolean = false;
</mx:Script>
</mx:Panel>
</mx:Component>
<ResizablePanel title="The Panel" id="thePanel" minimized="false" height="{thePanel.minimized?thePanel.minHeight:thePanel.maxHeight}" width="99%"
minHeight="20" maxHeight="100" headerHeight="20"/>
<mx:HBox width="99%" horizontalAlign="right" paddingRight="2">
<mx:Label text="{thePanel.minimized?'+':'-'}" fontSize="16" width="20" height="17" fontWeight="bold"
id="minimizeActions" click="{thePanel.minimized=!thePanel.minimized}" />
</mx:HBox>
</mx:Application>
What’s the morale of this story? Learn another language, no matter what’s your current background. Initially you will try to bring your own culture to this new language, but eventually your horizons will broaden, which will make you a better programmer.
P.S. Isn’t it funny that the Cobol guy’s version was the shortest one? But was it the best one? Can you offer a different solution?
posted Saturday, 23 September 2006
tags: flex flex 2 java cobol smalltalk programming style oop
links: digg this del.icio.us technorati
Published September 24, 2006 Reads 20,588
Copyright © 2006 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
More Stories By Yakov Fain
Yakov Fain is a Managing Director of Farata Systems, consulting, training and product company. He has authored several Java books, dozens of technical articles. SYS-CON Books released his latest co-authored book , Rich Internet Applications with Adobe Flex and Java: Secrets of the Masters in Spring 2007. Sun Microsystems has nominated and awarded Yakov with the title Java Champion. He leads the Princeton Java Users Group. He is an Adobe Certified Flex Instructor. Currently Yakov works on the book for O'Reilly "Enterprise Application Development with Flex". He twits at twitter.com/yfain.
![]() |
Daniel Szmulewicz 06/19/08 12:08:17 PM EDT | |||
Shalom, OK, so this post is two years old, but I just found it today and appreciated it a lot. Very instructive, indeed. Since you asked for more versions to achieve the desired resizeable canvas, may I offer mine. It is in the line of the Flex version offered at the end, only simplified. Here it is: <mx:Panel title="The Panel" id="thePanel" height="{minimized?thePanel.minHeight:thePanel.maxHeight}" width="99%" minHeight="20" maxHeight="100" headerHeight="20"/> <mx:HBox width="99%" horizontalAlign="right" paddingRight="2"> Thanks again. Daniel Szmulewicz PS: I'm looking for a job. Do I win one? |
||||
![]() |
AJAXWorld News Desk 09/23/06 03:16:38 PM EDT | |||
We usually run Flex training for private clients of Farata Systems, but once in a while we teach public classes for people with different programming background (my next Flex class at New York University starts in November). All students usually get excited by Adobe Flex, but each of them comes with different understanding of how to do things right. So I'll tell you the story that might have happened in a real life, but first, let me remind you of an old Indian tale about seven blind men and an elephant. In short, one blind man touched the elephant's head, the other one touched the tail, someone was by the leg. And each of them visualized an elephant differently based on what he touched. |
||||
- Contrary Opinion: Why Silverlight is Good for Adobe
- Ulitzer Live! New Media Conference & Expo
- Ulitzer.com Named Exclusive "New Media" Sponsor of Cloud Computing Conference & Expo
- My Thoughts on Ulitzer
- Analytics for Adobe Air Applications
- Adobe’s Aiming ColdFusion at Multiple Clouds
- Eval JavaScript in a Global Context
- Fig Leaf Software to Exhibit at Government IT Conference & Expo
- Software Flexibility in the Cloud - Part 4 of 5
- Cloud Executives Feature on Cloud Computing Expo Power Panel
- AJAX World RIA Conference & Expo Kicks Off in New York City
- Java Kicks Ruby on Rails in the Butt
- Interviewing Java Developers With Tears in My Eyes
- Adobe Enters Cloud Computing with LiveCycle
- Social Media Terrorists
- Adobe Flash Media Server on iPhone
- Ruby-on-Rails Apps Get Cloud Lift
- Contrary Opinion: Why Silverlight is Good for Adobe
- Adobe Flex 4 Goes to Public Beta
- Flexing Your .NET 3.5 Skillset
- Where Are RIA Technologies Headed in 2008?
- Cover Story: How to Increase the Frame Rates of Your Flash Movies
- AJAX World RIA Conference & Expo Kicks Off in New York City
- Your First Adobe Flex Application with a ColdFusion Backend
- Adobe Flex 2: Advanced DataGrid
- i-Technology Blog: Death-Knell For "Rich Media? Hardly!
- Adobe/Macromedia - Microsoft, Look Out!
- How To Create a Photo Slide Show ...
- Adobe Flex Interface Customization - Themes, Styles, Skins
- Personal Branding Checklist



































