Skip to content

Commit f607ba4

Browse files
hansonrhansonr
authored andcommitted
correcting AWT Choice event differences with Swing
1 parent 8d321ed commit f607ba4

File tree

4 files changed

+36
-14
lines changed

4 files changed

+36
-14
lines changed

sources/net.sf.j2s.java.core/src/javax/swing/DefaultComboBoxModel.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
public class DefaultComboBoxModel<E> extends AbstractListModel<E> implements MutableComboBoxModel<E> {
4141
Vector<E> objects;
4242
Object selectedObject;
43+
private boolean _isQuiet;
4344

4445
/**
4546
* Constructs an empty DefaultComboBoxModel object.
@@ -92,7 +93,8 @@ public void setSelectedItem(Object anObject) {
9293
if ((selectedObject != null && !selectedObject.equals( anObject )) ||
9394
selectedObject == null && anObject != null) {
9495
selectedObject = anObject;
95-
fireContentsChanged(this, -1, -1);
96+
if (!_isQuiet)
97+
fireContentsChanged(this, -1, -1);
9698
}
9799
}
98100

@@ -134,10 +136,11 @@ public void addElement(E anObject) {
134136
objects.addElement(anObject);
135137
fireIntervalAdded(this,objects.size()-1, objects.size()-1);
136138
if ( objects.size() == 1 && selectedObject == null && anObject != null ) {
137-
setSelectedItem( anObject );
139+
_setSelectedItemQuiet(anObject);
138140
}
139141
}
140142

143+
141144
// implements javax.swing.MutableComboBoxModel
142145
@Override
143146
public void insertElementAt(E anObject,int index) {
@@ -148,14 +151,9 @@ public void insertElementAt(E anObject,int index) {
148151
// implements javax.swing.MutableComboBoxModel
149152
@Override
150153
public void removeElementAt(int index) {
151-
if ( getElementAt( index ) == selectedObject ) {
152-
if ( index == 0 ) {
153-
setSelectedItem( getSize() == 1 ? null : getElementAt( index + 1 ) );
154-
}
155-
else {
156-
setSelectedItem( getElementAt( index - 1 ) );
157-
}
158-
}
154+
if ( getElementAt( index ) == selectedObject )
155+
_setSelectedItemQuiet(index > 0 ? getElementAt( index - 1 )
156+
: getSize() == 1 ? null : getElementAt( index + 1 ) );
159157

160158
objects.removeElementAt(index);
161159

@@ -185,4 +183,10 @@ public void removeAllElements() {
185183
selectedObject = null;
186184
}
187185
}
186+
187+
void _setSelectedItemQuiet(Object o) {
188+
_isQuiet = (/**@j2sNative !!this.isAWT$ || */false);
189+
setSelectedItem( o );
190+
_isQuiet = false;
191+
}
188192
}

sources/net.sf.j2s.java.core/src/javax/swing/JComboBox.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,9 @@ public void setModel(ComboBoxModel aModel) {
305305
}
306306
dataModel = aModel;
307307
dataModel.addListDataListener(this);
308+
/** @j2sNative
309+
* aModel.isAWT$ = this.isAWT$
310+
*/
308311

309312
// set the current selected item.
310313
selectedItemReminder = dataModel.getSelectedItem();
@@ -544,7 +547,8 @@ public ComboBoxEditor getEditor() {
544547
* preferred: true
545548
* description: Sets the selected item in the JComboBox.
546549
*/
547-
public void setSelectedItem(Object anObject) {
550+
@SuppressWarnings("unused")
551+
public void setSelectedItem(Object anObject) {
548552
Object oldSelection = selectedItemReminder;
549553
Object objectToSelect = anObject;
550554
if (oldSelection == null || !oldSelection.equals(anObject)) {
@@ -569,7 +573,11 @@ public void setSelectedItem(Object anObject) {
569573
// Must toggle the state of this flag since this method
570574
// call may result in ListDataEvents being fired.
571575
selectingItem = true;
572-
dataModel.setSelectedItem(objectToSelect);
576+
if (_trigger || /** @j2sNative !this.isAWT$ &&*/true) {
577+
dataModel.setSelectedItem(objectToSelect);
578+
} else {
579+
((DefaultComboBoxModel)dataModel)._setSelectedItemQuiet(objectToSelect);
580+
}
573581
selectingItem = false;
574582

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

10261034
private Action action;
10271035
private PropertyChangeListener actionPropertyChangeListener;
1036+
protected boolean _trigger;
10281037

10291038
/**
10301039
* Sets the <code>Action</code> for the <code>ActionEvent</code> source.
@@ -1268,7 +1277,7 @@ protected void fireActionEvent() {
12681277
* or override.
12691278
*/
12701279
protected void selectedItemChanged() {
1271-
if (selectedItemReminder != null ) {
1280+
if (selectedItemReminder != null && /** @j2sNative !this.isAWT$ && */true) {
12721281
fireItemStateChanged(new ItemEvent(this,ItemEvent.ITEM_STATE_CHANGED,
12731282
selectedItemReminder,
12741283
ItemEvent.DESELECTED));
@@ -1587,6 +1596,10 @@ protected String paramString() {
15871596
",selectedItemReminder=" + selectedItemReminderString;
15881597
}
15891598

1599+
public void _setTrigger(boolean b) {
1600+
_trigger = b;
1601+
}
1602+
15901603

15911604
///////////////////
15921605
// Accessibility support

sources/net.sf.j2s.java.core/src/swingjs/a2s/Choice.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.awt.Color;
44
import java.awt.event.ItemEvent;
55

6+
import javax.swing.DefaultComboBoxModel;
67
import javax.swing.JComboBox;
78

89
public class Choice extends JComboBox {
@@ -69,6 +70,8 @@ protected void fireActionEvent() {
6970

7071
@Override
7172
protected void fireItemStateChanged(ItemEvent event) {
73+
if (!_trigger)
74+
return;
7275
A2SEvent.addListener(this);
7376
super.fireItemStateChanged(event);
7477
}

sources/net.sf.j2s.java.core/src/swingjs/plaf/JSComboBoxUI.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,11 @@ public void setEnabled(boolean b) {
6262
@Override
6363
public boolean handleJSEvent(Object target, int eventType, Object jQueryEvent) {
6464
switch (eventType) {
65-
case -1:
65+
case SOME_MOUSE_EVENT:
6666
int index = PT.parseInt("" + DOMNode.getAttr(domNode, "selectedIndex"));
67+
comboBox._setTrigger(true);
6768
comboBox.setSelectedIndex(index);
69+
comboBox._setTrigger(false);
6870
break;
6971
}
7072
return HANDLED;

0 commit comments

Comments
 (0)