JLCA 3.0 - Java Event Model (AWT and Swing)

Java Event Model mechanism is primarily featured by listeners and adapters used to deal with the different types of events fired by AWT, Swing of the user himself. Most of Swing components use new event types and listeners. Java Event Model is mainly converted through towards .NET Framework event delegation model inherent in System.Windows.Forms and System.ComponentModel APIs and, .NET Framework Classes such as System.EventHandler and System.EventArgs.

 

JLCA 3.0 main conversion about AWT and Swing events takes into account: Most of the Java API Listeners and Adapters in AWT (some in Swing), DragAndDrop Operations and Custom User Events.

 

Table 27,Table 28,Table 29 and Table 30 show the most relevant details about Java’s Event Model conversion. In a summarized manner, they enunciate the Java Event Model features preserved in converted applications. On the other hand, they suggest the issues that the user should take care while converting applications using events.

 

Coverage Details

Class / Interface in Package java.awt.event

Functionality

JLCA 3.0 Coverage

Description

ActionEvent

ActionListener

ActionEvent indicates when a component-defined action occurred.

ActionListener is the listener interface for receiving action events.

Converted

Converted to System.Windows.Forms.Button.Click, System.Windows.Forms.TextBox.KeyPress, System.Windows.Forms.ListBox.DoubleClick and System.Windows.Forms.MenuItem.Click.

ActiveEvent

This is the interface for events that know how dispatch themselves.

Not Converted

These events have no equivalent in .NET Framework.

AdjustmentEvent

AdjustmentListener

AdjustmentEvent is the event emitted by Adjustable objects.

AdjustmentListener is the listener interface for receiving adjustment events.

Converted

Converted to System.Windows.Forms.Scrollbar.Scroll.

ComponentEvent

ComponentAdapter

ComponentListener

ComponentEvent indicates that a component moved, changed size, or changed visibility.

ComponentAdapter & ComponentListener are adapter and listener for receiving componentevents.

Converted

Converted to System.Windows.Forms.Control.Resize, System.Windows.Forms.Control.Move and System.Windows.Forms.Control.VisibleChanged.

ContainerEvent

ContainerAdapter

ContainerListener

ContainerEvent indicates when a component was added or removed.

ContainerAdapter & ContainerListener are adapter and listener for receiving containerevents.

Converted

Converted to System.Windows.Forms.ContainerControl.ControlAdded and System.Windows.Forms.ContainerControl.ControlRemoved

FocusEvent

FocusAdapter

FocusListener

FocusEvent indicates that a Component has gained or lost the input focus.

FocusAdapter & FocusListener are Adapter and listener for receiving keyboard focus events on a component.

Converted

Converted to System.Windows.Forms.Control.Enter and System.Windows.Forms.Control.Leave.

HierarchyBoundsAdapter

HierarchyBoundsListener

These are adapter class and listener interface for receiving ancestor moved and resized events.

Not Converted

These events have no equivalent in .NET Framework.

HierarchyEvent

HierarchyListener

These are event and listener for change to hierarchy of component occurs.

Not Converted

These events have no equivalent in .NET Framework.

InputEvent

This is the root event class for all component-level input events.

Not Converted

These events have no equivalent in .NET Framework.

InputMethodEvent

InputMethodListener

InputMethodEvent contain information about text that is being composed using an input method.

InputMethodListener is the listener interface for receiving input method events.

Not Converted

These events have no equivalent in .NET Framework.

InvocationEvent

This executes the run() method on a Runnable when dispatched by the AWT event dispatcher thread.

Not Converted

These events have no equivalent in .NET Framework.

ItemEvent

ItemListener

ItemEvent indicates that an item is selected or deselected.

ItemListener is the listener interface for receiving item events.

Converted

Converted to System.Windows.Forms.CheckBox.Click System.Windows.Forms.MenuItem.Click and

System.Windows.Forms.ListBox.SelectedIndexChanged.

KeyEvent

KeyListener

KeyEvent indicates that a keystroke occurred in a component.

KeyListener is the listener interface for receiving keyboard events.

Converted

Converted to System.Windows.Forms.Control.KeyPress, System.Windows.Forms.Control.KeyDown and System.Windows.Forms.Control.KeyUp.

MouseEvent

MouseListener

MouseMotionAdapter

MouseMotionListener

MouseEvent indicates that a mouse action occurred in a component.

MouseListener is the listener interface for receiving mouse events.

MouseMotionAdapter & MouseMotionListener are the adapter and listener for receiving mouse motion events.

Converted

Converted to System.Windows.Forms.Control.Click, System.Windows.Forms.Control.MouseEnter, System.Windows.Forms.Control.MouseLeave, System.Windows.Forms.Control.MouseMove, System.Windows.Forms.Control.MouseDown and System.Windows.Forms.Control.MouseUp.

TextEvent

TextListener

TextEvent indicates that an object's text changed.

TextListener is the listener interface for receiving text events.

Converted

Ported to System.Windows.Forms.TextBox.TextChanged.

WindowEvent

WindowAdapter

WindowListener

WindowEvent indicates that a window has changed its status.

WindowAdapter & WindowListener are the adapter and listener for receiving window events.

Converted

Converted to System.Windows.Forms.Form.Load, System.Windows.Forms.Form.Activated, System.Windows.Forms.Form.Deactivated, System.Windows.Forms.Form.Closed and System.Windows.Forms.Form.Closing.

Table 27: Java Event Model Conversion Coverage (1) – Package java.awt.event

Class / Interface in Package java.awt.dnd

Functionality

JLCA 3.0 Coverage

Description

AutoScroll

Interface that provides auto scrolling facility.

Not Converted

It is not converted to .NET Framework as the auto-scrolling is managed implicitly in .NET Framework.

DnDConstants

Contains constant values representing the type of action(s) to be performed by a Drag and Drop operation.

Converted

Converted to System.Windows.Forms.DragDropEffects.

DragGestureEvent

DragGestureListener

DragGestureEvent occurs when a particular DragGestureRecognizer detects that a platform dependent drag initiating gesture has occurred on the Component.

DragGestureListener is invoked when an object of that class detects a drag initiating gesture.

Partially

Converted

Core Functionality achieved through DragSource is converted. Advanced functionality is not converted as .NET Framework does not have its equivalent.

DragGestureRecognizer

MouseDragGestureRecognizer

This is an abstract base class for the specification of a platform-dependent listener that can be associated with a particular Component in order to identify platform-dependent drag initiating gestures.

Not Converted

It is not converted to .NET Framework as similar functionality is not available in .NET Framework.

DragSource

DragSourceContext

DragSourceDragEvent

DragSourceDropEvent

DragSourceEvent

DragSourceListener

DragSource is responsible for the initiation of the Drag and Drop operation.

DragSourceContext is responsible for managing the initiator side of the Drag and Drop protocol.

DragSourceEvent is the base class for DragSourceDrag Event and DragSourceDrop Event.

DragSourceListener is the event interface for originators of Drag and Drop operations to track the state of the user's gesture, and to provide appropriate "drag over" feedback to the user throughout the Drag and Drop operation.

Partially

Converted

Core functionality exposed by these components is converted to .NET Framework. Since Drag n Drop is managed in a different way in .NET Framework, there is no equivalent for these classes but, the functionality is converted to .NET Framework’s Drag n Drop.

DropTarget

DropTargetContext

DropTargetDragEvent

DropTargetDropEvent

DropTargetEvent

DropTargetListener

These are associatedwith a Component when that Component wishes to accept drops during Drag and Drop operations.

Partially Converted

Core functionality exposed by these components is converted to .NET Framework. Operations like dragEnter, dragOver, dragExit and drop are being converted.

InvalidDnDOperationException

This is thrown by various methods in the java.awt.dnd package.

Converted

It is converted to a more general exception (System.Exception) since there is no direct equivalent in .NET Framework.

Table 28: Java Event Model Conversion Coverage (2) – Package java.awt.dnd

Class / Interface in Package javax.swing.event

Functionality

JLCA 3.0 Coverage

Description

AncestorEvent

AncestorListener

AncestorEvent occurs when there is a change to ancestor happens.

AncestorListener listens for AncestorEvent.

Not Converted

These have no equivalent in .NET Framework.

CaretEvent

CaretListener

CaretEvent occurs when text caret has changed.

CaretListener listens for changes in the caret position of a text component.

Not Converted

These have no equivalent in .NET Framework.

ChangeEvent

ChangeListener

ChangeEvent occurs when state has changed in the event source.

ChangeListener listens for ChangeEvents.

Partially Converted

Only JSlider and JTabbedPane are converted to System.Windows.Forms.TrackBar.ValueChanged and System.Windows.Forms.TabControl.SelectedIndexChanged.

HyperlinkEvent

HyperlinkListener

HyperlinkEvent occurs when something has happened with respect to a hypertext link.

HyperlinkListener listens for HyperlinkEvent

Partially Converted

Only JEditorPane is converted to System.Windows.Forms.RichTextBox.LinkClicked.

InternalFrameEvent

InternalFrameListener

InternalFrameEvent adds support for JInternalFrame objects as the event source.

InternalFrameListener is the listener interface for receiving internal frame events.

Partially

Converted

JInternalFrame is converted. Messages Deiconified and Iconified are not supported.

javax.swing.Action

Action interface provides a useful extension to the ActionListener interface in cases where the same functionality may be accessed by several controls.

Partially

Converted

Only actionPerformed is converted.

ListDataEvent

ListDataListener

ListDataEvent occurs when list changes.

ListDataListener listens for changes in list.

Not Converted

These have no equivalent in .NET Framework.

ListSelectionEvent

ListSelectionListener

ListSelectionEvent occurs when a change in the current selection occurs.

ListSelectionListener listens for lists selection value changes.

Partially

Converted

Only JList is converted to System.Windows.Forms.ListBox.SelectedValueChanged.

MenuDragMouseEvent

MenuDragMouseListener

MenuDragMouseEvent occurs when menu element has received a MouseEvent under drag conditions.

MenuDragMouseListener listens for MenuDragMouseEvent.

Not Converted

These have no equivalent in .NET Framework.

MenuEvent

MenuListener

MenuEvent occurs when a menu has been posted or selected or canceled.

MenuListener listener for menu events.

Partially Converted

JMenu (message Selected) is converted to System.Windows.Forms.MenuItem.Select.

MenuKeyEvent

MenuKeyListener

MenuKeyEvent occurs when menu element has received a KeyEvent forwarded to it in a menu tree.

MenuKeyListener listens for MenuKeyListener.

Not Converted

These have no equivalent in .NET Framework.

PopupMenuEvent

PopupMenuListener

PopupMenuEvent occurs with regarding to JPopupMenu.

PopupMenuListener listens for PopupMenuEvent.

Partially

Converted

JPopupMenu is converted to System.Windows.Forms.ContextMenu.Popup (message WillBecomeVisible)

PropertyChangeEvent

PropertyChangeListener

PropertyChangeEvent occurs whenever a bean changes a "bound" or "constrained" property.

PropertyChangeListener listens for PropertyChangeEvent.

Not Converted

These have no equivalent in .NET Framework.

TableColumnModelEvent

TableColumnModelListener

TableColumnModelEvent occurs when a table column has been added or moved or removed.

TableColumnModelListener listens to changes in a TableColumnModel.

Partially

Converted

Only converted for messages Added/Removed to System.Data.DataColumnCollection.CollectionChanged.

TableModelEvent

TableModelListener

TableModelEvent occurs when a table model has changed.

TableModelListener listens to changes in a Table Model.

Converted

AbstractTableModel is converted to System.Data.DataTable.RowChanged.

TreeExpansionEvent

TreeExpansionListener

TreeExpansionEventoccurs when a tree expands or collapses a node.

TreeExpansionListener listens for TreeExpansionEvent.

Converted

Converted to System.Windows.Forms.TreeView.BeforeExpand,

System.Windows.Forms.TreeView.BeforeCollapse,

System.Windows.Forms.TreeView.AfterExpand and

System.Windows.Forms.TreeView.AfterCollapse.

TreeModelEvent

TreeModelListener

TreeModelEvent occurs when tree model has changed.

TreeModelListener listens to changes in a TreeModel.

Not Converted

These have no equivalent in .NET Framework.

TreeSelectionEvent

TreeSelectionListener

TreeSelectionEvent occurs when the selection in a TreeSelectionModel changes.

TreeSelectionListener listens for TreeSelectionEvent.

Converted

JTree is converted through System.Windows.Forms.TreeView.AfterSelect.

UndoableEditEvent

UndoableEditListener

UndoableEditEvent occurs when operation that can be undone has occurred.

UndoableEditListener listens for undoable operations.

Not Converted

These have no equivalent in .NET Framework.

Table 29: Java Event Model Conversion Coverage (3) – Package javax.swing.event

Issues

Issue

Description

Events Equivalence And

Event Handling Behavior

In some cases, Java’s events behave differently to .NET Framework’s equivalent ones in the sense: the events are fired and handled on corresponding controls. So, the behavior of converted applications could be different since the status of the .NET Framework controls slightly differs.

Thus, the stabilization of converted applications –in event handling issues- could require reviewing the .NET framework documentation to learn about the specific events used on the application, their collateral effects and the way they are fired and handled on respective controls.

EventObject.getSource()

In Java, the use of method java.util.EventObject.getSource() is to identify the event firing a component.

In .NET Framework, the sender of the event is passed as parameter to the event handling method.

Invocations to getSource() are converted only within event-handling methods (in Java, listener’s methods).

So, conversion for method getSource() could require user-intervention if it is up to 2 level of depth. A workaround could require modifying the arguments of the respective routines to the expected correct parameters sent from the event handling routine.

Event Queue Managing And

Low-Level Event Handling

Accessing of system event queue is converted because there is no centralized mechanism to read events from a queue and post them.

Also, low-level event handling –also known as containment model- is not converted in .NET Framework because the heavy centralization and the lack of modularity inherent in this Java’s model, makes it a very particular way to handle events.

General Issues

Java Event Model conversion is mostly based on source code patterns. Java’s event notification –through listeners and adapters- is converted to .NET Framework through events and delegates.

In .NET Framework, listener and adapter classes are not essential. However, their methods are converted to delegates through delegate System.EventHandler. In this way, the same source methods are notified when events occur. In .NET Framework, Event “listener registration” is performed attaching event handlers (delegates) to the corresponding events.

User Raised Events

Events programmatically-raised by the user (not by the GUI normal interaction) through method dispatchEvent() are not completely converted. Only ActionEvent and ItemEvent (for Button, MenuItem and CheckboxMenuItem) are converted through method PerformClick.

Remaining user raised events have no equivalent in .NET Framework. A workaround could require designing another way of event notification.

Table 30: Java Event Model Conversion Issues