package forkk.multimc.gui; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.LayoutStyle.ComponentPlacement; import javax.swing.SpinnerNumberModel; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import forkk.multimc.settings.AppSettings; public class SettingsDialog extends JDialog { private static final long serialVersionUID = -7764610862804154562L; private final JPanel contentPanel = new JPanel(); private JPanel advancedTab; private JPanel generalTab; private JSpinner initialMemorySpinner; private JSpinner maxMemorySpinner; private JCheckBox chckbxShowConsole; private JCheckBox chckbxAutoCloseConsole; private JCheckBox chckbxAutoUpdate; private JTextField launcherFileTextField; // /** // * Launch the application. // */ // public static void main(String[] args) // { // try // { // UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); // } catch (Throwable e) // { // e.printStackTrace(); // } // try // { // SettingsDialog dialog = new SettingsDialog(); // dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); // dialog.setVisible(true); // } catch (Exception e) // { // e.printStackTrace(); // } // } /** * Create the dialog. */ public SettingsDialog() { setBounds(100, 100, 400, 450); getContentPane().setLayout(new BorderLayout()); contentPanel.setBorder(new EmptyBorder(0, 0, 0, 0)); getContentPane().add(contentPanel, BorderLayout.CENTER); contentPanel.setLayout(new BorderLayout(0, 0)); { JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); contentPanel.add(tabbedPane, BorderLayout.CENTER); { generalTab = new JPanel(); tabbedPane.addTab("General", null, generalTab, "General settings."); tabbedPane.setEnabledAt(0, true); JLabel lblLauncherFilename = new JLabel("Launcher Filename:"); launcherFileTextField = new JTextField(AppSettings.getLauncherFilename()); launcherFileTextField.setColumns(10); launcherFileTextField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { AppSettings.setLauncherFilename(launcherFileTextField.getText()); } }); JLabel lblConsoleSettings = new JLabel("Console Settings:"); chckbxShowConsole = new JCheckBox("Show console"); chckbxShowConsole.getModel().setSelected(AppSettings.getShowConsole()); chckbxShowConsole.getModel().addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { AppSettings.setShowConsole(chckbxShowConsole.getModel().isSelected()); } }); chckbxAutoCloseConsole = new JCheckBox("Close console when instance exits."); chckbxAutoCloseConsole.getModel().setSelected(AppSettings.getAutoCloseConsole()); chckbxAutoCloseConsole.getModel().addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { AppSettings.setAutoCloseConsole(chckbxAutoCloseConsole.getModel().isSelected()); } }); chckbxAutoUpdate = new JCheckBox("Automatically check for updates when MultiMC starts"); chckbxAutoUpdate.getModel().setSelected(AppSettings.getAutoUpdate()); chckbxAutoUpdate.getModel().addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { AppSettings.setCheckUpdates(chckbxAutoUpdate.getModel().isSelected()); } }); GroupLayout gl_generalTab = new GroupLayout(generalTab); gl_generalTab.setHorizontalGroup( gl_generalTab.createParallelGroup(Alignment.LEADING) .addGroup(gl_generalTab.createSequentialGroup() .addContainerGap() .addGroup(gl_generalTab.createParallelGroup(Alignment.LEADING) .addGroup(gl_generalTab.createSequentialGroup() .addComponent(lblLauncherFilename) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(launcherFileTextField, GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)) .addGroup(gl_generalTab.createSequentialGroup() .addGap(6) .addGroup(gl_generalTab.createParallelGroup(Alignment.LEADING) .addComponent(chckbxAutoCloseConsole) .addComponent(chckbxShowConsole))) .addComponent(chckbxAutoUpdate) .addComponent(lblConsoleSettings)) .addContainerGap()) ); gl_generalTab.setVerticalGroup( gl_generalTab.createParallelGroup(Alignment.LEADING) .addGroup(gl_generalTab.createSequentialGroup() .addContainerGap() .addGroup(gl_generalTab.createParallelGroup(Alignment.BASELINE) .addComponent(lblLauncherFilename) .addComponent(launcherFileTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addGap(18) .addComponent(lblConsoleSettings) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(chckbxShowConsole) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(chckbxAutoCloseConsole) .addGap(18) .addComponent(chckbxAutoUpdate) .addContainerGap(198, Short.MAX_VALUE)) ); generalTab.setLayout(gl_generalTab); } { advancedTab = new JPanel(); tabbedPane.addTab("Advanced", null, advancedTab, "Advanced settings such as memory allocations."); initialMemorySpinner = new JSpinner(); initialMemorySpinner.setModel(new SpinnerNumberModel( AppSettings.getInitialMemAlloc(), new Integer(512), null, new Integer(512))); initialMemorySpinner.getModel().addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent arg0) { AppSettings.setInitialMemAlloc((Integer) initialMemorySpinner.getModel().getValue()); } }); JLabel lblInitialMemoryAllocation = new JLabel("Initial Memory Allocation (MB): "); maxMemorySpinner = new JSpinner(); maxMemorySpinner.setModel(new SpinnerNumberModel( AppSettings.getMaxMemAlloc(), new Integer(1024), null, new Integer(512))); maxMemorySpinner.getModel().addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { AppSettings.setMaxMemAlloc((Integer) maxMemorySpinner.getModel().getValue()); } }); JLabel labelMaxMemAlloc = new JLabel("Maximum Memory Allocation (MB): "); GroupLayout gl_advancedTab = new GroupLayout(advancedTab); gl_advancedTab.setHorizontalGroup( gl_advancedTab.createParallelGroup(Alignment.LEADING) .addGroup(gl_advancedTab.createSequentialGroup() .addContainerGap() .addGroup(gl_advancedTab.createParallelGroup(Alignment.LEADING) .addComponent(labelMaxMemAlloc) .addComponent(lblInitialMemoryAllocation)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_advancedTab.createParallelGroup(Alignment.LEADING, false) .addComponent(maxMemorySpinner) .addComponent(initialMemorySpinner)) .addGap(144)) ); gl_advancedTab.setVerticalGroup( gl_advancedTab.createParallelGroup(Alignment.LEADING) .addGroup(gl_advancedTab.createSequentialGroup() .addContainerGap() .addGroup(gl_advancedTab.createParallelGroup(Alignment.BASELINE) .addComponent(lblInitialMemoryAllocation) .addComponent(initialMemorySpinner, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_advancedTab.createParallelGroup(Alignment.BASELINE) .addComponent(labelMaxMemAlloc) .addComponent(maxMemorySpinner, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addContainerGap(276, Short.MAX_VALUE)) ); advancedTab.setLayout(gl_advancedTab); } } { JPanel buttonPane = new JPanel(); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); getContentPane().add(buttonPane, BorderLayout.SOUTH); { JButton okButton = new JButton("Close"); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { AppSettings.setLauncherFilename(launcherFileTextField.getText()); setVisible(false); } }); okButton.setMnemonic('C'); okButton.setActionCommand("OK"); buttonPane.add(okButton); getRootPane().setDefaultButton(okButton); } } } }