Newer
Older
IoTP / src / main / java / info / istlab / IoTP / FolderSelector.java
@motoki miura motoki miura on 13 Apr 2023 3 KB d
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);
    // }
}