001 /* 002 * NetworkSettingsDialog.java 003 * 004 * Created on October 29, 2003, 9:08 AM 005 */ 006 007 package cs101.awt; 008 009 import java.net.InetAddress; 010 import java.net.UnknownHostException; 011 012 import javax.swing.JOptionPane; 013 014 /** 015 * A dialog box that will allow the user to select wether the program should 016 * run in standalone mode, client mode or server mode. It is typically 017 * displayed before the program does anything, and in some cases it may be the 018 * first window that the user sees. This class is partly 019 * based on a similar class written by Ben Vandiver in March 2003, but has 020 * been entirely re-coded from scratch. 021 * 022 * @author Patrick G. Heck (gus.heck@olin.edu) 023 * @version $Id: NetworkSettingsDialog.java,v 1.2 2003/10/29 17:04:11 gus Exp $ 024 */ 025 public class NetworkSettingsDialog extends javax.swing.JDialog { 026 027 /** Run in standalone mode */ 028 public static final int NETWORK_NONE = 0; 029 030 /** Run as a client */ 031 public static final int NETWORK_CLIENT = 1; 032 033 /** Run as a server */ 034 public static final int NETWORK_SERVER = 2; 035 036 // default state is standalone 037 private int mode = NETWORK_NONE; 038 039 // toggles debugging output 040 private static boolean debug; 041 042 /** 043 * Creates new form NetworkSettingsDialog. 044 * 045 * @param parent The parent frame, or null if this dialog applies 046 * to the entire application, not just one frame. 047 * @param modal If true, and parent is null, the entire application 048 * will block until ok is pressed. If true and parent 049 * is defined, then only the parent window will be blocked. 050 * If false, no blocking will occur. 051 */ 052 public NetworkSettingsDialog(java.awt.Frame parent, boolean modal) { 053 super(parent, modal); 054 initComponents(); 055 } 056 057 /** This method is called from within the constructor to 058 * initialize the form. 059 * WARNING: Do NOT modify this code. The content of this method is 060 * always regenerated by the Form Editor. 061 */ 062 private void initComponents() {//GEN-BEGIN:initComponents 063 java.awt.GridBagConstraints gridBagConstraints; 064 065 modeButtons = new javax.swing.ButtonGroup(); 066 jLabel3 = new javax.swing.JLabel(); 067 jPanel1 = new javax.swing.JPanel(); 068 leftPanel = new javax.swing.JPanel(); 069 standaloneRadioButton = new javax.swing.JRadioButton(); 070 clientRadioButton = new javax.swing.JRadioButton(); 071 serverRadioButton = new javax.swing.JRadioButton(); 072 jPanel3 = new javax.swing.JPanel(); 073 hostLabel = new javax.swing.JLabel(); 074 hostTextField = new javax.swing.JTextField(); 075 portLabel = new javax.swing.JLabel(); 076 portTextField = new javax.swing.JTextField(); 077 okButton = new javax.swing.JButton(); 078 079 jLabel3.setText("jLabel3"); 080 081 setTitle("Network Settings"); 082 addWindowListener(new java.awt.event.WindowAdapter() { 083 public void windowClosing(java.awt.event.WindowEvent evt) { 084 closeDialog(evt); 085 } 086 }); 087 088 jPanel1.setLayout(new java.awt.GridBagLayout()); 089 090 jPanel1.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))); 091 leftPanel.setLayout(new javax.swing.BoxLayout(leftPanel, javax.swing.BoxLayout.Y_AXIS)); 092 093 leftPanel.setBorder(new javax.swing.border.TitledBorder("Mode")); 094 standaloneRadioButton.setText(" Standalone"); 095 standaloneRadioButton.setToolTipText("Run with no network features enabled"); 096 modeButtons.add(standaloneRadioButton); 097 standaloneRadioButton.addActionListener(new java.awt.event.ActionListener() { 098 public void actionPerformed(java.awt.event.ActionEvent evt) { 099 standaloneRadioButtonActionPerformed(evt); 100 } 101 }); 102 103 leftPanel.add(standaloneRadioButton); 104 105 clientRadioButton.setText("Client"); 106 clientRadioButton.setToolTipText("Run as a networked client"); 107 modeButtons.add(clientRadioButton); 108 clientRadioButton.addActionListener(new java.awt.event.ActionListener() { 109 public void actionPerformed(java.awt.event.ActionEvent evt) { 110 clientRadioButtonActionPerformed(evt); 111 } 112 }); 113 114 leftPanel.add(clientRadioButton); 115 116 serverRadioButton.setText("Server"); 117 serverRadioButton.setToolTipText("Run as a networked server"); 118 modeButtons.add(serverRadioButton); 119 serverRadioButton.addActionListener(new java.awt.event.ActionListener() { 120 public void actionPerformed(java.awt.event.ActionEvent evt) { 121 serverRadioButtonActionPerformed(evt); 122 } 123 }); 124 125 leftPanel.add(serverRadioButton); 126 127 gridBagConstraints = new java.awt.GridBagConstraints(); 128 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 129 jPanel1.add(leftPanel, gridBagConstraints); 130 131 jPanel3.setLayout(new java.awt.GridBagLayout()); 132 133 hostLabel.setText("Host:"); 134 hostLabel.setToolTipText("The host to connect to"); 135 hostLabel.setEnabled(false); 136 gridBagConstraints = new java.awt.GridBagConstraints(); 137 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 138 gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 139 jPanel3.add(hostLabel, gridBagConstraints); 140 141 hostTextField.setText("localhost"); 142 hostTextField.setToolTipText("Enter the host name here"); 143 hostTextField.setPreferredSize(new java.awt.Dimension(100, 19)); 144 hostTextField.setEnabled(false); 145 gridBagConstraints = new java.awt.GridBagConstraints(); 146 gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 147 jPanel3.add(hostTextField, gridBagConstraints); 148 149 portLabel.setText("Port:"); 150 portLabel.setToolTipText("The port to listen on or connect to"); 151 portLabel.setEnabled(false); 152 gridBagConstraints = new java.awt.GridBagConstraints(); 153 gridBagConstraints.gridx = 0; 154 gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 155 jPanel3.add(portLabel, gridBagConstraints); 156 157 portTextField.setText("4321"); 158 portTextField.setToolTipText("Enter the port number here"); 159 portTextField.setPreferredSize(new java.awt.Dimension(100, 19)); 160 portTextField.setEnabled(false); 161 gridBagConstraints = new java.awt.GridBagConstraints(); 162 gridBagConstraints.gridx = 1; 163 gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 164 jPanel3.add(portTextField, gridBagConstraints); 165 166 okButton.setText("OK"); 167 okButton.setMargin(new java.awt.Insets(2, 28, 2, 28)); 168 okButton.addActionListener(new java.awt.event.ActionListener() { 169 public void actionPerformed(java.awt.event.ActionEvent evt) { 170 okButtonActionPerformed(evt); 171 } 172 }); 173 174 gridBagConstraints = new java.awt.GridBagConstraints(); 175 gridBagConstraints.gridx = 0; 176 gridBagConstraints.gridwidth = 2; 177 gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 178 jPanel3.add(okButton, gridBagConstraints); 179 180 gridBagConstraints = new java.awt.GridBagConstraints(); 181 gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); 182 jPanel1.add(jPanel3, gridBagConstraints); 183 184 getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); 185 186 pack(); 187 }//GEN-END:initComponents 188 189 private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed 190 // Add your handling code here: 191 if (!validateInput()) return; 192 this.hide(); 193 System.out.println("getMode() will return: " + getMode()); 194 if (debug) { 195 try { 196 System.out.println("getHost() will return: "+ getHost()); 197 } catch (RuntimeException re) { 198 System.out.println("getHost() will throw " + re); 199 } 200 try { 201 System.out.println("getPort() will return: " + getPort()); 202 } catch (RuntimeException re) { 203 System.out.println("getPort() will throw " + re); 204 } 205 } 206 }//GEN-LAST:event_okButtonActionPerformed 207 208 private void standaloneRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_standaloneRadioButtonActionPerformed 209 // Add your handling code here: 210 mode = NETWORK_NONE; 211 hostLabel.setEnabled(false); 212 hostTextField.setEnabled(false); 213 portLabel.setEnabled(false); 214 portTextField.setEnabled(false); 215 216 }//GEN-LAST:event_standaloneRadioButtonActionPerformed 217 218 private void clientRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clientRadioButtonActionPerformed 219 // Add your handling code here: 220 mode = NETWORK_CLIENT; 221 hostLabel.setEnabled(true); 222 hostTextField.setEnabled(true); 223 portLabel.setEnabled(true); 224 portTextField.setEnabled(true); 225 226 }//GEN-LAST:event_clientRadioButtonActionPerformed 227 228 private void serverRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_serverRadioButtonActionPerformed 229 // Add your handling code here: 230 mode = NETWORK_SERVER; 231 hostLabel.setEnabled(false); 232 hostTextField.setEnabled(false); 233 portLabel.setEnabled(true); 234 portTextField.setEnabled(true); 235 236 }//GEN-LAST:event_serverRadioButtonActionPerformed 237 238 /** Closes the dialog */ 239 private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog 240 setVisible(false); 241 dispose(); 242 }//GEN-LAST:event_closeDialog 243 244 private boolean validateInput() { 245 try { 246 if (this.mode == NETWORK_CLIENT) { 247 Integer.parseInt(portTextField.getText()); 248 InetAddress.getByName(hostTextField.getText()); 249 } else if (this.mode == NETWORK_SERVER) 250 Integer.parseInt(portTextField.getText()); 251 } catch (NumberFormatException e) { 252 JOptionPane.showMessageDialog(this,"Non-numeric value for port!"); 253 return false; 254 } catch (UnknownHostException e) { 255 JOptionPane.showMessageDialog(this,"Unknown host: " + hostTextField.getText()); 256 return false; 257 } 258 return true; 259 } 260 /** 261 * Returns the requested state of network connectivity 262 * 263 * @return An integer constant drawn from NETWORK_NONE, 264 * NETWORK_CLIENT, or NETWORK_SERVER. 265 */ 266 public int getMode() { 267 return this.mode; 268 } 269 270 /** 271 * returns the requested port. The text box the value is drawn from 272 * depends on the state. 273 * 274 * @return port number to serve on / connect to. 275 * @throws RuntimeException if the state was NETWORK_NONE. 276 */ 277 public int getPort() { 278 if (mode == NETWORK_NONE) { 279 throw new RuntimeException("Invalid Network settings for getPort()"); 280 } 281 return Integer.parseInt(portTextField.getText()); 282 } 283 284 /** 285 * returns the name of the host to connect to as a client. 286 * 287 * @return String name of host to connect to. 288 * @throws RuntimeException if the state was not NETWORK_CLIENT. 289 */ 290 public String getHost() { 291 if (this.mode == NETWORK_CLIENT) 292 return this.hostTextField.getText(); 293 else 294 throw new RuntimeException("Invalid Network settings for getHost()"); 295 } 296 297 /** 298 * Main method for visual layout inspection. 299 * 300 * @param args the command line arguments 301 */ 302 public static void main(String args[]) { 303 debug = true; 304 NetworkSettingsDialog d = 305 new NetworkSettingsDialog(new javax.swing.JFrame(), true); 306 307 d.show(); 308 System.exit(0); 309 } 310 311 312 // Variables declaration - do not modify//GEN-BEGIN:variables 313 private javax.swing.JRadioButton clientRadioButton; 314 private javax.swing.JLabel hostLabel; 315 private javax.swing.JTextField hostTextField; 316 private javax.swing.JLabel jLabel3; 317 private javax.swing.JPanel jPanel1; 318 private javax.swing.JPanel jPanel3; 319 private javax.swing.JPanel leftPanel; 320 private javax.swing.ButtonGroup modeButtons; 321 private javax.swing.JButton okButton; 322 private javax.swing.JLabel portLabel; 323 private javax.swing.JTextField portTextField; 324 private javax.swing.JRadioButton serverRadioButton; 325 private javax.swing.JRadioButton standaloneRadioButton; 326 // End of variables declaration//GEN-END:variables 327 328 } 329 330 /* 331 * $Log: NetworkSettingsDialog.java,v $ 332 * Revision 1.2 2003/10/29 17:04:11 gus 333 * add a title to the dialog 334 * 335 * Revision 1.1 2003/10/29 15:55:50 gus 336 * An initial version of a rewrite of the network settings dialog from breakout 337 * spring 2003. 338 * 339 */