Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
correcting AWT Choice event differences with Swing
  • Loading branch information
hansonr authored and hansonr committed Mar 23, 2019
commit f607ba48333d662679d9b8afa1bc76f1bf619877
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
public class DefaultComboBoxModel<E> extends AbstractListModel<E> implements MutableComboBoxModel<E> {
Vector<E> objects;
Object selectedObject;
private boolean _isQuiet;

/**
* Constructs an empty DefaultComboBoxModel object.
Expand Down Expand Up @@ -92,7 +93,8 @@ public void setSelectedItem(Object anObject) {
if ((selectedObject != null && !selectedObject.equals( anObject )) ||
selectedObject == null && anObject != null) {
selectedObject = anObject;
fireContentsChanged(this, -1, -1);
if (!_isQuiet)
fireContentsChanged(this, -1, -1);
}
}

Expand Down Expand Up @@ -134,10 +136,11 @@ public void addElement(E anObject) {
objects.addElement(anObject);
fireIntervalAdded(this,objects.size()-1, objects.size()-1);
if ( objects.size() == 1 && selectedObject == null && anObject != null ) {
setSelectedItem( anObject );
_setSelectedItemQuiet(anObject);
}
}


// implements javax.swing.MutableComboBoxModel
@Override
public void insertElementAt(E anObject,int index) {
Expand All @@ -148,14 +151,9 @@ public void insertElementAt(E anObject,int index) {
// implements javax.swing.MutableComboBoxModel
@Override
public void removeElementAt(int index) {
if ( getElementAt( index ) == selectedObject ) {
if ( index == 0 ) {
setSelectedItem( getSize() == 1 ? null : getElementAt( index + 1 ) );
}
else {
setSelectedItem( getElementAt( index - 1 ) );
}
}
if ( getElementAt( index ) == selectedObject )
_setSelectedItemQuiet(index > 0 ? getElementAt( index - 1 )
: getSize() == 1 ? null : getElementAt( index + 1 ) );

objects.removeElementAt(index);

Expand Down Expand Up @@ -185,4 +183,10 @@ public void removeAllElements() {
selectedObject = null;
}
}

void _setSelectedItemQuiet(Object o) {
_isQuiet = (/**@j2sNative !!this.isAWT$ || */false);
setSelectedItem( o );
_isQuiet = false;
}
}
19 changes: 16 additions & 3 deletions sources/net.sf.j2s.java.core/src/javax/swing/JComboBox.java
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,9 @@ public void setModel(ComboBoxModel aModel) {
}
dataModel = aModel;
dataModel.addListDataListener(this);
/** @j2sNative
* aModel.isAWT$ = this.isAWT$
*/

// set the current selected item.
selectedItemReminder = dataModel.getSelectedItem();
Expand Down Expand Up @@ -544,7 +547,8 @@ public ComboBoxEditor getEditor() {
* preferred: true
* description: Sets the selected item in the JComboBox.
*/
public void setSelectedItem(Object anObject) {
@SuppressWarnings("unused")
public void setSelectedItem(Object anObject) {
Object oldSelection = selectedItemReminder;
Object objectToSelect = anObject;
if (oldSelection == null || !oldSelection.equals(anObject)) {
Expand All @@ -569,7 +573,11 @@ public void setSelectedItem(Object anObject) {
// Must toggle the state of this flag since this method
// call may result in ListDataEvents being fired.
selectingItem = true;
dataModel.setSelectedItem(objectToSelect);
if (_trigger || /** @j2sNative !this.isAWT$ &&*/true) {
dataModel.setSelectedItem(objectToSelect);
} else {
((DefaultComboBoxModel)dataModel)._setSelectedItemQuiet(objectToSelect);
}
selectingItem = false;

if (selectedItemReminder != dataModel.getSelectedItem()) {
Expand Down Expand Up @@ -1025,6 +1033,7 @@ public String getActionCommand() {

private Action action;
private PropertyChangeListener actionPropertyChangeListener;
protected boolean _trigger;

/**
* Sets the <code>Action</code> for the <code>ActionEvent</code> source.
Expand Down Expand Up @@ -1268,7 +1277,7 @@ protected void fireActionEvent() {
* or override.
*/
protected void selectedItemChanged() {
if (selectedItemReminder != null ) {
if (selectedItemReminder != null && /** @j2sNative !this.isAWT$ && */true) {
fireItemStateChanged(new ItemEvent(this,ItemEvent.ITEM_STATE_CHANGED,
selectedItemReminder,
ItemEvent.DESELECTED));
Expand Down Expand Up @@ -1587,6 +1596,10 @@ protected String paramString() {
",selectedItemReminder=" + selectedItemReminderString;
}

public void _setTrigger(boolean b) {
_trigger = b;
}


///////////////////
// Accessibility support
Expand Down
3 changes: 3 additions & 0 deletions sources/net.sf.j2s.java.core/src/swingjs/a2s/Choice.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.awt.Color;
import java.awt.event.ItemEvent;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;

public class Choice extends JComboBox {
Expand Down Expand Up @@ -69,6 +70,8 @@ protected void fireActionEvent() {

@Override
protected void fireItemStateChanged(ItemEvent event) {
if (!_trigger)
return;
A2SEvent.addListener(this);
super.fireItemStateChanged(event);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,11 @@ public void setEnabled(boolean b) {
@Override
public boolean handleJSEvent(Object target, int eventType, Object jQueryEvent) {
switch (eventType) {
case -1:
case SOME_MOUSE_EVENT:
int index = PT.parseInt("" + DOMNode.getAttr(domNode, "selectedIndex"));
comboBox._setTrigger(true);
comboBox.setSelectedIndex(index);
comboBox._setTrigger(false);
break;
}
return HANDLED;
Expand Down