// -*- mode:java; encoding:utf-8 -*-
// vim:set fileencoding=utf-8:
// @homepage@

package example;

import java.awt.*;
import java.awt.event.MouseWheelListener;
import javax.swing.*;

public final class MainPanel extends JPanel {
  private MainPanel() {
    super(new BorderLayout());
    JPanel p = new JPanel(new GridBagLayout());
    p.setBorder(BorderFactory.createTitledBorder("JComboBox"));
    GridBagConstraints c = new GridBagConstraints();

    c.gridx = 0;
    c.insets = new Insets(5, 5, 5, 0);
    c.anchor = GridBagConstraints.LINE_END;
    p.add(new JLabel("Wheel:"), c);
    p.add(new JLabel("Normal:"), c);

    c.gridx = 1;
    c.weightx = 1d;
    c.fill = GridBagConstraints.HORIZONTAL;
    p.add(makeComboBox(), c);
    p.add(new JComboBox<>(makeModel()), c);

    JTextArea textArea = new JTextArea();
    textArea.setText("dummy");
    add(p, BorderLayout.NORTH);
    add(new JScrollPane(textArea));
    setPreferredSize(new Dimension(320, 240));
  }

  private static JComboBox<String> makeComboBox() {
    return new JComboBox<String>(makeModel()) {
      private transient MouseWheelListener handler;
      @Override public void updateUI() {
        removeMouseWheelListener(handler);
        super.updateUI();
        handler = e -> {
          JComboBox<?> source = (JComboBox<?>) e.getComponent();
          if (!source.hasFocus()) {
            return;
          }
          int ni = source.getSelectedIndex() + e.getWheelRotation();
          if (ni >= 0 && ni < source.getItemCount()) {
            source.setSelectedIndex(ni);
          }
        };
        addMouseWheelListener(handler);
      }
    };
  }

  private static ComboBoxModel<String> makeModel() {
    DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
    model.addElement("111111");
    model.addElement("22222222");
    model.addElement("3333333333");
    model.addElement("444444444444");
    model.addElement("5555555");
    model.addElement("66666666666");
    model.addElement("77777777");
    model.addElement("88888888888");
    return model;
  }

  public static void main(String[] args) {
    EventQueue.invokeLater(MainPanel::createAndShowGui);
  }

  private static void createAndShowGui() {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
      ex.printStackTrace();
      Toolkit.getDefaultToolkit().beep();
    }
    JFrame frame = new JFrame("@title@");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.getContentPane().add(new MainPanel());
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}

@@ -821,39 +821,8 @@
 ();%0A
-    textArea.setText(%22dummy%22);%0A
     
@@ -1238,44 +1238,21 @@
     
-J
 Com
-boBox%3C?%3E source = (JComboBox%3C?%3E)
+ponent c =
  e.g
@@ -1284,15 +1284,9 @@
 if (
-!source
+c
 .has
@@ -1296,44 +1296,91 @@
 us()
-) %7B%0A            return;%0A          %7D%0A
+ && c instanceof JComboBox) %7B%0A            JComboBox%3C?%3E combo = (JComboBox%3C?%3E) c;%0A  
     
@@ -1393,19 +1393,19 @@
 int 
-ni = source
+idx = combo
 .get
@@ -1458,14 +1458,17 @@
     
+  
 if (
-n
 i
+dx
  %3E= 
@@ -1476,19 +1476,19 @@
  && 
-ni %3C source
+idx %3C combo
 .get
@@ -1518,14 +1518,15 @@
     
-source
+  combo
 .set
@@ -1543,12 +1543,27 @@
 dex(
-ni);
+idx);%0A            %7D
 %0A   

add instanceof check