JEasy - a framework for JAVA applications using XML


What's new ! ! !

Version 2.3

  • Multiple filter for JETable columns
  • New JEFormat to format fields (date, currency, ...) when serializing and deserializing in messages
  • New properties in treenode to define closedIcon, leafIcon and openIcon for each node
  • New menu Refactor in the JEasyRepository to delete all objects without a reference to other objects
  • Mandatory propertie for input objects. When the examine method of those objects is called it returns an error if the input field is not filled with data
  • New method examineMessage() for JEMessage. For all input objects the method examine() is called. The method returns a XML String containing the JEasyId and the error. Using this method it is very easy to check all input fields defined in a JEMessage
  • Register your own JECallBack to a panel. All events are send to this class. This helps to write source code for the GUI by several developpers
  • JEButton: new properties rolloverBackground and rolloverForeground
  • JEAutomation: new method waitmsec to delay some msec.
  • JEAutomation: new method selectTabbedPane to select a panel of the tabbedPane.
  • JETabbedPane: setSelectedObject to select a panel of the tabbedPane.
  • JETable: new methods int getColumnWidth(int col), TableColumn getColumn(int col)
  • JEDynamicContainer: enhanced interface
  • JEHttpConnector: checks for timeout of a session
BugFixes in Version 2.2
  • JETabbedPane; public void setSelectedObject(String jeasyId) could not select first panel.

Version 2.2

  • New JEasy object border to define sveral kinds of borders
    used in dataarea, datafields and other components
  • Tables show a dialog with alle entries when double click a cell.
  • TreeNodes with new properties for colors and icons.
  • New JEDataclass TIME, to validate input in time format.
  • Antialiasing for labels and other components.
  • New method destroy in JEDispatcher
  • Global properties for borders
  • JEHttpClient and JEHttpConnector may transfers compressed and encrypted data
  • Timeout recognized in JEHttpConnector to destroy dead sessions
  • New methods in JEUtil for compressing and decompressing data
BugFixes in Version 2.2
  • Treenode background and icon could not be set.

Version 2.1

  • The font of tables and table headers can be set as a global property.
  • Works with JDK 1.5
  • New theme like eclipse under Windows XP
  • Tomcat 5.0 is used for running servlet JEHttpConnector at the exampe application
BugFixes in Version 2.1
  • The dialogbox for selecting an element somtimes showed no tabbedpane

Version 2.0

  • The JFrame implements the KeyEventDispatcher. Now you are able to get KeyEvents from a panel that have no input fields. For example to listen for F1 to show a help screen.
  • In JERadioButton the font is set to the global labelFont. The font can be set for each id too.
  • In JELabel the horizontalTextAlignment and verticalTextAlignment can be set to select the text position relativ to the icon.
  • The JETable can be filtered. If the property filterAllowed is set to true than the right mouse click on the header will show a filter popup to select entries of the column.
    To see that a column has a filter a new JETable properties headerFilterBackground and headerFilterForeground can be set.
  • To export data from a JETable use the new method getCSVData(). It returns a string in CSV format with all entries of the table.
  • Panels have no focus by default (panel.setFocusable(false)).
  • In JEMessages the method getMessage returns the comobobox item and value when the value is set.
    The extension _Value is used.
    Example: ...<CB_Country>Germany</CB_Country><CB_Country_Value>78</CB_Country_Value>
  • A new global variable focusBackground is used to set the background of an input field if it has the focus.
  • A new global variable focusOnButtonBackground is used to set the background of a button if it has the focus.
  • If the new global variable onENTERgotoNextField is set to true the ENTER-Key on fields will transfer the focus to the next component.
  • If the new global variable onENTERactvateButton is set to true the ENTER-Key on buttons will push the button.
  • If the new global variable onTABTransferOutOfTable is set to true the TAB-Key in a table will transfer the focus to the next component.
  • Copy, Cut, Paste, Delete and Export of JEasy objects including all their children. Copy a tree from the treenode and paste it
    as an element of another component. A dialog will appear to change the JEasy id's before pasting.
  • JEasy PlugIn for eclipse 2.1
  • How to to run the JEasyRepository from Eclipse 3.0 as external tool
BugFixes in Version 2.0
  • The property horizontalAlignment is set in JELabel

Version 1.9

  • a project wizard builds sources and resources out of templates. Starting an new project is more easy now.
  • Repository checks for objects added in more than one container
  • lineWrapping in multiline textfields
  • new methods in JEUtils to write, copy and delete files
  • sorting tables by clicking the left mouse only at the header. In version 1.8 the right mouse orders descending.
  • sorting of tables now works with date like or MM/dd/yyyy.
  • Internal additional column in JComboboxes. You can now set an optional value to every item. So you are able to read the selected item and this value. For example if you need the customer number for the name of the customer that is shown in the combobox.
BugFixes in Version 1.9
  • AC_Action field always filled
  • make a datafield unvisible will now include the label behind the textfield
  • after arranging the columns of a table by mouse the method getColumnFromJEID(String) returned a wrong TableColumn

Version 1.8

  • Mouse event in Table Header
  • New Methodinvocation to call methods of a given object
  • Columns of a JETable are sortable. Left click on table header orders ascending, right click orders descending. This feature is set by a new propertie of JETable.
  • Columns of a JETable are sumable. This feature is set by a new propertie of JETable. Use new api methods to build a sum of a column. The method works with numbers and formated numbered with postfixes like 1,234.56 $ or 1.234,56 EUR.
  • Multi coloring of JETables. The header and each odd or even row may have different colors.
  • Enhanced example and source code
  • New methods in JEasy objects

Version 1.7

  • New default look&feel of the JEasyRepository
  • Using jdk1.4 scrooling tabbedpane (see the Example or the Repository)
  • New JEasy object JESpinner to change values of a textfield with the mouse
  • The ENTER-Key tranfers to the next field in comboboxen and listboxen
  • The new global parameter onENTERgotoNextField sets the behavior of the ENTER-Key
  • STRG-TAB in multiline Textfields transfers the focus to the next field
  • InputVerifier in JEDataarea
  • Setting foreground and background of tabbedpane
  • Setting background and foreground of table headers
  • Hidden table columns by setting the width to zero
  • A theme used in the Repository with colors of eclispe
  • Tips of the day in the Repository
  • A new JEasy object to build tips of the day out of an XML file
  • Bugfixes: A button behind a datafield has the same background as the container

Version 1.6 release 

  • A new layout uses the L&F buttons of Swing.
  • A script interface in XML for automation. JEAutomation uses the robot package of the JDK. User Input, mouse move and clicks and other events definied in the script are send as events to your application.
  • For Client/Server programming JEasy offers a JEHttpConnector servlet that may run in application servers like Tomcat ( and others who has a servlet implementation.
    The JEasy communication uses http and XML. A simulate flag enables developers to test at the local machine.
    See the example for more details.
  • Use the new JEDynamicContainer to add components in your panel out of an XML string. All the tags <add> define JEObjects that are added to the JEPanel.
    Syntax : JEDynamicContainer jedc = new JEDynamicContainer(myJEPanel, myXMLString);
    The example fills a panel with two JEDatafields. The panel is element of a JEDialog that is shown. See
            String s ="<add>DF_Input1</add><add>DF_Input2</add>";
            JEDynamicContainer jedc = new JEDynamicContainer("PA_myJEasyPanel", s);
            JEDialog jediag = (JEDialog)oht.get("DL_myDialog");
  • The JEMessage serializes forms in XML-messages. The tag used are now definied in three ways.
    Use the id of the JEObject - use the label of the JEasy 0bject - use a definied tag speicified inside the Repository.
  • The JEFrame method start() doesn't show the frame. Please insert in your main class a line into the run method. See
            static void run(String startId, Hashtable oht) {
                    Console.println("Running Code_Repository");
                    JEObject jo = new JEObject();
                    try {
                            jo = (JEObject) oht.get(startId);
                            Console.println("Obj-ID = "+jo.getId());
                    catch (NullPointerException npe) {
                            System.out.println("Exception bei get(startId) in hashtable");
  • In JETable the new method createTable(String XMLString) creates and fills the table out of an XML string. In metadata is a tag column with a tag name inside. The name is the columnName. In data are rows where the tagnames are the columnNames. The entries of these tags are cells of the tables.

    XML-Format of the String :

  • Inputfields now fire the Key Events KEY_PRESSED, KEY_RELEASED and KEY_TYPED. Insert in your CallBack AWTEvent some lines to ignore these events. The KEY_PRESSED event enables you to check if keys like F1 were pressed. See
            public void callBack(AWTEvent e, String ID, String ID_Parent) {
                    int eid = e.getID();
                    switch (eid) {
                            case WindowEvent.WINDOW_ACTIVATED:
                            case WindowEvent.WINDOW_DEACTIVATED:
                            case WindowEvent.WINDOW_CLOSING:
                            case FocusEvent.FOCUS_GAINED:
                            case FocusEvent.FOCUS_LOST:
                            case MouseEvent.MOUSE_RELEASED:
                            case KeyEvent.KEY_PRESSED:
                            case KeyEvent.KEY_RELEASED:
                            case KeyEvent.KEY_TYPED:
  • Set the TabPlacement in JETabbdPane with setTabPlacement(int)
  • The button behind the datafield can be defined now in the global parameters
  • Background and Foreground in several components
  • TexturePaint and GradientPaint in JELabels

Version 1.5 

  • The clear method in JECombobox clears the selection but doesn't remove all entries of the ComboBox. The method setRemoveOnClear(true) will remove all entries on clear().
  • New method in JEDatafield: void verify() activates the InputVerification that is normally activated if the focus is lost. Use it after set the text of the JTextfield and when an CallBackInputVerifier should be called.
  • New methods in JEButton: focusPainted and contextAreaFilled. New fields in JEasyRepository will enable you to design web-like buttons without changing the color on click.
  • new Method doClick(time) in JButton
  • JEDesktopPane to work with InternalFrames. An example shows how it works.
  • The new JEasy object JEMethodinvocation gives you a new XML interface to the JEasy methods. Inside the JEsyRepository you may define the JEasy object, the method and the parameters in XML. So it is possible to call all JEasy methods coming as XML over http or rmi from the application server. Example:
    will fill all entries in your panel. An new example shows automatic filling and storing of the address panel by methodinvocation in XML.

Version 1.4 

  • working with tables (editing, new listeners, comboboxes in cells, ...)
  • input validation (min-max values, intelligent date check)
  • Java2D gradientpaint and texturepaint for web-feeling in your application
  • marking background color for datafields
  • messages may hold <my_combobox><elements>one</elements><elements>two</elements>... </my_combobox> to fill a combobox
  • setEnabled (true/false) for panels to make it readonly
  • unvisible datafields in panels and tables to hold an key or an id the user should not see but the message must hold
  • passwordfields
  • bugfixes
  • ...

Version 1.3 

  • right mouse popup menus to navigate between id's
  • new JDK Input Verifier event in datafields and as a CallBack
  • new entry in action to set the id of the global parameters
  • different startId's in global for application and applet
  • correct mask of the inputfields gridwidth and gridheight in constraints
  • implementation of themes and a preview frame to see what a theme does
  • a ftp clone GUI in the example
  • the JEasy package name was changed to com.cbse.jeasy
  • the clear method to set the text of all fields in a panel to null
  • datafields may have default entries
  • non editable datafields
  • Cut,Copy and Paste in JEDatafield and JEDataarea by the standard keycodes Ctrl+X, Ctrl+C and Ctrl+V
  • a message upon a tabbedpane will read all inputs of multi panels
  • bug fixes

Version 1.3 prerelease

  • Change format of properties file (*.jip) and messages to XML-Format (*.xml).
  • Rename JEasy objects from Obj* auf JE*.
  • Rename jipobj.jar to jeasy.jar.
  • A tool jip2xml.class to convert jip files to XML files
  • A tool old2new to change strings in files. All parameters are defined in XML. A predefined XML file changes your java source to work with the new JE* objects
  • New JEOptionPane for dialog boxes
  • New ActionListener for JEComboBox and JEComboList
  • Copy and Paste in JEDatafield and JEDataarea by keycode Shift+Insert and Ctrl+Insert

Version 1.0

  • Implementation of JTable.
  • Enhancements of the Example.
  • The function InitJipCallBack in the class JipCallBack can be used for initialization
    before the first user action. See
  • The elements E1 - En of a combobox are now stored with the name of the combobox. Instead of E1=... now elements.E1=...
  • Some pages called First Step help you to design your first application.

Version 0.9d

  • -classpath .;jipobj.jar was added in the batch files to start the application.

Version 0.9c

  • A preview function shows you the components in a Preview Frame. Activate it by
    clicking the right mouse button at the left treenode panel.
    All events will by directed to standard output
  • A mouse listener was added in ObjPanel
  • A document listener was added in ObjDatafield and ObjDatarea
  • ObjMenu has a new property for creating JPopupMenus

JEasy Copyright @ 1997-2002 Harry Pfohl CBSE Convergent Business and Software Engineering GmbH
Projects and consulting Westernacher & Partner Unternehmensberatung AG