Java Swing How to - Make JList behave on click the same way as on ctrl+click








Question

We would like to know how to make JList behave on click the same way as on ctrl+click.

Answer

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
/*from  w  w w .ja va2  s. c o  m*/
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;

public class Main {
  public static void main(String[] args) {
    String[] items = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };
    JList<String> myJList = new JList(items) {
      @Override
      protected void processMouseEvent(MouseEvent e) {
        int modifiers = e.getModifiers() | InputEvent.CTRL_MASK;
        int modifiersEx = e.getModifiersEx() | InputEvent.CTRL_MASK;
        MouseEvent myME = new MouseEvent((Component) e.getSource(), e.getID(),
            e.getWhen(), modifiers, e.getX(), e.getY(), e.getXOnScreen(),
            e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(),
            e.getButton());
        super.processMouseEvent(myME);
      }
    };
    JFrame f = new JFrame();
    f.add(new JScrollPane(myJList));
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}