package ch.epfl.lca.sc250.gui; import java.awt.BorderLayout; import java.util.Vector; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; /** * This Class is used to display UDP Broadcast Messages sent from the Server to the Client. <br> * The Client should create a CnFrameUDP Instance and call the method "appendBroadcastMessage" * each time an UDP Broadcast is received.<br> * <pre>Example: * * CnFrameUDP cnFrameUDP = new CnFrameUDP("Networking Course"); * while(true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } cnFrameUDP.appendBroadcastMessage("192.168.1.5", "****X***X****X"); } * </pre> * @author Christophe Trefois * */ public class CnFrameUDP extends CnFrame { /** * Generated serialID by Eclipse */ private static final long serialVersionUID = 2774784580042117224L; /** * Vector containing the table rows data */ private Vector tableRows; /** * Vector containing the column names. Filled with addColumns. */ private Vector columns; /** * Array containing the column names */ private static final String[] columnNames = {"Received At", "User ID", "IP Address", "Letters"}; /** * tableModel used by the Table */ private DefaultTableModel tableModel; /** * The table used to display the broadcast messages */ private JTable broadcastTable; /** * Constructs a CnFrameUDP Instance with title windowTitle * @param windowTitle The Title if the window */ public CnFrameUDP(String windowTitle) { super(windowTitle); // Create new JPanel JPanel centerPanel = new JPanel(); // Fill the columns Vector addColumns(columnNames); tableModel = new DefaultTableModel(); tableModel.setDataVector(tableRows, columns); // create new JPanel broadcastTable = new JTable(tableModel); broadcastTable.getColumnModel().getColumn(0).setCellRenderer(new CellRenderer()); broadcastTable.getColumnModel().getColumn(1).setCellRenderer(new CellRenderer()); broadcastTable.getColumnModel().getColumn(2).setCellRenderer(new CellRenderer()); broadcastTable.getColumnModel().getColumn(3).setCellRenderer(new CellRenderer()); // Add ScrollBar to the broadcastTable JScrollPane scrollPane = new JScrollPane(broadcastTable); centerPanel.add(scrollPane); // put the centerPanel to the Center getContentPane().add(centerPanel, BorderLayout.CENTER); // Pack pack(); // Make this frame visible setVisible(true); } /** * Fill the column name vector * @param columnNames the array of Strings to fill the vector with */ private void addColumns(String[] columnNames) { // Init tableRows and columns Vectors tableRows = new Vector(); columns = new Vector(); for (int i = 0; i < columnNames.length; i++) columns.addElement((String) columnNames[i]); } /** * Adds a row to the JTable * @param broadcastIP The IP from the broadcast message * @param letters The Letters */ private void addRow(String broadcastIP, String userID, String letters) { Vector tempVector = new Vector(); tempVector.addElement(super.getCurrentTime()); tempVector.addElement(userID); tempVector.addElement(broadcastIP); tempVector.addElement(letters); tableRows.addElement(tempVector); broadcastTable.addNotify(); } /** * Modifies the GUI by appending the broadcast Message * @param broadcastIP the IP extracted from the broadcast UDP Message * @param broadcastLetters the letters from the UDP Broadcast */ public void appendBroadcastMessage(String broadcastIP, String userID, String broadcastLetters) { addRow(broadcastIP, userID, broadcastLetters); } /** * Clears the Table * */ public void clearTable() { tableRows.clear(); broadcastTable.addNotify(); } }