2626import processing .mode .java .JavaEditor ;
2727
2828import javax .swing .*;
29+ import javax .swing .event .ChangeEvent ;
30+ import javax .swing .event .ChangeListener ;
2931import java .awt .event .ActionEvent ;
3032import java .awt .event .ActionListener ;
3133import java .io .File ;
@@ -48,7 +50,7 @@ public UpdateDeviceListTask(JMenu deviceMenu) {
4850 public void run () {
4951 final Devices devices = Devices .getInstance ();
5052 java .util .List <Device > deviceList = devices .findMultiple (false );
51- String selectedDeviceId = devices .getSelectedDeviceId ();
53+ Device selectedDevice = devices .getSelectedDevice ();
5254
5355 if (deviceList .size () == 0 ) {
5456 if (deviceMenu .getItem (0 ).isEnabled ()) {
@@ -58,45 +60,54 @@ public void run() {
5860 deviceMenu .add (noDevicesItem );
5961 }
6062
61- devices .setSelectedDeviceId (null );
63+ devices .setSelectedDevice (null );
6264 } else {
6365 deviceMenu .removeAll ();
64- JMenuItem deviceItem ;
6566
66- if (selectedDeviceId == null ) {
67- selectedDeviceId = deviceList .get (0 ). getId ( );
68- devices .setSelectedDeviceId ( selectedDeviceId );
67+ if (selectedDevice == null ) {
68+ selectedDevice = deviceList .get (0 );
69+ devices .setSelectedDevice ( selectedDevice );
6970 } else {
7071 // check if selected device is still connected
7172 boolean found = false ;
7273 for (Device device : deviceList ) {
73- if (device .getId (). equals (selectedDeviceId )) {
74+ if (device .equals (selectedDevice )) {
7475 found = true ;
7576 break ;
7677 }
7778 }
7879
7980 if (!found ) {
80- selectedDeviceId = deviceList .get (0 ). getId ( );
81- devices .setSelectedDeviceId ( selectedDeviceId );
81+ selectedDevice = deviceList .get (0 );
82+ devices .setSelectedDevice ( selectedDevice );
8283 }
8384 }
8485
8586 for (final Device device : deviceList ) {
86- deviceItem = new JMenuItem (device .getName ());
87+ final JCheckBoxMenuItem deviceItem = new JCheckBoxMenuItem (device .getName ());
8788 deviceItem .setEnabled (true );
89+
90+ if (device .equals (selectedDevice )) deviceItem .setState (true );
91+
92+ // prevent checkboxmenuitem automatic state changing onclick
93+ final Device finalSelectedDevice = selectedDevice ;
94+ deviceItem .addChangeListener (new ChangeListener () {
95+ @ Override
96+ public void stateChanged (ChangeEvent e ) {
97+ if (device .equals (finalSelectedDevice )) deviceItem .setState (true );
98+ }
99+ });
100+
88101 deviceItem .addActionListener (new ActionListener () {
89102 @ Override
90103 public void actionPerformed (ActionEvent e ) {
91- devices .setSelectedDeviceId (device . getId () );
104+ devices .setSelectedDevice (device );
92105 }
93106 });
94107
95108 deviceMenu .add (deviceItem );
96109 }
97110 }
98-
99- deviceMenu .updateUI ();
100111 }
101112 }
102113
0 commit comments