package com.github.xsavikx.androidscreencast.ui; import com.android.ddmlib.IDevice; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class JDialogDeviceList extends JDialog implements ActionListener { private static final long serialVersionUID = -3719844308147203239L; private static final String DEFAULT_HOST = "127.0.0.1"; private static final int DEFAULT_PORT = 1324; private JTextField jtfHost = new JTextField(DEFAULT_HOST); private JFormattedTextField jftfPort = new JFormattedTextField(DEFAULT_PORT); private JList<IDevice> jlDevices = new JList<>(); private JPanel jpAgent = new JPanel(); private JPanel jpButtons = new JPanel(); private JButton jbOk = new JButton("OK"); private JButton jbQuit = new JButton("Quit"); private boolean cancelled = false; private IDevice[] devices; public JDialogDeviceList(IDevice[] devices) { super(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); setModal(true); this.devices = devices; initialize(); } @Override public void actionPerformed(ActionEvent arg0) { if (arg0.getSource() == jbQuit) { this.dispose(); } } public IDevice getDevice() { if (cancelled) return null; return jlDevices.getSelectedValue(); } private void initialize() { setTitle("Please select a device"); jlDevices.setListData(devices); jlDevices.setPreferredSize(new Dimension(400, 300)); if (devices.length != 0) jlDevices.setSelectedIndex(0); jbOk.setEnabled(!jlDevices.isSelectionEmpty()); jpAgent.setBorder(BorderFactory.createTitledBorder("Agent")); jpAgent.setLayout(new BorderLayout(10, 10)); jpAgent.add(jtfHost, BorderLayout.CENTER); jpAgent.add(jftfPort, BorderLayout.EAST); jpButtons.setLayout(new FlowLayout(FlowLayout.RIGHT)); jpButtons.add(jbOk, BorderLayout.CENTER); jpButtons.add(jbQuit, BorderLayout.SOUTH); JPanel jpBottom = new JPanel(); jpBottom.setLayout(new BorderLayout()); jpBottom.add(jpAgent, BorderLayout.CENTER); jpBottom.add(jpButtons, BorderLayout.SOUTH); setLayout(new BorderLayout()); add(jlDevices, BorderLayout.CENTER); add(jpBottom, BorderLayout.SOUTH); pack(); setLocationRelativeTo(null); jbOk.addActionListener(this); jbQuit.addActionListener(this); jlDevices.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { int index = jlDevices.locationToIndex(e.getPoint()); jlDevices.ensureIndexIsVisible(index); cancelled = false; setVisible(false); } } }); } }