MainClass.java Source code

Java tutorial

Introduction

Here is the source code for MainClass.java

Source

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.Vector;

import javax.swing.AbstractAction;
import javax.swing.ComboBoxEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.plaf.ComboBoxUI;

public class MainClass extends JFrame {
    JComboBox jcb;

    MainClass(String title) {
        super(title);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel jp = new JPanel();

        Vector v = new Vector();
        v.add("A");
        v.add("B");
        v.add("C");

        jcb = new JComboBox(v);
        jcb.setEditable(true);

        jcb.getActionMap().put("selectNext", new DownAction());

        jp.setPreferredSize(new Dimension(200, 35));
        jp.add(jcb);
        getContentPane().add(jp);

        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new MainClass("Binding Demo3");
    }
}

class DownAction extends AbstractAction {
    public void actionPerformed(ActionEvent e) {
        JComboBox jcb = (JComboBox) e.getSource();
        System.out.println("down action");
        ComboBoxUI ui = jcb.getUI();

        if (ui.isPopupVisible(jcb)) {
            int i = jcb.getSelectedIndex();
            if (i < jcb.getModel().getSize() - 1) {
                jcb.setSelectedIndex(i + 1);
                jcb.repaint();
            }
        } else {
            int nItems = jcb.getItemCount();

            ComboBoxEditor cbe = jcb.getEditor();

            String st; // Search text

            st = ((String) cbe.getItem()).toUpperCase();

            for (int i = 0; i < nItems; i++) {
                String item = ((String) jcb.getItemAt(i)).toUpperCase();

                if (item.startsWith(st)) {
                    jcb.setSelectedIndex(i);
                    break;
                }
            }

            ui.setPopupVisible(jcb, true);
        }
    }
}