Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8040621

ItemListener not invoked on java.awt.Choice

XMLWordPrintable

      FULL PRODUCT VERSION :
      java version " 1.7.0_21 "
      Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
      Java HotSpot(TM) Client VM (build 23.21-b01, mixed mode, sharing)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows XP [Version 5.1.2600]

      A DESCRIPTION OF THE PROBLEM :
      In a Choice control, after selecting a value " A " using the mouse then selecting a value " B " programmatically then selecting a value " A " again using the mouse, no ItemListeners will be invoked. It seems, the component peer still thinks value " A " is selected after value " B " is programmatically selected (and correctly displayed in the control).

      REGRESSION. Last worked in version 6u45

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Use the attached example. It will display a Choice control with three options, option " one " is selected. If you select option " three " , the selection will be reset to option " one " . Each time the ItemListener is invoked, the selected option along with a timestamp will be printed in a label at the bottom of the frame.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Each time you select " three " the selection should be reset to " one " .
      This is the behavior in JRE6.
      ACTUAL -
      The first time you select " three " the selection will be reset to " one " . Selecting " three " again the selection will remain. When selecting another option ( " one " or " two " ) then selecting " three " the selection will be reset once again.


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.awt.*;
      import java.awt.event.*;

      public class ChoiceBug extends Frame {

      Choice choice;
      Label label;

      ChoiceBug() {
      super( " Choice Bug " );

      setSize(300, 200);
      setLayout(null);

      choice = new Choice();
      choice.setSize(150, 30);
      choice.setLocation(10, 50);
      add(choice);

      label = new Label();
      label.setSize(250, 30);
      label.setLocation(10, 150);
      add(label);

      choice.addItem( " one " );
      choice.addItem( " two " );
      choice.addItem( " three " );
      choice.addItemListener(new ItemListener() {

      public void itemStateChanged(ItemEvent e) {
      label.setText((int)System.currentTimeMillis() + " : " + e.getItem());
      if(choice.getSelectedIndex() == 2)
      choice.select(0);
      }
      });

      addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
      System.exit(0);
      }
      });
      }

      public static void main(String args[]) {
      new ChoiceBug().setVisible(true);
      }

      }
      ---------- END SOURCE ----------

            dmarkov Dmitry Markov
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: