diff --git a/src/main/java/info/istlab/ServerTester/MulticastReceiver.java b/src/main/java/info/istlab/ServerTester/MulticastReceiver.java index 534d812..a1c92fe 100644 --- a/src/main/java/info/istlab/ServerTester/MulticastReceiver.java +++ b/src/main/java/info/istlab/ServerTester/MulticastReceiver.java @@ -13,6 +13,7 @@ Thread thread; MulticastSocket socket; MulticastSender sender; + RemoteHostsWindow remoteHostsWindow; // 受信したデータを IP アドレスをキーにして保存 Hashtable receivedData = new Hashtable(); @@ -28,6 +29,7 @@ thread = new Thread(this); thread.start(); sender = new MulticastSender(portNum); + remoteHostsWindow = new RemoteHostsWindow(receivedData); } public void run(){ @@ -43,9 +45,12 @@ } String addr = packet.getAddress().getHostAddress(); String message = new String(packet.getData(), 0, packet.getLength()); - receivedData.put(addr, message); - System.out.println(addr+"からの受信: " + message); + receivedData.put(addr, message); + if (remoteHostsWindow != null) { + remoteHostsWindow.updateData(addr, message); + } + // System.out.println(addr+"からの受信: " + message); } } public void stop(){ @@ -59,6 +64,10 @@ JOptionPane.showMessageDialog(Host.mainhost, "受信したデータがありません。", "受信データなし", JOptionPane.WARNING_MESSAGE); return; } - new RemoteHostsWindow(receivedData); + if (remoteHostsWindow != null) { + remoteHostsWindow.setVisible(true); + } else { + remoteHostsWindow = new RemoteHostsWindow(receivedData); + } } } diff --git a/src/main/java/info/istlab/ServerTester/RemoteHostsWindow.java b/src/main/java/info/istlab/ServerTester/RemoteHostsWindow.java index 4244704..6404302 100644 --- a/src/main/java/info/istlab/ServerTester/RemoteHostsWindow.java +++ b/src/main/java/info/istlab/ServerTester/RemoteHostsWindow.java @@ -1,5 +1,6 @@ package info.istlab.ServerTester; +import java.awt.BorderLayout; import java.awt.Color; import java.awt.Desktop; import java.io.IOException; @@ -16,14 +17,14 @@ import javax.swing.JTabbedPane; public class RemoteHostsWindow extends JPanel { - + JTabbedPane tabbedPane; public RemoteHostsWindow(Hashtable receivedData) { JFrame frame = new JFrame(); - frame.setTitle("Remote Hosts (自動更新はしません)"); + frame.setTitle("Remote Hosts"); frame.setSize(300, 200); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - JTabbedPane tabbedPane = new JTabbedPane(); + tabbedPane = new JTabbedPane(); frame.getContentPane().add(tabbedPane); Iterator it = receivedData.keySet().iterator(); while (it.hasNext()) { @@ -35,6 +36,14 @@ frame.pack(); frame.setVisible(true); } + + public void updateData(String addr, String value) { + JPanel panel = (JPanel)tabbedPane.getComponentAt(tabbedPane.indexOfTab(addr)); + panel.add(new RemoteHostPanel(addr, value), BorderLayout.CENTER); + tabbedPane.validate(); + tabbedPane.repaint(); + System.out.println("Tab updated "+addr); + } } class RemoteHostPanel extends JPanel {