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; static JFrame dummy; public FolderSelector(ArrayList<E> opts, String message, String _messageIfZero) { super(dummy = new JFrame("Notice !! Click Here !!"), message, true); options = opts; messageIfZero = _messageIfZero; getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); if (opts.size() == 0) setTitle(_messageIfZero); // 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; if (options.size() == 1) { okClicked = true; selectedItem = options.get(0); } else { dummy.setSize(300, 50); dummy.setLocation(getLocation().x + 30, getLocation().y - 30); dummy.setVisible(true); setVisible(true); // toFront(); setAlwaysOnTop(true); // java.awt.EventQueue.invokeLater(new Runnable() { // @Override // public void run() { // toFront(); // repaint(); // } // }); } 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(); dummy.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); // } }