import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; public class KaZaGUI extends JFrame { private JButton m_browseButton; private JButton m_connectButton; private JButton m_closeButton; private JTextField m_shareFolderField; private JTextField m_statusField; private JTextField m_serverField; private ActionEventHandler m_handler; private JComboBox m_speedCombo; public KaZaGUI() { super("Josh's KaZa application for CS654!"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(600, 400); setVisible(true); m_handler = new ActionEventHandler(this); Container c = getContentPane(); JTabbedPane pane = new JTabbedPane(); c.add(pane); JPanel clientPanel = getClientPanel(); pane.add("Client", clientPanel); JPanel transferPanel = getTransferPanel(); pane.add("Transfers", transferPanel); JPanel serverPanel = getServerPanel(); pane.add("Server", serverPanel); } private class ActionEventHandler implements ActionListener { private KaZaGUI m_kg; public ActionEventHandler(KaZaGUI kg) { m_kg = kg; } public void actionPerformed(ActionEvent e) { if (e.getSource() == m_browseButton) { JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.showOpenDialog(m_kg); m_shareFolderField.setText(fc.getSelectedFile().getAbsolutePath()); } else if (e.getSource() == m_closeButton) { System.exit(0); } } } public class ConnectionSpeed { String m_caption; int m_kbps; public ConnectionSpeed(String caption, int kbps) { m_caption = caption; m_kbps = kbps; } public String toString() { return m_caption; } } private JPanel getClientPanel() { m_shareFolderField = new JTextField(); m_browseButton = new JButton("..."); m_browseButton.addActionListener(m_handler); m_serverField = new JTextField(); m_statusField = new JTextField(); m_connectButton = new JButton("Connect"); m_connectButton.addActionListener(m_handler); m_closeButton = new JButton("Close"); m_closeButton.addActionListener(m_handler); Vector speeds = new Vector(); speeds.add(new ConnectionSpeed("Modem", 50)); speeds.add(new ConnectionSpeed("768 Kbps", 768)); speeds.add(new ConnectionSpeed("1.5 Mbps", 1500)); speeds.add(new ConnectionSpeed("3 Mbps", 3000)); speeds.add(new ConnectionSpeed("6 Mbps", 6000)); speeds.add(new ConnectionSpeed("10 Mbps", 10000)); speeds.add(new ConnectionSpeed("100 Mbps", 100000)); speeds.add(new ConnectionSpeed("1 Gbps", 1000000)); speeds.add(new ConnectionSpeed("10 Gbps", 10000000)); m_speedCombo = new JComboBox(speeds); m_speedCombo.setSelectedIndex(3); JPanel clientPanel = new JPanel(); clientPanel.setLayout(new BoxLayout(clientPanel, BoxLayout.Y_AXIS)); JPanel p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); p.add(new JLabel("User name: ")); p.add(new JTextField()); clientPanel.add(p); p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); p.add(new JLabel("Connection speed: ")); p.add(m_speedCombo); clientPanel.add(p); p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); p.add(new JLabel("Shared folder: ")); p.add(m_shareFolderField); p.add(m_browseButton); clientPanel.add(p); p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); p.add(new JLabel("Server: ")); p.add(m_serverField); clientPanel.add(p); clientPanel.add(new Box.Filler(new Dimension(0, 0), new Dimension(0, Short.MAX_VALUE), new Dimension(Short.MAX_VALUE, Short.MAX_VALUE))); p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); p.add(m_statusField); p.add(new Box.Filler(new Dimension(0, 0), new Dimension(Short.MAX_VALUE, 0), new Dimension(Short.MAX_VALUE, Short.MAX_VALUE))); p.add(m_connectButton); p.add(new Box.Filler(new Dimension(8, 0), new Dimension(8, 0), new Dimension(8, Short.MAX_VALUE))); p.add(m_closeButton); clientPanel.add(p); return clientPanel; } private JPanel getTransferPanel() { JPanel transferPanel = new JPanel(); transferPanel.setLayout(new BoxLayout(transferPanel, BoxLayout.Y_AXIS)); transferPanel.add(new JLabel("Transfers:")); transferPanel.add(new Box.Filler(new Dimension(0, 0), new Dimension(0, Short.MAX_VALUE), new Dimension(0, Short.MAX_VALUE))); return transferPanel; } private JPanel getServerPanel() { return new JPanel(); } }