package info.istlab.IoTP; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Hashtable; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JOptionPane; public class FolderSelector<E> extends JDialog implements ActionListener { ArrayList<E> options; Hashtable<String, E> hash; String messageIfZero; boolean okClicked = false; E selectedItem; public FolderSelector(ArrayList<E> opts, String message, String _messageIfZero) { super(new JFrame(), message, true); options = opts; messageIfZero = _messageIfZero; getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); // add(new JLabel(message)); hash = new Hashtable<String, E>(); for (E obj : options) { String label = obj.toString(); JButton b = new JButton(label); b.addActionListener(this); add(b); hash.put(label, obj); } JButton cancelB; cancelB = new JButton("cancel"); cancelB.addActionListener(e -> { okClicked = false; System.out.println("Cancel is clicked."); dispose(); }); add(cancelB); pack(); setLocation(SerialWindow.centerOfScreen(getSize())); } public boolean showDialog() { okClicked = false; setVisible(true); return okClicked; } public E getSelectedItem() { if (showDialog()) { if (options.size() == 0) { JOptionPane.showMessageDialog(null, messageIfZero); return null; } else if (options.size() == 1) { return options.get(0); } else { return selectedItem; } } return null; } @Override public void actionPerformed(ActionEvent e) { selectedItem = hash.get(e.getActionCommand()); okClicked = true; dispose(); // SerialPort selectedsp = SerialPort.getCommPort(e.getActionCommand()); // SerialWindow sw = new SerialWindow(selectedsp); // SerialWindow.hash.put(selectedsp.getSystemPortName(), sw); // frame.setVisible(false); } // public static void show(ArrayList<E> opts) { // JFrame jf = frame = new JFrame("Select SerialPort"); // jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // jf.getContentPane().add(new FolderSelector<E>(opts)); // jf.pack(); // 内容物でサイズを自動設定する // Dimension winSize = jf.getSize(); // jf.setLocation(SerialWindow.centerOfScreen(winSize)); // jf.setVisible(true); // } }