package info.istlab.ServerTester; import java.awt.Color; import java.awt.Desktop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.Hashtable; import java.util.Iterator; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; public class RemoteHostsWindow extends JPanel { public RemoteHostsWindow(Hashtable<String, String> receivedData) { JFrame frame = new JFrame(); frame.setTitle("Remote Hosts (自動更新はしません)"); frame.setSize(300, 200); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); JTabbedPane tabbedPane = new JTabbedPane(); frame.getContentPane().add(tabbedPane); Iterator<String> it = receivedData.keySet().iterator(); while (it.hasNext()) { String key = it.next(); String value = receivedData.get(key); tabbedPane.add(key, new RemoteHostPanel(key, value)); } frame.setLocation(50,400); frame.pack(); frame.setVisible(true); } } class RemoteHostPanel extends JPanel { String hostip; public RemoteHostPanel(String _hostip, String value) { hostip = _hostip; setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); // System.out.println(value); String[] servers = value.split("\n"); for (String server : servers) { // ex: WebServer 8081 127.0.0.1 Running String[] info = server.split(" "); // System.out.println(server); JPanel panel = new JPanel(); panel.add(new JLabel(info[0])); panel.add(new JLabel(info[1])); JLabel addressLabel = new JLabel(info[2]); if (info[2].equals("127.0.0.1")) { addressLabel.setForeground(Color.red); } panel.add(addressLabel); panel.add(new JLabel(info[3])); JButton button = new JButton("Connect"); panel.add(button); if (info[3].equals("Running")) { button.setEnabled(true); } else { button.setEnabled(false); } button.addActionListener(e -> { // もしbind addressが0.0.0.0だったら、hostipを使う String target = info[2]; if (target.equals("0.0.0.0")) { target = hostip; } if (target.equals("127.0.0.1")) { target = hostip; } if (info[0].startsWith("Web")) { // open web browser Desktop desktop = Desktop.getDesktop(); try { desktop.browse(new URI("http://" + target + ":" + info[1])); } catch (IOException | URISyntaxException e1) { } } else if (info[0].startsWith("Echo") || info[0].startsWith("ThreadEcho")) { new JExecutor("EchoClient", info[1] + " " + target); // new EchoClient(info[1], target); } else if (info[0].startsWith("Time") || info[0].startsWith("ThreadTime")) { new JExecutor("TimeClient", info[1] + " " + target); // new TimeClient(info[1], target); } else if (info[0].startsWith("WhiteBoard")) { new JExecutor("WhiteBoardClient", info[1] + " " + target); // new WhiteBoardClient(info[1], target); } }); add(panel); } } }