PortChooserpublic class PortChooser extends JDialog implements ItemListenerChoose a port, any port!
Java Communications is a "standard extention" and must be downloaded
and installed separately from the JDK before you can even compile this
program. |
Fields Summary |
---|
protected HashMap | mapA mapping from names to CommPortIdentifiers. | protected String | selectedPortNameThe name of the choice the user made. | protected javax.comm.CommPortIdentifier | selectedPortIdentifierThe CommPortIdentifier the user chose. | protected JComboBox | serialPortsChoiceThe JComboBox for serial ports | protected JComboBox | parallelPortsChoiceThe JComboBox for parallel ports | protected JComboBox | otherThe JComboBox for anything else | protected javax.comm.SerialPort | ttyaThe SerialPort object | protected JLabel | choiceTo display the chosen | protected final int | PADPadding in the GUI |
Constructors Summary |
---|
public PortChooser(JFrame parent)Construct a PortChooser --make the GUI and populate the ComboBoxes.
super(parent, "Port Chooser", true);
makeGUI();
populate();
finishGUI();
|
Methods Summary |
---|
protected void | finishGUI()
serialPortsChoice.addItemListener(this);
parallelPortsChoice.addItemListener(this);
other.addItemListener(this);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
| public javax.comm.CommPortIdentifier | getSelectedIdentifier()
return selectedPortIdentifier;
| public java.lang.String | getSelectedName()
return selectedPortName;
| public void | itemStateChanged(java.awt.event.ItemEvent e)This will be called from either of the JComboBoxen when the
user selects any given item.
// Get the name
selectedPortName = (String)((JComboBox)e.getSource()).getSelectedItem();
// Get the given CommPortIdentifier
selectedPortIdentifier = (CommPortIdentifier)map.get(selectedPortName);
// Display the name.
choice.setText(selectedPortName);
| public static void | main(java.lang.String[] ap)A test program to show up this chooser.
PortChooser c = new PortChooser(null);
c.setVisible(true); // blocking wait
System.out.println("You chose " + c.getSelectedName() +
" (known by " + c.getSelectedIdentifier() + ").");
System.exit(0);
| protected void | makeGUI()Build the GUI. You can ignore this for now if you have not
yet worked through the GUI chapter. Your mileage may vary.
Container cp = getContentPane();
JPanel centerPanel = new JPanel();
cp.add(BorderLayout.CENTER, centerPanel);
centerPanel.setLayout(new GridLayout(0,2, PAD, PAD));
centerPanel.add(new JLabel("Serial Ports", JLabel.RIGHT));
serialPortsChoice = new JComboBox();
centerPanel.add(serialPortsChoice);
serialPortsChoice.setEnabled(false);
centerPanel.add(new JLabel("Parallel Ports", JLabel.RIGHT));
parallelPortsChoice = new JComboBox();
centerPanel.add(parallelPortsChoice);
parallelPortsChoice.setEnabled(false);
centerPanel.add(new JLabel("Unknown Ports", JLabel.RIGHT));
other = new JComboBox();
centerPanel.add(other);
other.setEnabled(false);
centerPanel.add(new JLabel("Your choice:", JLabel.RIGHT));
centerPanel.add(choice = new JLabel());
JButton okButton;
cp.add(BorderLayout.SOUTH, okButton = new JButton("OK"));
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
PortChooser.this.dispose();
}
});
| protected void | populate()Populate the ComboBoxes by asking the Java Communications API
what ports it has. Since the initial information comes from
a Properties file, it may not exactly reflect your hardware.
// get list of ports available on this particular computer,
// by calling static method in CommPortIdentifier.
Enumeration pList = CommPortIdentifier.getPortIdentifiers();
// Process the list, putting serial and parallel into ComboBoxes
while (pList.hasMoreElements()) {
CommPortIdentifier cpi = (CommPortIdentifier)pList.nextElement();
// System.out.println("Port " + cpi.getName());
map.put(cpi.getName(), cpi);
if (cpi.getPortType() == CommPortIdentifier.PORT_SERIAL) {
serialPortsChoice.setEnabled(true);
serialPortsChoice.addItem(cpi.getName());
} else if (cpi.getPortType() == CommPortIdentifier.PORT_PARALLEL) {
parallelPortsChoice.setEnabled(true);
parallelPortsChoice.addItem(cpi.getName());
} else {
other.setEnabled(true);
other.addItem(cpi.getName());
}
}
serialPortsChoice.setSelectedIndex(-1);
parallelPortsChoice.setSelectedIndex(-1);
|
|