diff --git a/src/main/java/info/istlab/ServerTester/NetworkInterfaceSelector.java b/src/main/java/info/istlab/ServerTester/NetworkInterfaceSelector.java index 8851e1d..db9302e 100644 --- a/src/main/java/info/istlab/ServerTester/NetworkInterfaceSelector.java +++ b/src/main/java/info/istlab/ServerTester/NetworkInterfaceSelector.java @@ -1,5 +1,8 @@ package info.istlab.ServerTester; +import java.awt.Dimension; +import java.awt.Point; +import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.InetAddress; @@ -8,9 +11,13 @@ import java.net.SocketException; import java.util.ArrayList; import java.util.Enumeration; +import java.util.Hashtable; import java.util.List; +import javax.swing.BoxLayout; +import javax.swing.JButton; import javax.swing.JDialog; +import javax.swing.JFrame; public class NetworkInterfaceSelector extends JDialog implements ActionListener { @@ -21,21 +28,45 @@ return ipv4interfaces.get(0); } else { // 複数のインターフェースがある場合、ユーザに選択させる - NetworkInterface[] interfaces = new NetworkInterface[ipv4interfaces.size()]; - for (int i = 0; i < ipv4interfaces.size(); i++) { - interfaces[i] = ipv4interfaces.get(i); - } - // NetworkInterface selectedInterface = (NetworkInterface) - // JOptionPane.showInputDialog(null, "Select a network interface", "Select a - // network interface", JOptionPane.QUESTION_MESSAGE, null, interfaces, - // interfaces[0]); - // return selectedInterface; - return null; + NetworkInterfaceSelector selector = new NetworkInterfaceSelector(ipv4interfaces); + NetworkInterface ni = selector.getSelectedInterface(); + return ni; } } - public NetworkInterfaceSelector() { + static JFrame dummy; + ArrayList interfaces; + NetworkInterface selectedInterface; + Hashtable hash; + boolean okClicked = false; + public NetworkInterfaceSelector(ArrayList interfaces) { + super(dummy = new JFrame("Notice !! Click Here !!"), "ネットワークインタフェースを選択してください", true); + this.interfaces = interfaces; + + getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); + hash = new Hashtable(); + for (NetworkInterface obj : interfaces) { + 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(centerOfScreen(getSize())); + } + + public NetworkInterface getSelectedInterface() { + return selectedInterface; } public static ArrayList getIPv4Interfaces() { @@ -78,7 +109,10 @@ @Override public void actionPerformed(ActionEvent e) { - throw new UnsupportedOperationException("Unimplemented method 'actionPerformed'"); + selectedInterface = hash.get(e.getActionCommand()); + okClicked = true; + dispose(); + dummy.dispose(); } public static InetAddress getPrimaryInetAddr(NetworkInterface primaryInterface) { @@ -91,4 +125,9 @@ } return null; } + + public static Point centerOfScreen(Dimension winSize) { + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + return new Point((screenSize.width - winSize.width) / 2, (screenSize.height - winSize.height) / 2); + } }