package mountainrangepvp; import mountainrangepvp.client.GameSettings; import mountainrangepvp.core.Team; import mountainrangepvp.engine.Log; import mountainrangepvp.net.lanping.PingClient; import mountainrangepvp.net.lanping.PingClient.ServerData; import javax.swing.*; import javax.swing.Timer; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.util.*; import java.util.List; import java.util.prefs.Preferences; /** * @author lachlan */ public class LauncherGUI extends javax.swing.JFrame { private final Log log; private final Preferences prefs = Preferences.userNodeForPackage( LauncherGUI.class); private DefaultListModel<String> serversListModel; private PingClient pingClient; private Timer pingReadTimer; /** * Creates new form LauncherGUI */ public LauncherGUI() { this.log = new Log("launcher"); initComponents(); try { pingClient = new PingClient(log); pingClient.start(); } catch (IOException ioe) { log.warn("Could not start PingClient", ioe); } serversListModel = new DefaultListModel<>(); serversList.setModel(serversListModel); serverIPTxt.setText(""); pingReadTimer = new Timer(1000, new PingReader()); pingReadTimer.setRepeats(true); pingReadTimer.start(); teamBox.setRenderer(new TeamListCellRenderer()); DefaultComboBoxModel<String> screenResModel = new DefaultComboBoxModel<>(); screenResBox.setModel(screenResModel); setupResolutions(screenResModel); loadPrefs(); // Center the window Rectangle screen = GraphicsEnvironment.getLocalGraphicsEnvironment(). getDefaultScreenDevice().getDefaultConfiguration().getBounds(); setLocation(screen.width / 2 - getWidth() / 2, screen.height / 2 - getHeight() / 2); } private void setupResolutions(DefaultComboBoxModel<String> displayModesModel) { DisplayMode[] modes = getModes(); Set<DisplayMode> resolutions = new TreeSet<>( new Comparator<DisplayMode>() { @Override public int compare(DisplayMode o1, DisplayMode o2) { if (o1.getWidth() == o2.getWidth()) return o1.getHeight() - o2.getHeight(); else return o1.getWidth() - o2.getWidth(); } }); resolutions.addAll(Arrays.asList(modes)); for (DisplayMode mode : resolutions) { displayModesModel.addElement(mode.getWidth() + "x" + mode. getHeight()); } } /** * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { mpTypeBtnGrp = new javax.swing.ButtonGroup(); gameTypeBtnGrp = new javax.swing.ButtonGroup(); jPanel1 = new javax.swing.JPanel(); jPanel4 = new javax.swing.JPanel(); mpTypeServerBtn = new javax.swing.JRadioButton(); gameTypeFFABtn = new javax.swing.JRadioButton(); gameTypeTeamBtn = new javax.swing.JRadioButton(); jPanel5 = new javax.swing.JPanel(); mpTypeClientBtn = new javax.swing.JRadioButton(); jLabel3 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); serversList = new javax.swing.JList(); serverIPTxt = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); playerNameTxt = new javax.swing.JTextField(); jLabel6 = new javax.swing.JLabel(); teamBox = new javax.swing.JComboBox(); startBtn = new javax.swing.JButton(); jPanel3 = new javax.swing.JPanel(); jLabel5 = new javax.swing.JLabel(); fullscreenBtn = new javax.swing.JCheckBox(); screenResBox = new javax.swing.JComboBox(); refreshRateBox = new javax.swing.JComboBox(); bitDepthBox = new javax.swing.JComboBox(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Mountain Range PvP Launcher"); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.LineBorder(new java.awt.Color(1, 1, 1), 1, true), "Multiplayer")); jPanel4.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true)); mpTypeBtnGrp.add(mpTypeServerBtn); mpTypeServerBtn.setSelected(true); mpTypeServerBtn.setText("Start a Server"); gameTypeBtnGrp.add(gameTypeFFABtn); gameTypeFFABtn.setSelected(true); gameTypeFFABtn.setText("Free For All"); gameTypeBtnGrp.add(gameTypeTeamBtn); gameTypeTeamBtn.setText("Teams"); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(mpTypeServerBtn) .addGroup(jPanel4Layout.createSequentialGroup() .addGap(12, 12, 12) .addComponent(gameTypeFFABtn) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(gameTypeTeamBtn))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addComponent(mpTypeServerBtn) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(gameTypeFFABtn) .addComponent(gameTypeTeamBtn)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel5.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true)); mpTypeBtnGrp.add(mpTypeClientBtn); mpTypeClientBtn.setText("Join a Server"); mpTypeClientBtn.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { mpTypeClientBtnItemStateChanged(evt); } }); jLabel3.setText("LAN Servers:"); serversList.setModel(new javax.swing.AbstractListModel() { String[] strings = {"IP Address"}; public int getSize() { return strings.length; } public Object getElementAt(int i) { return strings[i]; } }); serversList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); serversList.setEnabled(false); serversList.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent evt) { serversListValueChanged(evt); } }); jScrollPane1.setViewportView(serversList); serverIPTxt.setText("IP Address"); serverIPTxt.setEnabled(false); jLabel2.setText("Server IP Address:"); javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1) .addGroup(jPanel5Layout.createSequentialGroup() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(mpTypeClientBtn) .addComponent(jLabel3)) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(jLabel2) .addGap(18, 18, 18) .addComponent(serverIPTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE))) .addContainerGap()) ); jPanel5Layout.setVerticalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addComponent(mpTypeClientBtn) .addGap(18, 18, 18) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(serverIPTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.LineBorder(new java.awt.Color(1, 1, 1), 1, true), "Player")); jLabel4.setText("Player Name:"); jLabel6.setText("Team:"); teamBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Blue", "Green", "Orange", "Red"})); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel6) .addComponent(jLabel4)) .addGap(18, 18, 18) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(playerNameTxt) .addComponent(teamBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(playerNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(teamBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel6)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); startBtn.setFont(startBtn.getFont().deriveFont(startBtn.getFont().getSize() + 5f)); startBtn.setText("Start"); startBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { startBtnActionPerformed(evt); } }); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true), "Settings")); jLabel5.setText("Screen Resolution:"); fullscreenBtn.setText("Fullscreen"); fullscreenBtn.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { fullscreenBtnItemStateChanged(evt); } }); screenResBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"1000x800"})); screenResBox.setEnabled(false); screenResBox.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { screenResBoxItemStateChanged(evt); } }); refreshRateBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"})); refreshRateBox.setEnabled(false); bitDepthBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"})); bitDepthBox.setEnabled(false); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(fullscreenBtn) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jLabel5) .addGap(18, 18, 18) .addComponent(screenResBox, 0, 120, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(refreshRateBox, 0, 94, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(bitDepthBox, 0, 94, Short.MAX_VALUE))) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addComponent(fullscreenBtn) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(screenResBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(refreshRateBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(bitDepthBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(startBtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(startBtn) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void mpTypeClientBtnItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_mpTypeClientBtnItemStateChanged serverIPTxt.setEnabled(mpTypeClientBtn.isSelected()); serversList.setEnabled(mpTypeClientBtn.isSelected()); gameTypeFFABtn.setEnabled(!mpTypeClientBtn.isSelected()); gameTypeTeamBtn.setEnabled(!mpTypeClientBtn.isSelected()); }//GEN-LAST:event_mpTypeClientBtnItemStateChanged private void serversListValueChanged(//GEN-FIRST:event_serversListValueChanged javax.swing.event.ListSelectionEvent evt) {//GEN-HEADEREND:event_serversListValueChanged if (serversList.getSelectedIndex() != -1) { serverIPTxt.setText(serversListModel.elementAt(serversList. getSelectedIndex())); } }//GEN-LAST:event_serversListValueChanged private void startBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startBtnActionPerformed if (playerNameTxt.getText().isEmpty()) { return; } if (mpTypeClientBtn.isSelected() && serverIPTxt.getText().isEmpty()) { return; } dispose(); pingReadTimer.stop(); pingClient.stop(); savePrefs(); makeGame(); }//GEN-LAST:event_startBtnActionPerformed private void savePrefs() { prefs.putBoolean("game-type-client", mpTypeClientBtn.isSelected()); prefs.put("player-name", playerNameTxt.getText()); prefs.putBoolean("fullscreen", fullscreenBtn.isSelected()); prefs.putInt("screen-resolution", screenResBox.getSelectedIndex()); prefs.putInt("team-colour", teamBox.getSelectedIndex()); prefs.putBoolean("team-mode-on", gameTypeTeamBtn.isSelected()); } private void loadPrefs() { try { mpTypeClientBtn.setSelected( prefs.getBoolean("game-type-client", false)); playerNameTxt.setText(prefs.get("player-name", "")); fullscreenBtn.setSelected(prefs.getBoolean("fullscreen", false)); screenResBox.setSelectedIndex(prefs.getInt("screen-resolution", 0)); teamBox.setSelectedIndex(prefs.getInt("team-colour", 0)); gameTypeTeamBtn.setSelected(prefs.getBoolean("team-mode-on", false)); } catch (Exception e) { log.warn("Could not load prefs", e); } } private void makeGame() { GameSettings config = new GameSettings(); config.fullscreen = fullscreenBtn.isSelected(); if (fullscreenBtn.isSelected()) { String resolution = (String) screenResBox.getSelectedItem(); String[] resSplit = resolution.split("x"); config.resolutionWidth = Integer.parseInt(resSplit[0]); config.resolutionHeight = Integer.parseInt(resSplit[1]); config.bitDepth = Integer.parseInt((String) bitDepthBox. getSelectedItem()); } config.hosting = mpTypeServerBtn.isSelected(); config.serverIP = serverIPTxt.getText(); config.nickname = playerNameTxt.getText(); config.teamsOn = (config.hosting) ? gameTypeTeamBtn.isSelected() : true; switch ((String) teamBox.getSelectedItem()) { case "Blue": config.team = Team.BLUE; break; case "Green": config.team = Team.GREEN; break; case "Orange": config.team = Team.ORANGE; break; case "Red": config.team = Team.RED; break; } new Main(config).startGame(); } private void fullscreenBtnItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_fullscreenBtnItemStateChanged screenResBox.setEnabled(fullscreenBtn.isSelected()); refreshRateBox.setEnabled(fullscreenBtn.isSelected()); bitDepthBox.setEnabled(fullscreenBtn.isSelected()); }//GEN-LAST:event_fullscreenBtnItemStateChanged private void screenResBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_screenResBoxItemStateChanged GraphicsDevice graphicsDevice = GraphicsEnvironment. getLocalGraphicsEnvironment(). getDefaultScreenDevice(); DisplayMode[] modes = getModes(); Set<Integer> rates = new TreeSet<>(); Set<Integer> depths = new TreeSet<>(); DefaultComboBoxModel<String> refreshRateModel = new DefaultComboBoxModel<>(); DefaultComboBoxModel<String> bitDepthModel = new DefaultComboBoxModel<>(); for (DisplayMode mode : modes) { rates.add(mode.getRefreshRate()); depths.add(mode.getBitDepth()); } for (int rate : rates) { refreshRateModel.addElement("" + rate); } for (int depth : depths) { bitDepthModel.addElement("" + depth); } refreshRateBox.setModel(refreshRateModel); bitDepthBox.setModel(bitDepthModel); DisplayMode currentMode = graphicsDevice.getDisplayMode(); if (rates.contains(currentMode.getRefreshRate())) refreshRateBox.setSelectedItem("" + currentMode.getRefreshRate()); if (depths.contains(currentMode.getBitDepth())) bitDepthBox.setSelectedItem("" + currentMode.getBitDepth()); }//GEN-LAST:event_screenResBoxItemStateChanged private DisplayMode[] getModes() { GraphicsDevice graphicsDevice = GraphicsEnvironment. getLocalGraphicsEnvironment(). getDefaultScreenDevice(); return graphicsDevice.getDisplayModes(); } public static void laf() { //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* * If Nimbus (introduced in Java SE 6) is not available, stay with the * default look and feel. * For details see * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(LauncherGUI.class.getName()).log( java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(LauncherGUI.class.getName()).log( java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(LauncherGUI.class.getName()).log( java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(LauncherGUI.class.getName()).log( java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JComboBox bitDepthBox; private javax.swing.JCheckBox fullscreenBtn; private javax.swing.ButtonGroup gameTypeBtnGrp; private javax.swing.JRadioButton gameTypeFFABtn; private javax.swing.JRadioButton gameTypeTeamBtn; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JScrollPane jScrollPane1; private javax.swing.ButtonGroup mpTypeBtnGrp; private javax.swing.JRadioButton mpTypeClientBtn; private javax.swing.JRadioButton mpTypeServerBtn; private javax.swing.JTextField playerNameTxt; private javax.swing.JComboBox refreshRateBox; private javax.swing.JComboBox screenResBox; private javax.swing.JTextField serverIPTxt; private javax.swing.JList serversList; private javax.swing.JButton startBtn; private javax.swing.JComboBox teamBox; // End of variables declaration//GEN-END:variables private class PingReader implements ActionListener { @Override public void actionPerformed(ActionEvent e) { List<ServerData> servers = pingClient.getServers(); Collections.sort(servers, new Comparator<ServerData>() { @Override public int compare(ServerData o1, ServerData o2) { return o1.getFreshness() - o2.getFreshness(); } }); for (ServerData data : pingClient.getServers()) { if (!serversListModel.contains(data.ip)) { serversListModel.addElement(data.ip); } } for (String ip : Collections.list(serversListModel.elements())) { boolean contains = false; for (ServerData data : pingClient.getServers()) { if (data.ip.equals(ip)) { contains = true; break; } } if (!contains) { serversListModel.removeElement(ip); } } } } private static class TeamListCellRenderer extends JLabel implements ListCellRenderer<String> { private final ImageIcon BLUE = new ImageIcon(this.getClass(). getResource( "/minimap/head-blue.png")); private final ImageIcon GREEN = new ImageIcon(this.getClass(). getResource( "/minimap/head-green.png")); private final ImageIcon ORANGE = new ImageIcon(this.getClass(). getResource( "/minimap/head-orange.png")); private final ImageIcon RED = new ImageIcon(this.getClass().getResource( "/minimap/head-red.png")); @Override public Component getListCellRendererComponent( JList<? extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) { setText(value); switch (value) { case "Blue": setIcon(BLUE); break; case "Green": setIcon(GREEN); break; case "Orange": setIcon(ORANGE); break; case "Red": setIcon(RED); break; } setBackground(Color.GRAY); setOpaque(isSelected); addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { setOpaque(true); repaint(); } @Override public void mouseExited(MouseEvent e) { setOpaque(false); repaint(); } }); return this; } } }