Example usage for javax.swing JTabbedPane JTabbedPane

List of usage examples for javax.swing JTabbedPane JTabbedPane

Introduction

In this page you can find the example usage for javax.swing JTabbedPane JTabbedPane.

Prototype

public JTabbedPane(int tabPlacement) 

Source Link

Document

Creates an empty TabbedPane with the specified tab placement of either: JTabbedPane.TOP, JTabbedPane.BOTTOM, JTabbedPane.LEFT, or JTabbedPane.RIGHT.

Usage

From source file:dpcs.Interface.java

public Interface() {
    setIconImage(Toolkit.getDefaultToolkit().getImage(Interface.class.getResource("/graphics/Icon.png")));
    setTitle("Droid PC Suite");
    setResizable(false);/*from  w  w w .j  a  v  a2s.  c om*/
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 1088, 715);
    try {
        InputStreamReader reader2 = new InputStreamReader(
                getClass().getResourceAsStream("/others/app-version.txt"));
        String tmp = IOUtils.toString(reader2);
        AppVersion = Double.parseDouble(tmp);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    JMenuBar menuBar = new JMenuBar();
    setJMenuBar(menuBar);
    JMenu mnMenu = new JMenu("Menu");
    menuBar.add(mnMenu);
    JMenuItem mntmExit = new JMenuItem("Exit");

    mntmExit.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            System.exit(0);
        }
    });

    JMenu mnADBandFastbootTools = new JMenu("ADB and Fastboot tools");
    mnMenu.add(mnADBandFastbootTools);
    mnADBandFastbootTools.setToolTipText("Access various ADB and Fastboot tools");

    JMenuItem mntmDevicestate = new JMenuItem("View device state");
    mntmDevicestate.setToolTipText("Check android device state");
    mntmDevicestate.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                Process p1 = Runtime.getRuntime().exec("adb get-state");
                p1.waitFor();
                BufferedReader reader = new BufferedReader(new InputStreamReader(p1.getInputStream()));
                JOptionPane.showMessageDialog(null, "State: " + reader.readLine());
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });

    JMenuItem mntmAdbHelp = new JMenuItem("View ADB help");
    mntmAdbHelp.setToolTipText("Get help regarding ADB");
    mntmAdbHelp.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            ADBHelp obj = new ADBHelp();
            obj.setVisible(true);
        }
    });

    JMenuItem mntmNoOfUsers = new JMenuItem("Max user(s) supported?");
    mntmNoOfUsers.setToolTipText("Max no. of user(s) supported by android device");
    mntmNoOfUsers.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                Process p1 = Runtime.getRuntime().exec("adb shell pm get-max-users");
                p1.waitFor();
                BufferedReader reader = new BufferedReader(new InputStreamReader(p1.getInputStream()));
                JOptionPane.showMessageDialog(null, reader.readLine());
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });
    mnADBandFastbootTools.add(mntmNoOfUsers);
    mnADBandFastbootTools.add(mntmAdbHelp);

    JMenuItem mntmAdbVersion = new JMenuItem("View ADB version");
    mntmAdbVersion.setToolTipText("Check the version of ADB installed on your computer");
    mnADBandFastbootTools.add(mntmAdbVersion);
    mntmAdbVersion.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                Process p1 = Runtime.getRuntime().exec("adb version");
                p1.waitFor();
                BufferedReader reader = new BufferedReader(new InputStreamReader(p1.getInputStream()));
                JOptionPane.showMessageDialog(null, reader.readLine());
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });

    JMenuItem mntmViewDeviceList = new JMenuItem("View connected device");
    mntmViewDeviceList.setToolTipText(
            "Displays connected device, it will show name and serial no. of the only connected device because of connectivity limit");
    mntmViewDeviceList.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                JTextArea Devicelistviewer = new JTextArea();
                Devicelistviewer.setEditable(false);
                Devicelistviewer.setForeground(Color.BLACK);
                Devicelistviewer.setOpaque(false);
                Process p1 = Runtime.getRuntime().exec("adb devices -l");
                p1.waitFor();
                int i = 0;
                String line;
                String[] array = new String[1024];
                BufferedReader reader = new BufferedReader(new InputStreamReader(p1.getInputStream()));
                while ((line = reader.readLine()) != null) {
                    array[i] = line;
                    Devicelistviewer.append(line + "\n");
                }
                JOptionPane.showMessageDialog(null, Devicelistviewer);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });
    mnADBandFastbootTools.add(mntmViewDeviceList);
    mnADBandFastbootTools.add(mntmDevicestate);

    JMenuItem mntmViewFastbootHelp = new JMenuItem("View fastboot help");
    mntmViewFastbootHelp.setToolTipText("Get help regarding fastboot");
    mntmViewFastbootHelp.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            FastbootHelp obj = new FastbootHelp();
            obj.setVisible(true);
        }
    });
    mnADBandFastbootTools.add(mntmViewFastbootHelp);

    JMenuItem mntmSerialNo = new JMenuItem("View serial no.");
    mntmSerialNo.setToolTipText("Check ADB connectivity serial no. of your android device");
    mnADBandFastbootTools.add(mntmSerialNo);
    mntmSerialNo.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                Process p1 = Runtime.getRuntime().exec("adb get-serialno");
                p1.waitFor();
                BufferedReader reader = new BufferedReader(new InputStreamReader(p1.getInputStream()));
                JOptionPane.showMessageDialog(null, "Serial No: " + reader.readLine());
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });

    JMenuItem mntmWaitForDevice = new JMenuItem("Wait for device");
    mntmWaitForDevice.setToolTipText("Ask ADB to wait for your device until the device can accept commands");
    mntmWaitForDevice.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                Process p1 = Runtime.getRuntime().exec("adb wait-for-device");
                p1.waitFor();
                JOptionPane.showMessageDialog(null, "Waiting...");
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });
    mnADBandFastbootTools.add(mntmWaitForDevice);

    JMenuItem mntmDeviceFeatures = new JMenuItem("Device features");
    mnMenu.add(mntmDeviceFeatures);
    mntmDeviceFeatures.setToolTipText("View list of features supported by the android device");
    mntmDeviceFeatures.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Devicefeatures obj = new Devicefeatures();
            obj.setVisible(true);
        }
    });

    JMenu mnDeviceSpecificTools = new JMenu("Device specific tools");
    mnMenu.add(mnDeviceSpecificTools);
    mnDeviceSpecificTools.setToolTipText("View tools which only work with few  or specific devices");

    JMenu mnHTC = new JMenu("HTC");
    mnDeviceSpecificTools.add(mnHTC);
    mnHTC.setToolTipText("View list of tools which only work with HTC devices");

    JMenuItem mntmGetCidNo = new JMenuItem("Get CID no.");
    mntmGetCidNo.setToolTipText("Get CID Number of the device");
    mntmGetCidNo.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                Process p1 = Runtime.getRuntime().exec("adb reboot fastboot");
                p1.waitFor();
                Process p2 = Runtime.getRuntime().exec("fastboot getvar cid");
                p2.waitFor();
                BufferedReader reader = new BufferedReader(new InputStreamReader(p2.getInputStream()));
                JOptionPane.showMessageDialog(null, reader.readLine());
                Process p3 = Runtime.getRuntime().exec("fastboot reboot");
                p3.waitFor();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });

    JMenuItem mntmBootloaderRelatedInfo = new JMenuItem("Bootloader related info");
    mntmBootloaderRelatedInfo.setToolTipText("View CID No.,Main-ver, bootloader info Etc.");
    mntmBootloaderRelatedInfo.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                Process p1 = Runtime.getRuntime().exec("adb reboot fastboot");
                p1.waitFor();
                Process p2 = Runtime.getRuntime().exec("fastboot getvar all");
                p2.waitFor();
                BufferedReader reader = new BufferedReader(new InputStreamReader(p2.getInputStream()));
                JOptionPane.showMessageDialog(null, reader.readLine() + "\n");
                Process p3 = Runtime.getRuntime().exec("fastboot reboot");
                p3.waitFor();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });
    mnHTC.add(mntmBootloaderRelatedInfo);
    mnHTC.add(mntmGetCidNo);

    JMenuItem mntmWriteSuperCIDNo = new JMenuItem("Write Super CID no.");
    mntmWriteSuperCIDNo.setToolTipText("Write Super CID Number to device");
    mntmWriteSuperCIDNo.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                int supercidno;
                Process p1 = Runtime.getRuntime().exec("adb reboot fastboot");
                p1.waitFor();
                supercidno = Integer.parseInt(JOptionPane.showInputDialog(null,
                        "Enter the Super CID Number to be written :\nfor ex. 11111111"));
                Process p2 = Runtime.getRuntime().exec("fastboot oem writecid " + supercidno);
                p2.waitFor();
                JOptionPane.showMessageDialog(null, "Done, Click OK to reboot");
                Process p3 = Runtime.getRuntime().exec("fastboot reboot");
                p3.waitFor();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });
    mnHTC.add(mntmWriteSuperCIDNo);

    JMenu mnSamsung = new JMenu("Samsung");
    mnSamsung.setToolTipText("View list of tools which only work with Samsung devices");
    mnDeviceSpecificTools.add(mnSamsung);

    JMenuItem mntmDownloadMode = new JMenuItem("Download Mode");
    mntmDownloadMode.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                ApplicationStatus.setText("Rebooting...");
                Process p1 = Runtime.getRuntime().exec("adb reboot download");
                p1.waitFor();
                ApplicationStatus.setText("Done");
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });
    mntmDownloadMode.setToolTipText(
            "Reboot to Download Mode for flashing firmware to samsung device using Odin or Heimdall");
    mnSamsung.add(mntmDownloadMode);

    mnMenu.add(mntmExit);
    JMenu mnHelp = new JMenu("Help");
    menuBar.add(mnHelp);

    JMenuItem mntmCommonWorkarounds = new JMenuItem("Common workarounds");
    mntmCommonWorkarounds.setToolTipText(
            "View solutions and tips to avoid the common problems while using this application");
    mntmCommonWorkarounds.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Workarounds obj = new Workarounds();
            obj.setVisible(true);
        }
    });

    JMenuItem mntmAbout = new JMenuItem("About");
    mntmAbout.setToolTipText("Information about the application");
    mntmAbout.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            About obj = new About();
            obj.setVisible(true);
        }
    });
    mnHelp.add(mntmAbout);

    JMenuItem mntmCheckForUpdates = new JMenuItem("Check for updates");
    mntmCheckForUpdates.setToolTipText("Check for the new updates of this application");
    mntmCheckForUpdates.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            new Updater();
        }
    });

    JMenuItem mntmChangelog = new JMenuItem("Changelog");
    mntmChangelog.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Changelog obj = new Changelog();
            obj.setVisible(true);
        }
    });
    mntmChangelog.setToolTipText("View changes made to this application over the time");
    mnHelp.add(mntmChangelog);
    mnHelp.add(mntmCheckForUpdates);
    mnHelp.add(mntmCommonWorkarounds);

    JMenuItem mntmNeedHelp = new JMenuItem("Online help");
    mntmNeedHelp.setToolTipText("Get online help for Droid PC Suite");
    mntmNeedHelp.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                JOptionPane.showMessageDialog(null, "Post your queries on XDA-Developers thread");
                Desktop.getDesktop().browse(new URL(
                        "http://forum.xda-developers.com/android/development/tool-droid-pc-suite-t3398599")
                                .toURI());
            } catch (Exception e) {
                System.err.println(e);
            }
        }
    });

    JMenuItem mntmForceConnect = new JMenuItem("Force connect");
    mnHelp.add(mntmForceConnect);
    mntmForceConnect.setToolTipText("Force connect android device to computer using ADB protocol");
    mntmForceConnect.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(null,
                    "Go to developer options and turn off android debugging and turn it on again");
            JOptionPane.showMessageDialog(null,
                    "Now tap on Revoke USB debugging authorizations and confirm it by tapping OK on android device");
            JOptionPane.showMessageDialog(null, "Now disconnect your android device and reconnect it via USB");
            JOptionPane.showMessageDialog(null, "Reboot your device. After it completely boots up click OK");
            try {
                adbconnected = false;
                Process p1 = Runtime.getRuntime().exec("adb kill-server");
                p1.waitFor();
                Process p2 = Runtime.getRuntime().exec("adb devices");
                p2.waitFor();
                JOptionPane.showMessageDialog(null, "Check if your device asks to Allow USB debugging");
                JOptionPane.showMessageDialog(null,
                        "If yes check always allow from this computer checkbox and tap OK on your android device");
                Process p3 = Runtime.getRuntime().exec("adb shell touch /sdcard/.CheckADBConnection");
                p3.waitFor();
                Process p4 = Runtime.getRuntime().exec("adb pull /sdcard/.CheckADBConnection");
                p4.waitFor();
                Process p5 = Runtime.getRuntime().exec("adb shell rm /sdcard/.CheckADBConnection");
                p5.waitFor();
                File file = new File(".CheckADBConnection");
                if (file.exists() && !file.isDirectory()) {
                    file.delete();
                    adbconnected = true;
                    ADBConnectionLabel.setText("Device is connected");
                    JOptionPane.showMessageDialog(null, "Success!");
                } else {
                    adbconnected = false;
                    ADBConnectionLabel.setText("");
                    ADBConnectionLabel.setText("Connect your device...");
                    JOptionPane.showMessageDialog(null,
                            "Please try again or perhaps try installing your android device adb drivers on PC");
                }
            } catch (Exception e1) {
                System.err.println(e1);
            }
            try {
                File file = new File("su");
                Process p1 = Runtime.getRuntime().exec("adb pull /system/xbin/su");
                p1.waitFor();
                if (file.exists() && !file.isDirectory()) {
                    file.delete();
                    rooted = true;
                    RootStatusLabel.setText("Device is rooted");
                } else {
                    if (adbconnected == true) {
                        rooted = false;
                        RootStatusLabel.setText("Device is not rooted");
                    } else {
                        rooted = false;
                        RootStatusLabel.setText("");
                    }
                }
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });

    JMenu mnLegalInformation = new JMenu("Legal information");
    mnLegalInformation.setToolTipText("Vew legal information about the application");
    mnHelp.add(mnLegalInformation);

    JMenuItem mntmDroidPcSuite = new JMenuItem("Droid PC Suite license");
    mntmDroidPcSuite.setToolTipText("View Droid PC Suite licence");
    mntmDroidPcSuite.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            GPLLicense obj = new GPLLicense();
            obj.setVisible(true);
        }
    });
    mnLegalInformation.add(mntmDroidPcSuite);

    JMenuItem mntmOpenSourceLicenses = new JMenuItem("Open source licenses");
    mntmOpenSourceLicenses
            .setToolTipText("View other open source licences for other softwares used with this application");
    mntmOpenSourceLicenses.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            ApacheLicense obj = new ApacheLicense();
            obj.setVisible(true);
        }
    });
    mnLegalInformation.add(mntmOpenSourceLicenses);
    mnHelp.add(mntmNeedHelp);
    contentPane = new JPanel();
    contentPane.setBackground(Color.WHITE);
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    ApplicationStatus = new JLabel("");
    ApplicationStatus.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            if (!ApplicationStatus.getText().equals("")) {
                int dialogButton = JOptionPane.YES_NO_OPTION;
                int dialogResult = JOptionPane.showConfirmDialog(null,
                        "Do you want to clear application status?", "Application status", dialogButton);
                if (dialogResult == 0) {
                    ApplicationStatus.setText("");
                }
            }
        }
    });

    JLabel lblApplicationVersion = new JLabel("Version: " + AppVersion);
    lblApplicationVersion.setBounds(818, 150, 135, 22);
    contentPane.add(lblApplicationVersion);
    ApplicationStatus.setBounds(12, 230, 1062, 17);
    contentPane.add(ApplicationStatus);

    RootStatusLabel = new JLabel("");
    RootStatusLabel.setBounds(921, 12, 153, 17);
    RootStatusLabel.setForeground(Color.RED);
    contentPane.add(RootStatusLabel);

    ADBConnectionLabel = new JLabel("");
    ADBConnectionLabel.setBounds(900, 0, 175, 17);
    ADBConnectionLabel.setForeground(Color.GREEN);
    contentPane.add(ADBConnectionLabel);

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    tabbedPane.setBounds(0, 255, 1075, 447);
    contentPane.add(tabbedPane);

    JPanel panel_7 = new JPanel();
    panel_7.setBackground(Color.WHITE);
    tabbedPane.addTab("General", null, panel_7, null);
    panel_7.setLayout(null);

    JButton btnADBTerminal = new JButton("ADB Terminal");
    btnADBTerminal.setToolTipText("Send commands to your android device via ADB protocol, EXPERIMENTAL!");
    btnADBTerminal.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Terminal obj = new Terminal();
            obj.setVisible(true);
        }
    });

    JButton btnBuildpropeditor = new JButton("build.prop Editor");
    btnBuildpropeditor
            .setToolTipText("Editor for editing build properties of your android device, Use with Caution!");
    btnBuildpropeditor.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Buildpropeditor obj = new Buildpropeditor();
            obj.setVisible(true);
        }
    });
    btnBuildpropeditor.setBounds(541, 27, 220, 75);
    panel_7.add(btnBuildpropeditor);
    btnADBTerminal.setBounds(25, 27, 220, 75);
    panel_7.add(btnADBTerminal);

    JLabel lblNoteInstallationTo = new JLabel("# Only for android 4.4.x and higher");
    lblNoteInstallationTo.setBounds(20, 311, 1046, 15);
    panel_7.add(lblNoteInstallationTo);

    GeneralDone = new JLabel("");
    GeneralDone.setText("");
    GeneralDone.setBounds(766, 27, 300, 220);
    panel_7.add(GeneralDone);

    JButton btnFileManager = new JButton("File Manager");
    btnFileManager.setToolTipText("Access files on your android device");
    btnFileManager.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            GeneralDone.setText("");
            filemanager.FileManager.main(null);
        }
    });
    btnFileManager.setBounds(25, 131, 220, 75);
    panel_7.add(btnFileManager);

    JLabel lblNeedsRoot = new JLabel(
            "* Needs root access, also may not work with some devices regardless of root access");
    lblNeedsRoot.setBounds(20, 326, 1046, 15);
    panel_7.add(lblNeedsRoot);

    JButton btnScreenshot = new JButton("Screenshot");
    btnScreenshot.setToolTipText("Screenshot your android device screen");
    btnScreenshot.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                Process p1 = Runtime.getRuntime().exec("adb shell screencap -p /sdcard/screenshot.png");
                p1.waitFor();
                JFileChooser directorychooser = new JFileChooser();
                directorychooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                directorychooser.setDialogTitle("Select path to save the screenshot");
                FileNameExtensionFilter filter = new FileNameExtensionFilter("PNG Files", "png");
                directorychooser.setFileFilter(filter);
                directorychooser.setApproveButtonText("Save");
                int returnVal = directorychooser.showOpenDialog(getParent());
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    Process p2 = Runtime.getRuntime().exec("adb pull /sdcard/screenshot.png "
                            + directorychooser.getSelectedFile().getAbsolutePath());
                    p2.waitFor();
                }
                Process p3 = Runtime.getRuntime().exec("adb shell rm /sdcard/screenshot.png");
                p3.waitFor();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    btnScreenshot.setBounds(282, 131, 220, 75);
    panel_7.add(btnScreenshot);

    JButton btnScreenRecorder = new JButton("Screen Recorder #");
    btnScreenRecorder.setToolTipText("Record android device screen");
    btnScreenRecorder.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String[] options = new String[] { "5 Sec", "30 Sec", "60 Sec", "180 Sec", "Custom" };
            int response = JOptionPane.showOptionDialog(null, "Select duration of recording", "Screen Recorder",
                    JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
            int time = 0, bitrate = 8000000;
            try {
                if (response == 0) {
                    time = 5;
                }
                if (response == 1) {
                    time = 30;
                }
                if (response == 2) {
                    time = 60;
                }
                if (response == 3) {
                    time = 180;
                }
                if (response == 4) {
                    time = Integer.parseInt(JOptionPane.showInputDialog(null,
                            "Enter the duration of recording in seconds (1 - 180): for ex. 25 for 25 Seconds"));
                    bitrate = Integer.parseInt(JOptionPane.showInputDialog(null,
                            "Enter the bitrate of recording (Default = 8000000 (8Mbps))"));
                }
                JOptionPane.showMessageDialog(null, "You will need to wait for " + time + " seconds, Click ok");
                Process p1 = Runtime.getRuntime().exec("adb shell screenrecord --bit-rate " + bitrate
                        + " --time-limit " + time + " /sdcard/videorecording.mp4");
                p1.waitFor();
                JOptionPane.showMessageDialog(null, "Recording finished, Select destination to save the file");
                JFileChooser directorychooser = new JFileChooser();
                directorychooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                directorychooser.setDialogTitle("Select path to save the recording");
                FileNameExtensionFilter filter = new FileNameExtensionFilter("MP4 Files", "mp4");
                directorychooser.setFileFilter(filter);
                directorychooser.setApproveButtonText("Save");
                int returnVal = directorychooser.showOpenDialog(getParent());
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    Process p2 = Runtime.getRuntime().exec("adb pull /sdcard/videorecording.mp4 "
                            + directorychooser.getSelectedFile().getAbsolutePath());
                    p2.waitFor();
                }
                Process p3 = Runtime.getRuntime().exec("adb shell rm /sdcard/videorecording.mp4");
                p3.waitFor();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    btnScreenRecorder.setBounds(541, 131, 220, 75);
    panel_7.add(btnScreenRecorder);

    JButton btnAppManager = new JButton("App Manager");
    btnAppManager.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            GeneralDone.setText("");
            String[] MainOptions = new String[] { "Install apps", "Uninstall apps" };
            int MainResponse = JOptionPane.showOptionDialog(null, "Select an operation", "App Manager",
                    JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, MainOptions, MainOptions[0]);
            if (MainResponse == 0) {
                try {
                    GeneralDone.setText("");
                    String[] options = new String[] { "User apps", "Priv-apps", "System apps" };
                    int response = JOptionPane.showOptionDialog(null, "Where to install the app?", "Installer",
                            JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
                    if (response == 0) {
                        try {
                            GeneralDone.setText("");
                            JFileChooser chooser = new JFileChooser();
                            FileNameExtensionFilter filter = new FileNameExtensionFilter("APK Files", "apk");
                            chooser.setFileFilter(filter);
                            int returnVal = chooser.showOpenDialog(getParent());
                            if (returnVal == JFileChooser.APPROVE_OPTION) {
                                File file = chooser.getSelectedFile();
                                String filename = chooser.getSelectedFile().getName();
                                try {
                                    ApplicationStatus.setText("Installing...");
                                    String[] commands = new String[3];
                                    commands[0] = "adb";
                                    commands[1] = "install";
                                    commands[2] = file.getAbsolutePath();
                                    ApplicationStatus.setText("Installing App...");
                                    Process p1 = Runtime.getRuntime().exec(commands, null);
                                    p1.waitFor();
                                    ApplicationStatus.setText(filename
                                            + " has been successfully installed on your android device!");
                                    GeneralDone.setIcon(
                                            new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                                } catch (Exception e1) {
                                    System.err.println(e1);
                                }
                            }
                        } catch (Exception e1) {
                        }
                    }
                    if (response == 1) {
                        GeneralDone.setText("");
                        JFileChooser chooser = new JFileChooser();
                        FileNameExtensionFilter filter = new FileNameExtensionFilter("APK Files", "apk");
                        chooser.setFileFilter(filter);
                        int returnVal = chooser.showOpenDialog(getParent());
                        if (returnVal == JFileChooser.APPROVE_OPTION) {
                            File file = chooser.getSelectedFile();
                            try {
                                ApplicationStatus.setText("Installing...");
                                Process p1 = Runtime.getRuntime().exec("adb remount");
                                p1.waitFor();
                                String[] pushcommand = new String[4];
                                pushcommand[0] = "adb";
                                pushcommand[1] = "push";
                                pushcommand[2] = file.getAbsolutePath();
                                pushcommand[3] = "/system/priv-app/";
                                ApplicationStatus.setText("Installing App...");
                                Process p2 = Runtime.getRuntime().exec(pushcommand, null);
                                p2.waitFor();
                                ApplicationStatus.setText("Rebooting your android device");
                                Process p3 = Runtime.getRuntime().exec("adb reboot");
                                p3.waitFor();
                                ApplicationStatus.setText("");
                                GeneralDone.setIcon(
                                        new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                            } catch (Exception e1) {
                                System.err.println(e1);
                            }
                        }
                    }
                    if (response == 2) {
                        GeneralDone.setText("");
                        JFileChooser chooser = new JFileChooser();
                        FileNameExtensionFilter filter = new FileNameExtensionFilter("APK Files", "apk");
                        chooser.setFileFilter(filter);
                        int returnVal = chooser.showOpenDialog(getParent());
                        if (returnVal == JFileChooser.APPROVE_OPTION) {
                            File file = chooser.getSelectedFile();
                            try {
                                ApplicationStatus.setText("Installing...");
                                Process p1 = Runtime.getRuntime().exec("adb remount");
                                p1.waitFor();
                                String[] pushcommand = new String[4];
                                pushcommand[0] = "adb";
                                pushcommand[1] = "push";
                                pushcommand[2] = file.getAbsolutePath();
                                pushcommand[3] = "/system/app/";
                                Process p2 = Runtime.getRuntime().exec(pushcommand, null);
                                p2.waitFor();
                                ApplicationStatus.setText("Rebooting your android device");
                                Process p3 = Runtime.getRuntime().exec("adb reboot");
                                p3.waitFor();
                                ApplicationStatus.setText("");
                                GeneralDone.setIcon(
                                        new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                            } catch (Exception e1) {
                                System.err.println(e1);
                            }
                        }
                    }
                } catch (Exception e1) {
                }
            }
            if (MainResponse == 1) {
                try {
                    GeneralDone.setText("");
                    String[] options = new String[] { "User apps", "Priv-apps", "System apps" };
                    int response = JOptionPane.showOptionDialog(null,
                            "Which kind of app you want to uninstall?", "Uninstaller",
                            JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
                    if (response == 0) {
                        try {
                            UninstallUserApps obj = new UninstallUserApps();
                            obj.setVisible(true);
                        } catch (Exception e1) {
                        }
                    }
                    if (response == 1) {
                        try {
                            UninstallPrivApps obj = new UninstallPrivApps();
                            obj.setVisible(true);
                        } catch (Exception e1) {
                        }
                    }
                    if (response == 2) {
                        try {
                            UninstallSystemApps obj = new UninstallSystemApps();
                            obj.setVisible(true);
                        } catch (Exception e1) {
                        }
                    }
                } catch (Exception e1) {
                }
            }
        }
    });
    btnAppManager.setToolTipText("Manage Apps on your android device");
    btnAppManager.setBounds(282, 27, 220, 75);
    panel_7.add(btnAppManager);

    JLabel lblInstallationAndUninstallation = new JLabel(
            "Installation and Uninstallation of apps to Priv-app is only for android 4.4 and higher, requires root and even simply may not work on your device!");
    lblInstallationAndUninstallation.setBounds(20, 356, 1046, 15);
    panel_7.add(lblInstallationAndUninstallation);

    JLabel lblInstallationAndUninstallation_1 = new JLabel(
            "Installation and Uninstallation of apps to System requires root, and may not work for your device!");
    lblInstallationAndUninstallation_1.setBounds(20, 341, 1046, 15);
    panel_7.add(lblInstallationAndUninstallation_1);

    JPanel panel_8 = new JPanel();
    panel_8.setBackground(Color.WHITE);
    tabbedPane.addTab("Advanced", null, panel_8, null);
    panel_8.setLayout(null);

    JButton btnMemoryInformation = new JButton("Memory Information");
    btnMemoryInformation.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Memoryinfo obj = new Memoryinfo();
            obj.setVisible(true);
        }
    });

    JButton btnClearBatteryStats = new JButton("Clear Battery Stats *");
    btnClearBatteryStats.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                Process p1 = Runtime.getRuntime().exec("adb remount");
                p1.waitFor();
                Process p2 = Runtime.getRuntime().exec("adb shell su -c rm -r /data/system/batterystats.bin");
                p2.waitFor();
                String[] options = new String[] { "Yes", "No" };
                int response = JOptionPane.showOptionDialog(null, "Done, would you like to reboot your device?",
                        "Reboot device? (Recommended)", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,
                        null, options, options[0]);
                if (response == 0) {
                    try {
                        Process p3 = Runtime.getRuntime().exec("adb reboot");
                        p3.waitFor();
                    } catch (Exception e1) {
                    }
                }
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });
    btnClearBatteryStats.setToolTipText("Clear outdated or invalid battery stats");
    btnClearBatteryStats.setBounds(25, 131, 220, 75);
    panel_8.add(btnClearBatteryStats);
    btnMemoryInformation.setToolTipText("View current memory information of android device");
    btnMemoryInformation.setBounds(25, 236, 220, 75);
    panel_8.add(btnMemoryInformation);

    JButton btnBatteryInformation = new JButton("Battery Information");
    btnBatteryInformation.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            Batteryinfo obj = new Batteryinfo();
            obj.setVisible(true);
        }
    });
    btnBatteryInformation.setToolTipText("View current battery information of android device");
    btnBatteryInformation.setBounds(541, 27, 220, 75);
    panel_8.add(btnBatteryInformation);

    JButton btnCpuInformation = new JButton("CPU Information");
    btnCpuInformation.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            CPUinfo obj = new CPUinfo();
            obj.setVisible(true);
        }
    });
    btnCpuInformation.setToolTipText("View current CPU information of android device");
    btnCpuInformation.setBounds(282, 131, 220, 75);
    panel_8.add(btnCpuInformation);

    JButton btnAppInformation = new JButton("App Information");
    btnAppInformation.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Appinfo obj = new Appinfo();
            obj.setVisible(true);
        }
    });
    btnAppInformation.setToolTipText("View current app information of android device");
    btnAppInformation.setBounds(25, 27, 220, 75);
    panel_8.add(btnAppInformation);

    JButton btnKillApps = new JButton("Kill Apps");
    btnKillApps.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            String[] options = new String[] { "Enter package name", "Kill all apps" };
            int response = JOptionPane.showOptionDialog(null, "Which app(s) should be killed?", "Kill Apps",
                    JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
            if (response == 0) {
                try {
                    JOptionPane.showMessageDialog(null,
                            "You can find an app package name from App Packages List");
                    String selectedapp = (JOptionPane.showInputDialog(null, "Enter app's package name:"));
                    Process p1 = Runtime.getRuntime().exec("adb shell am force-stop " + selectedapp);
                    p1.waitFor();
                    JOptionPane.showMessageDialog(null, selectedapp + " has been killed");
                } catch (Exception e1) {
                }
            }
            if (response == 1) {
                try {
                    Process p1 = Runtime.getRuntime().exec("adb shell am kill-all");
                    p1.waitFor();
                    JOptionPane.showMessageDialog(null, "All 'safe to kill' apps have been killed");
                } catch (Exception e1) {
                }
            }
        }
    });
    btnKillApps.setToolTipText("Kill any app currently running on android device");
    btnKillApps.setBounds(541, 131, 220, 75);
    panel_8.add(btnKillApps);

    JButton btnWifiInformation = new JButton("WiFi Information");
    btnWifiInformation.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Wifiinfo obj = new Wifiinfo();
            obj.setVisible(true);
        }
    });
    btnWifiInformation.setToolTipText("View current wifi information of android device");
    btnWifiInformation.setBounds(541, 236, 220, 75);
    panel_8.add(btnWifiInformation);

    JButton btnAppPackageList = new JButton("App Packages List");
    btnAppPackageList.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            AppPackagesList obj = new AppPackagesList();
            obj.setVisible(true);
        }
    });
    btnAppPackageList.setToolTipText("View all installed app packages list information");
    btnAppPackageList.setBounds(282, 27, 220, 75);
    panel_8.add(btnAppPackageList);

    JLabel lblAdvancedToolsNote = new JLabel(
            "Note: All of the above tools are not supported by every device or ROM");
    lblAdvancedToolsNote.setBounds(25, 345, 736, 15);
    panel_8.add(lblAdvancedToolsNote);

    JButton btnUnroot = new JButton("Unroot Device");
    btnUnroot.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                File file1 = new File(".events");
                if (!file1.exists()) {
                    List<String> lines = Arrays.asList("Unroot_Warning_Shown = True");
                    Path file = Paths.get(".events");
                    Files.write(file, lines, Charset.forName("UTF-8"));
                    JOptionPane.showMessageDialog(null,
                            "Only the SU Binary will get removed since there are lot of different root management\napplications for android available, I can't regularly search for them and add their\nsupport to this application. If you think this concerns you, you can help me by sending\nme a list of root management applicationsfor android like supersu, kingroot, kingoroot,\netc. But I can't promise that I will add support for each of them. Cheers! :)");
                }
                JOptionPane.showMessageDialog(null, "Unrooting work only on non-production builds of android");
                Process p1 = Runtime.getRuntime().exec("adb pull /system/xbin/su");
                p1.waitFor();
                File file2 = new File("su");
                if (file2.exists() && !file2.isDirectory()) {
                    file2.delete();
                    Process p2 = Runtime.getRuntime().exec("adb remount");
                    p2.waitFor();
                    Process p3 = Runtime.getRuntime().exec("adb shell su -c rm -r /system/xbin/su");
                    p3.waitFor();
                    JOptionPane.showMessageDialog(null, "Operation completed");
                } else {
                    JOptionPane.showMessageDialog(null, "This device is not rooted");
                }
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });
    btnUnroot.setToolTipText("Unroot device by removing SU binary from the device");
    btnUnroot.setBounds(282, 236, 220, 75);
    panel_8.add(btnUnroot);

    JLabel lblNewLabel_1 = new JLabel(
            "* Needs root access, also may not work with some devices regardless of root access");
    lblNewLabel_1.setBounds(25, 372, 736, 15);
    panel_8.add(lblNewLabel_1);

    JPanel panel_10 = new JPanel();
    panel_10.setBackground(Color.WHITE);
    tabbedPane.addTab("Developer", null, panel_10, null);
    panel_10.setLayout(null);

    JButton btnUnpackAPKs = new JButton("Unpack APKs");
    btnUnpackAPKs.addActionListener(new ActionListener() {
        private Component parentFrame;

        public void actionPerformed(ActionEvent e) {
            File path = null;
            JFileChooser chooser1 = new JFileChooser();
            chooser1.setDialogTitle("Select an APK file to extract");
            FileNameExtensionFilter filter = new FileNameExtensionFilter("APK Files", "apk");
            chooser1.setCurrentDirectory(new java.io.File("."));
            chooser1.setFileFilter(filter);
            int returnVal = chooser1.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser1.getSelectedFile();
                String filename = chooser1.getSelectedFile().getName();
                JFileChooser chooser2 = new JFileChooser();
                chooser2.setDialogTitle("Extract APK file to");
                chooser2.setCurrentDirectory(new java.io.File("."));
                chooser2.setAcceptAllFileFilterUsed(false);
                chooser2.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                int userSelection = chooser2.showSaveDialog(parentFrame);
                if (userSelection == JFileChooser.APPROVE_OPTION) {
                    path = chooser2.getSelectedFile();
                }
                String outputDir = path.getAbsolutePath();
                java.util.zip.ZipFile zipFile = null;
                try {
                    zipFile = new ZipFile(file);
                    Enumeration<? extends ZipEntry> entries = zipFile.entries();
                    while (entries.hasMoreElements()) {
                        ZipEntry entry = entries.nextElement();
                        File entryDestination = new File(outputDir, entry.getName());
                        if (entry.isDirectory()) {
                            entryDestination.mkdirs();
                        } else {
                            entryDestination.getParentFile().mkdirs();
                            InputStream in = zipFile.getInputStream(entry);
                            OutputStream out = null;
                            out = new FileOutputStream(entryDestination);
                            IOUtils.copy(in, out);
                            IOUtils.closeQuietly(in);
                            out.close();
                        }
                    }
                    zipFile.close();
                    JOptionPane.showMessageDialog(null, filename + " has been successfully extracted");
                } catch (Exception e1) {
                    e1.printStackTrace();
                    JOptionPane.showMessageDialog(null, "An error occured");
                }
            }
        }
    });
    btnUnpackAPKs.setToolTipText("Unpack APKs stored on disk");
    btnUnpackAPKs.setBounds(541, 27, 220, 75);
    panel_10.add(btnUnpackAPKs);

    JButton btnRepackAPKs = new JButton("Repack APKs");
    btnRepackAPKs.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            new Repacker();
        }
    });
    btnRepackAPKs.setToolTipText("Repack previously unpacked APKs and save to them to disk");
    btnRepackAPKs.setBounds(25, 27, 220, 75);
    panel_10.add(btnRepackAPKs);

    JButton btnStartAnActivity = new JButton("Start an activity *");
    btnStartAnActivity.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                String packagename = JOptionPane.showInputDialog(null, "Enter the package name of the app",
                        "com.package.name");
                String activityname = JOptionPane.showInputDialog(null, "Enter the activity name of the app",
                        "MainActivity");
                Process p1 = Runtime.getRuntime().exec("adb shell am start -n " + packagename + "/"
                        + packagename + "com.package.name." + activityname);
                p1.waitFor();
            } catch (Exception e1) {
                e1.printStackTrace();
            }

        }
    });
    btnStartAnActivity.setToolTipText("Start an actvity of an android app on your android device");
    btnStartAnActivity.setBounds(282, 27, 220, 75);
    panel_10.add(btnStartAnActivity);

    JLabel lblActivityWill = new JLabel(
            "* An activity will not start if you enter wrong package name or activity name");
    lblActivityWill.setBounds(25, 381, 736, 15);
    panel_10.add(lblActivityWill);

    JPanel panel_5 = new JPanel();
    panel_5.setBackground(Color.WHITE);
    tabbedPane.addTab("Backup & Restore", null, panel_5, null);
    panel_5.setLayout(null);

    BackupAndRestoreDone = new JLabel("");
    BackupAndRestoreDone.setText("");
    BackupAndRestoreDone.setBounds(758, 70, 300, 220);
    panel_5.add(BackupAndRestoreDone);

    JLabel lblRestoreOperations = new JLabel("Restore Operations");
    lblRestoreOperations.setBounds(541, 12, 142, 36);
    panel_5.add(lblRestoreOperations);

    final JButton btnRestoreFromCustomLocationBackup = new JButton("From Custom Location");
    btnRestoreFromCustomLocationBackup
            .setToolTipText("Restore data to android device from the backup stored somewhere on the computer");
    btnRestoreFromCustomLocationBackup.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            BackupAndRestoreDone.setText("");
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("Android Backup Files", "ab");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                try {
                    ApplicationStatus.setText("Restoring may take upto several minutes, please be patient...");
                    JOptionPane.showMessageDialog(null,
                            "Unlock your device and confirm the restore operation when asked");
                    String[] commands = new String[3];
                    commands[0] = "adb";
                    commands[1] = "restore";
                    commands[2] = file.getAbsolutePath();
                    ApplicationStatus.setText("Restoring...");
                    Process p1 = Runtime.getRuntime().exec(commands, null);
                    p1.waitFor();
                    ApplicationStatus.setText("Restore completed successfully!");
                    BackupAndRestoreDone
                            .setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                    btnRestoreFromCustomLocationBackup.setSelected(false);
                } catch (Exception e1) {
                    System.err.println(e1);
                }
            }
        }
    });

    btnRestoreFromCustomLocationBackup.setBounds(510, 70, 220, 75);
    panel_5.add(btnRestoreFromCustomLocationBackup);

    JLabel lblBackup = new JLabel("Backup Operations");
    lblBackup.setBounds(192, 12, 142, 36);
    panel_5.add(lblBackup);

    final JButton btnBackupInternelStorage = new JButton("Internel Storage");
    btnBackupInternelStorage.setToolTipText("Backup android device internal storage");
    btnBackupInternelStorage.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            BackupAndRestoreDone.setText("");
            try {
                ApplicationStatus.setText("Backup can take upto several minutes, please be patient...");
                JOptionPane.showMessageDialog(null,
                        "Unlock your device and confirm the backup operation when asked");
                String[] commands = new String[3];
                commands[0] = "adb";
                commands[1] = "backup";
                commands[2] = "-shared";
                ApplicationStatus.setText("Performing backup...");
                Process p1 = Runtime.getRuntime().exec(commands, null);
                p1.waitFor();
                ApplicationStatus.setText("Backup completed successfully!");
                BackupAndRestoreDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                btnBackupInternelStorage.setSelected(false);
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnBackupInternelStorage.setBounds(270, 70, 220, 75);
    panel_5.add(btnBackupInternelStorage);

    final JButton btnBackupSingleApp = new JButton("Single App");
    btnBackupSingleApp.setToolTipText("Backup a single app from android device");
    btnBackupSingleApp.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            BackupAndRestoreDone.setText("");
            try {
                String message = JOptionPane.showInputDialog(null, "Please specify a package name to backup");
                ApplicationStatus.setText("Backup can take upto several minutes, please be patient...");
                JOptionPane.showMessageDialog(null,
                        "Unlock your device and confirm the backup operation when asked");
                String[] commands = new String[3];
                commands[0] = "adb";
                commands[1] = "backup";
                commands[2] = message;
                ApplicationStatus.setText("Performing backup...");
                Process p1 = Runtime.getRuntime().exec(commands, null);
                p1.waitFor();
                ApplicationStatus.setText("Backup completed successfully!");
                BackupAndRestoreDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                btnBackupSingleApp.setSelected(false);
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnBackupSingleApp.setBounds(25, 184, 220, 75);
    panel_5.add(btnBackupSingleApp);

    final JButton btnBackupAppAndAppData = new JButton("App and App Data");
    btnBackupAppAndAppData.setToolTipText("Backup app and it's data from android device");
    btnBackupAppAndAppData.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            BackupAndRestoreDone.setText("");
            try {
                ApplicationStatus.setText("Backup can take upto several minutes, please be patient...");
                JOptionPane.showMessageDialog(null,
                        "Unlock your device and confirm the backup operation when asked");
                String[] commands = new String[3];
                commands[0] = "adb";
                commands[1] = "backup";
                commands[2] = "-all";
                ApplicationStatus.setText("Performing backup...");
                Process p1 = Runtime.getRuntime().exec(commands, null);
                p1.waitFor();
                ApplicationStatus.setText("Backup completed successfully!");
                BackupAndRestoreDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                btnBackupAppAndAppData.setSelected(false);
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnBackupAppAndAppData.setBounds(25, 70, 220, 75);
    panel_5.add(btnBackupAppAndAppData);

    final JButton btnBackupWholeDevice = new JButton("Whole Device");
    btnBackupWholeDevice.setToolTipText("Backup whole android device");
    btnBackupWholeDevice.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            BackupAndRestoreDone.setText("");
            try {
                ApplicationStatus.setText("Backup can take upto several minutes, please be patient...");
                JOptionPane.showMessageDialog(null,
                        "Unlock your device and confirm the backup operation when asked");
                String[] commands = new String[6];
                commands[0] = "adb";
                commands[1] = "backup";
                commands[2] = "-all";
                commands[3] = "-apk";
                commands[4] = "-shared";
                commands[5] = "-system";
                ApplicationStatus.setText("Performing backup...");
                Process p1 = Runtime.getRuntime().exec(commands, null);
                p1.waitFor();
                ApplicationStatus.setText("Backup completed successfully");
                BackupAndRestoreDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                btnBackupWholeDevice.setSelected(false);
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnBackupWholeDevice.setBounds(25, 303, 220, 75);
    panel_5.add(btnBackupWholeDevice);

    final JButton btnRestorePreviousBackup = new JButton("Previous Backup");
    btnRestorePreviousBackup.setToolTipText("Restore data to android device from the previous backup");
    btnRestorePreviousBackup.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            BackupAndRestoreDone.setText("");
            try {
                ApplicationStatus.setText("Restoring can take upto several minutes, please be patient...");
                JOptionPane.showMessageDialog(null,
                        "Unlock your device and confirm the restore operation when asked");
                String[] commands = new String[3];
                commands[0] = "adb";
                commands[1] = "restore";
                commands[2] = "backup.ab";
                ApplicationStatus.setText("Restoring...");
                Process p1 = Runtime.getRuntime().exec(commands, null);
                p1.waitFor();
                ApplicationStatus.setText("Restore completed successfully!");
                BackupAndRestoreDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                btnRestorePreviousBackup.setSelected(false);
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnRestorePreviousBackup.setBounds(510, 184, 220, 75);
    panel_5.add(btnRestorePreviousBackup);

    final JButton btnBackupSystem = new JButton("System");
    btnBackupSystem.setToolTipText("Backup android device system");
    btnBackupSystem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            BackupAndRestoreDone.setText("");
            try {
                ApplicationStatus.setText("Backup can take upto several minutes, please be patient...");
                JOptionPane.showMessageDialog(null,
                        "Unlock your device and confirm the backup operation when asked");
                String[] commands = new String[3];
                commands[0] = "adb";
                commands[1] = "backup";
                commands[2] = "-system";
                ApplicationStatus.setText("Performing backup...");
                Process p1 = Runtime.getRuntime().exec(commands, null);
                p1.waitFor();
                ApplicationStatus.setText("Backup completed successfully!");
                BackupAndRestoreDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                btnBackupSystem.setSelected(false);
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnBackupSystem.setBounds(270, 184, 220, 75);
    panel_5.add(btnBackupSystem);

    JPanel panel_2 = new JPanel();
    panel_2.setBackground(Color.WHITE);
    tabbedPane.addTab("Rebooter", null, panel_2, null);
    panel_2.setLayout(null);

    JLabel lblRebootFrom = new JLabel("Reboot from :");
    lblRebootFrom.setBounds(25, 180, 220, 15);
    panel_2.add(lblRebootFrom);

    JLabel lblRebootTo = new JLabel("Reboot to :");
    lblRebootTo.setBounds(25, 12, 220, 15);
    panel_2.add(lblRebootTo);

    JLabel lblNotFor = new JLabel("# Not for Samsung devices");
    lblNotFor.setBounds(514, 359, 238, 19);
    panel_2.add(lblNotFor);

    JLabel lblDeviceMust_1 = new JLabel("Device must be in fastboot mode (Except for Reboot System)");
    lblDeviceMust_1.setBounds(25, 332, 479, 19);
    panel_2.add(lblDeviceMust_1);

    JLabel lblYouMust_1 = new JLabel("* You must have a bootloader that supports fastboot commands");
    lblYouMust_1.setBounds(25, 359, 470, 19);
    panel_2.add(lblYouMust_1);

    JButton btnRebootFromFastboot = new JButton("Fastboot *");
    btnRebootFromFastboot.setToolTipText("Reboot android device from fastboot mode to normal");
    btnRebootFromFastboot.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                ApplicationStatus.setText("Rebooting...");
                Process p1 = Runtime.getRuntime().exec("fastboot reboot");
                p1.waitFor();
                ApplicationStatus.setText("Done");
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnRebootFromFastboot.setBounds(28, 232, 220, 75);
    panel_2.add(btnRebootFromFastboot);

    JButton btnRebootToBootloaderFromFastboot = new JButton("Fastboot to Bootloader *");
    btnRebootToBootloaderFromFastboot.setToolTipText("Reboot to Bootloader mode while accessing fastboot mode");
    btnRebootToBootloaderFromFastboot.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                ApplicationStatus.setText("Rebooting...");
                Process p1 = Runtime.getRuntime().exec("fasboot reboot-bootloader");
                p1.waitFor();
                ApplicationStatus.setText("Done");
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnRebootToBootloaderFromFastboot.setBounds(281, 232, 220, 75);
    panel_2.add(btnRebootToBootloaderFromFastboot);

    JButton btnRebootToFastboot = new JButton("Fastboot");
    btnRebootToFastboot.setToolTipText("Reboot android device to fastboot mode");
    btnRebootToFastboot.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                ApplicationStatus.setText("Rebooting...");
                Process p1 = Runtime.getRuntime().exec("adb reboot fastboot");
                p1.waitFor();
                ApplicationStatus.setText("Done");
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnRebootToFastboot.setBounds(281, 55, 220, 75);
    panel_2.add(btnRebootToFastboot);

    JButton btnRebootToBootloader = new JButton("Bootloader #");
    btnRebootToBootloader.setToolTipText("Reboot android device to bootloader mode");
    btnRebootToBootloader.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                ApplicationStatus.setText("Rebooting...");
                Process p1 = Runtime.getRuntime().exec("adb reboot bootloader");
                p1.waitFor();
                ApplicationStatus.setText("Done");
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnRebootToBootloader.setBounds(28, 55, 220, 75);
    panel_2.add(btnRebootToBootloader);

    JButton btnRebootToRecovery = new JButton("Recovery");
    btnRebootToRecovery.setToolTipText("Reboot android device to recovery mode");
    btnRebootToRecovery.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                ApplicationStatus.setText("Rebooting...");
                Process p1 = Runtime.getRuntime().exec("adb reboot recovery");
                p1.waitFor();
                ApplicationStatus.setText("Done");
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnRebootToRecovery.setBounds(532, 55, 220, 75);
    panel_2.add(btnRebootToRecovery);

    JButton btnRebootSystem = new JButton("System");
    btnRebootSystem.setToolTipText("Reboot android device normally");
    btnRebootSystem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                ApplicationStatus.setText("Rebooting...");
                Process p1 = Runtime.getRuntime().exec("adb reboot");
                p1.waitFor();
                ApplicationStatus.setText("Done");
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnRebootSystem.setBounds(785, 55, 220, 75);
    panel_2.add(btnRebootSystem);

    JPanel panel_9 = new JPanel();
    panel_9.setBackground(Color.WHITE);
    tabbedPane.addTab("Bypass Security", null, panel_9, null);
    panel_9.setLayout(null);

    JLabel lblRootOperationsexperimental = new JLabel(
            "Method #1 : Root Operations (Recommended) [EXPERIMENTAL] :");
    lblRootOperationsexperimental.setBounds(12, 12, 507, 15);
    panel_9.add(lblRootOperationsexperimental);

    JButton btnPattern = new JButton("Pattern #");
    btnPattern.setToolTipText("Remove pattern security from android device (Experimental)");
    btnPattern.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                ApplicationStatus.setText("Trying to break into security...");
                Process p1 = Runtime.getRuntime().exec("adb shell su -c rm /data/system/gesture.key");
                p1.waitFor();
                ApplicationStatus.setText(
                        "Done, now try to unlock the device with a random pattern then change security manually from settings");
            } catch (Exception e1) {
            }
        }
    });

    btnPattern.setBounds(220, 75, 220, 75);
    panel_9.add(btnPattern);

    JButton btnPasswordPin = new JButton("Password/ PIN #");
    btnPasswordPin.setToolTipText("Remove password or pin security from android device (Experimental)");
    btnPasswordPin.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                ApplicationStatus.setText("Trying to break into security...");
                Process p1 = Runtime.getRuntime().exec("adb shell su -c rm /data/system/password.key");
                p1.waitFor();
                ApplicationStatus.setText("Done, check your device...");
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnPasswordPin.setBounds(630, 75, 220, 75);
    panel_9.add(btnPasswordPin);

    JLabel lblMayNot = new JLabel("# Works on Android 4.4.x and lower");
    lblMayNot.setBounds(630, 250, 366, 15);
    panel_9.add(lblMayNot);

    JLabel lblNonRoot = new JLabel("Method # 2 : Non - Root/ Root Operations [EXPERIMENTAL] :");
    lblNonRoot.setBounds(12, 191, 507, 15);
    panel_9.add(lblNonRoot);

    JButton btnJellyBeanPatternPinPassword = new JButton("Pattern/ PIN/ Password *");
    btnJellyBeanPatternPinPassword
            .setToolTipText("Remove pattern, pin or password security from android device (Experimental)");
    btnJellyBeanPatternPinPassword.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                ApplicationStatus.setText("Trying to break into security...");
                Process p1 = Runtime.getRuntime().exec(
                        "adb shell am start -n com.android.settings/com.android.settings.ChooseLockGeneric --ez confirm_credentials false --ei lockscreen.password_type 0 --activity-clear-task");
                p1.waitFor();
                ApplicationStatus.setText("Rebooting...");
                Process p2 = Runtime.getRuntime().exec("adb reboot");
                p2.waitFor();
                ApplicationStatus.setText("Done, check your device...");
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnJellyBeanPatternPinPassword.setBounds(220, 250, 220, 75);
    panel_9.add(btnJellyBeanPatternPinPassword);

    JLabel lblWorksWell = new JLabel("* Works well on Jelly Bean Devices but may or");
    lblWorksWell.setBounds(630, 273, 366, 15);
    panel_9.add(lblWorksWell);

    JLabel lblNewLabel = new JLabel("may not work for older/ newer android versions");
    lblNewLabel.setBounds(640, 293, 356, 15);
    panel_9.add(lblNewLabel);

    JPanel panel_4 = new JPanel();
    panel_4.setBackground(Color.WHITE);
    tabbedPane.addTab("Logger", null, panel_4, null);
    panel_4.setLayout(null);

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(0, 72, 1072, 285);
    panel_4.add(scrollPane);

    LogViewer = new JTextArea();
    LogViewer.setEditable(false);
    scrollPane.setViewportView(LogViewer);

    JButton btnSaveAsTextFile = new JButton("Save as a text file");
    btnSaveAsTextFile.setToolTipText("Save printed logcat as a text file on computer");
    btnSaveAsTextFile.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            if (LogViewer.getText().equals("")) {
                JOptionPane.showMessageDialog(null, "No log found, please click view log");
            } else {
                ApplicationStatus.setText("");
                JFrame parentFrame = new JFrame();
                JFileChooser fileChooser = new JFileChooser();
                FileNameExtensionFilter filter = new FileNameExtensionFilter("Text Files", "txt");
                fileChooser.setFileFilter(filter);
                fileChooser.setDialogTitle("Save as a text file");
                int userSelection = fileChooser.showSaveDialog(parentFrame);
                if (userSelection == JFileChooser.APPROVE_OPTION) {
                    File fileToSave = fileChooser.getSelectedFile();
                    FileWriter write = null;
                    try {
                        write = new FileWriter(fileToSave.getAbsolutePath() + ".txt");
                        LogViewer.write(write);
                        ApplicationStatus.setText("Logcat saved");
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        if (write != null)
                            try {
                                write.close();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                    }
                }
            }
        }
    });

    btnSaveAsTextFile.setBounds(420, 13, 220, 47);
    panel_4.add(btnSaveAsTextFile);

    JButton btnClearLogcat = new JButton("Clear");
    btnClearLogcat.setToolTipText("Clean the printed logcat from the screen");
    btnClearLogcat.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            LogViewer.setText("");
            File file = new File(".logcat.txt");
            if (file.exists() && !file.isDirectory()) {
                file.delete();
            }
            ApplicationStatus.setText("Logcat cleared");
        }
    });
    btnClearLogcat.setBounds(12, 13, 220, 48);
    panel_4.add(btnClearLogcat);

    JButton btnViewLogcat = new JButton("View Logcat");
    btnViewLogcat.setToolTipText("Print android device logcat on screen");
    btnViewLogcat.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            ApplicationStatus.setText("Generating logcat, please wait a moment...");
            try {
                Process p1 = Runtime.getRuntime().exec("adb logcat -d > /sdcard/.logcat.txt");
                p1.waitFor();
                Process p2 = Runtime.getRuntime().exec("adb logcat -c");
                p2.waitFor();
                Process p3 = Runtime.getRuntime().exec("adb pull /sdcard/.logcat.txt");
                p3.waitFor();
                Process p4 = Runtime.getRuntime().exec("adb shell rm /sdcard/.logcat.txt");
                p4.waitFor();
                try {
                    Reader reader = new FileReader(new File(".logcat.txt"));
                    LogViewer.read(reader, "");
                } catch (Exception e) {
                    e.printStackTrace();
                }
                File file = new File(".logcat.txt");
                if (file.exists() && !file.isDirectory()) {
                    file.delete();
                }
                ApplicationStatus.setText("");
            } catch (Exception e) {
                System.err.println(e);
            }
        }
    });

    btnViewLogcat.setBounds(838, 13, 220, 47);
    panel_4.add(btnViewLogcat);

    JLabel lblNoteLogcatG = new JLabel(
            "Note: Logcat generation takes some time, program may not respond for a few moments");
    lblNoteLogcatG.setBounds(12, 364, 1046, 15);
    panel_4.add(lblNoteLogcatG);

    JPanel panel = new JPanel();
    panel.setBackground(Color.WHITE);
    tabbedPane.addTab("Flasher", null, panel, null);
    panel.setLayout(null);

    final JButton btnFlashSystem = new JButton("System");
    btnFlashSystem.setToolTipText("Flash system partition");
    btnFlashSystem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            FlasherDone.setText("");
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("IMG Files", "img");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                String filename = chooser.getSelectedFile().getName();
                try {
                    ApplicationStatus.setText("Flashing...");
                    Process p1 = Runtime.getRuntime().exec("fastboot erase system");
                    p1.waitFor();
                    String[] commands = new String[4];
                    commands[0] = "fastboot";
                    commands[1] = "flash";
                    commands[2] = "system";
                    commands[3] = file.getAbsolutePath();
                    Process p2 = Runtime.getRuntime().exec(commands, null);
                    p2.waitFor();
                    ApplicationStatus
                            .setText(filename + "has been successfully flashed on your android device");
                    FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                    btnFlashSystem.setSelected(false);
                } catch (Exception e1) {
                    System.err.println(e1);
                }
            }
        }
    });

    final JButton btnFlashData = new JButton("Data");
    btnFlashData.setToolTipText("Flash data partition");
    btnFlashData.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            FlasherDone.setText("");
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("IMG Files", "img");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                String filename = chooser.getSelectedFile().getName();
                try {
                    ApplicationStatus.setText("Flashing...");
                    Process p1 = Runtime.getRuntime().exec("fastboot erase data");
                    p1.waitFor();
                    String[] commands = new String[4];
                    commands[0] = "fastboot";
                    commands[1] = "flash";
                    commands[2] = "data";
                    commands[3] = file.getAbsolutePath();
                    Process p2 = Runtime.getRuntime().exec(commands, null);
                    p2.waitFor();
                    ApplicationStatus
                            .setText(filename + "has been successfully flashed on your android device");
                    FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                    btnFlashData.setSelected(false);
                } catch (Exception e1) {
                    System.err.println(e1);
                }
            }
        }
    });

    final JButton btnFlashViaRecovery = new JButton("Flash via Recovery");
    btnFlashViaRecovery.setToolTipText("Flash a zip archive using recovery");
    btnFlashViaRecovery.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            FlasherDone.setText("");
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("zip Files", "zip");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                try {
                    JOptionPane.showMessageDialog(null,
                            "Select Update via ADB from recovery menu using physical keys on your device");
                    String[] commands = new String[3];
                    commands[0] = "adb";
                    commands[1] = "sideload";
                    commands[2] = file.getAbsolutePath();
                    ApplicationStatus.setText("Flashing...");
                    Process p1 = Runtime.getRuntime().exec(commands, null);
                    p1.waitFor();
                    ApplicationStatus.setText("Sideloaded...");
                    FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                    btnFlashViaRecovery.setSelected(false);
                } catch (Exception e1) {
                    System.err.println(e1);
                }
            }
        }
    });

    FlasherDone = new JLabel("");
    FlasherDone.setText("");
    FlasherDone.setBounds(760, 29, 300, 220);
    panel.add(FlasherDone);
    btnFlashViaRecovery.setBounds(25, 131, 220, 75);
    panel.add(btnFlashViaRecovery);
    btnFlashData.setBounds(541, 27, 220, 75);
    panel.add(btnFlashData);
    btnFlashSystem.setBounds(282, 236, 220, 75);
    panel.add(btnFlashSystem);

    final JButton btnFlashCache = new JButton("Cache");
    btnFlashCache.setToolTipText("Flash cache partition");
    btnFlashCache.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            FlasherDone.setText("");
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("IMG Files", "img");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                String filename = chooser.getSelectedFile().getName();
                try {
                    ApplicationStatus.setText("Flashing...");
                    Process p1 = Runtime.getRuntime().exec("fastboot erase cache");
                    p1.waitFor();
                    String[] commands = new String[4];
                    commands[0] = "fastboot";
                    commands[1] = "flash";
                    commands[2] = "cache";
                    commands[3] = file.getAbsolutePath();
                    Process p2 = Runtime.getRuntime().exec(commands, null);
                    p2.waitFor();
                    ApplicationStatus
                            .setText(filename + "has been successfully flashed on your android device");
                    FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                    btnFlashCache.setSelected(false);
                } catch (Exception e1) {
                    System.err.println(e1);
                }
            }
        }
    });

    btnFlashCache.setBounds(282, 27, 220, 75);
    panel.add(btnFlashCache);

    final JButton btnBootImage = new JButton("Boot");
    btnBootImage.setToolTipText("Flash boot partition");
    btnBootImage.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            FlasherDone.setText("");
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("IMG Files", "img");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                String filename = chooser.getSelectedFile().getName();
                try {
                    ApplicationStatus.setText("Flashing...");
                    Process p1 = Runtime.getRuntime().exec("fastboot erase boot");
                    p1.waitFor();
                    String[] commands = new String[4];
                    commands[0] = "fastboot";
                    commands[1] = "flash";
                    commands[2] = "boot";
                    commands[3] = file.getAbsolutePath();
                    Process p2 = Runtime.getRuntime().exec(commands, null);
                    p2.waitFor();
                    ApplicationStatus
                            .setText(filename + "has been successfully flashed on your android device");
                    FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                    btnBootImage.setSelected(false);
                } catch (Exception e1) {
                    System.err.println(e1);
                }
            }
        }
    });

    btnBootImage.setBounds(25, 27, 220, 75);
    panel.add(btnBootImage);

    final JButton btnFlashZipArchive = new JButton("Zip Archive");
    btnFlashZipArchive.setToolTipText("Flash a zip archive");
    btnFlashZipArchive.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            FlasherDone.setText("");
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("zip Files", "zip");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                String filename = chooser.getSelectedFile().getName();
                try {
                    ApplicationStatus.setText("Flashing...");
                    String[] commands = new String[3];
                    commands[0] = "fastboot";
                    commands[1] = "flash";
                    commands[2] = file.getAbsolutePath();
                    Process p1 = Runtime.getRuntime().exec(commands, null);
                    p1.waitFor();
                    ApplicationStatus
                            .setText(filename + "has been successfully flashed on your android device");
                    FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                    btnFlashZipArchive.setSelected(false);
                } catch (Exception e1) {
                    System.err.println(e1);
                }
            }
        }
    });

    btnFlashZipArchive.setBounds(541, 236, 220, 75);
    panel.add(btnFlashZipArchive);

    final JButton btnFlashRecovery = new JButton("Recovery");
    btnFlashRecovery.setToolTipText("Flash recovery partition");
    btnFlashRecovery.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            FlasherDone.setText("");
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("IMG Files", "img");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                String filename = chooser.getSelectedFile().getName();
                try {
                    ApplicationStatus.setText("Flashing...");
                    Process p1 = Runtime.getRuntime().exec("fastboot erase recovery");
                    p1.waitFor();
                    String[] commands = new String[4];
                    commands[0] = "fastboot";
                    commands[1] = "flash";
                    commands[2] = "recovery";
                    commands[3] = file.getAbsolutePath();
                    Process p2 = Runtime.getRuntime().exec(commands, null);
                    p2.waitFor();
                    ApplicationStatus
                            .setText(filename + "has been successfully flashed on your android device");
                    FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                    btnFlashRecovery.setSelected(false);
                } catch (Exception e1) {
                    System.err.println(e1);
                }
            }
        }
    });

    btnFlashRecovery.setBounds(541, 131, 220, 75);
    panel.add(btnFlashRecovery);

    JLabel lblYouMust = new JLabel(
            "Note: Your device's bootloader must support fastboot commands and should be in fastboot mode");
    lblYouMust.setBounds(25, 356, 835, 19);
    panel.add(lblYouMust);

    final JButton btnFlashSplash = new JButton("Splash");
    btnFlashSplash.setToolTipText("Flash splash partition");
    btnFlashSplash.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("IMG Files", "img");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                String filename = chooser.getSelectedFile().getName();
                try {
                    ApplicationStatus.setText("Flashing...");
                    Process p1 = Runtime.getRuntime().exec("fastboot erase splash");
                    p1.waitFor();
                    String[] commands = new String[4];
                    commands[0] = "fastboot";
                    commands[1] = "flash";
                    commands[2] = "splash";
                    commands[3] = file.getAbsolutePath();
                    Process p2 = Runtime.getRuntime().exec(commands, null);
                    p2.waitFor();
                    ApplicationStatus
                            .setText(filename + "has been successfully flashed on your android device");
                    FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                    btnFlashSplash.setSelected(false);
                } catch (Exception e1) {
                    System.err.println(e1);
                }
            }
        }
    });

    btnFlashSplash.setBounds(25, 236, 220, 75);
    panel.add(btnFlashSplash);

    JButton btnFlashRadio = new JButton("Radio");
    btnFlashRadio.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("IMG Files", "img");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                String filename = chooser.getSelectedFile().getName();
                try {
                    ApplicationStatus.setText("Flashing...");
                    Process p1 = Runtime.getRuntime().exec("fastboot erase radio");
                    p1.waitFor();
                    String[] commands = new String[4];
                    commands[0] = "fastboot";
                    commands[1] = "flash";
                    commands[2] = "radio";
                    commands[3] = file.getAbsolutePath();
                    Process p2 = Runtime.getRuntime().exec(commands, null);
                    p2.waitFor();
                    ApplicationStatus
                            .setText(filename + "has been successfully flashed on your android device");
                    FlasherDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
                    btnFlashSplash.setSelected(false);
                } catch (Exception e1) {
                    System.err.println(e1);
                }
            }
        }
    });
    btnFlashRadio.setToolTipText("Flash radio partition");
    btnFlashRadio.setBounds(282, 131, 220, 75);
    panel.add(btnFlashRadio);

    JPanel panel_1 = new JPanel();
    panel_1.setBackground(Color.WHITE);
    tabbedPane.addTab("Wiper", null, panel_1, null);
    panel_1.setLayout(null);

    WiperDone = new JLabel("");
    WiperDone.setText("");
    WiperDone.setBounds(758, 26, 300, 220);
    panel_1.add(WiperDone);

    JLabel label_13 = new JLabel("** Device must be rooted");
    label_13.setBounds(25, 336, 252, 19);
    panel_1.add(label_13);

    JButton btnWipeRecovery = new JButton("Recovery");
    btnWipeRecovery.setToolTipText("Wipe recovery partition");
    btnWipeRecovery.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            WiperDone.setText("");
            try {
                ApplicationStatus.setText("Wiping...");
                Process p1 = Runtime.getRuntime().exec("fastboot erase cache");
                p1.waitFor();
                ApplicationStatus.setText("Recovery has been wiped");
                WiperDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnWipeRecovery.setBounds(541, 131, 220, 75);
    panel_1.add(btnWipeRecovery);

    JButton btnWipeBoot = new JButton("Boot");
    btnWipeBoot.setToolTipText("Flash boot partition");
    btnWipeBoot.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            WiperDone.setText("");
            try {
                ApplicationStatus.setText("Wiping...");
                Process p1 = Runtime.getRuntime().exec("fastboot erase boot");
                p1.waitFor();
                ApplicationStatus.setText("Boot has been wiped");
                WiperDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnWipeBoot.setBounds(25, 27, 220, 75);
    panel_1.add(btnWipeBoot);

    JButton btnWipeSystem = new JButton("System");
    btnWipeSystem.setToolTipText("Wipe system partition");
    btnWipeSystem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            WiperDone.setText("");
            try {
                ApplicationStatus.setText("Wiping...");
                Process p1 = Runtime.getRuntime().exec("fastboot erase system");
                p1.waitFor();
                ApplicationStatus.setText("System has been wiped");
                WiperDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnWipeSystem.setBounds(282, 236, 220, 75);
    panel_1.add(btnWipeSystem);

    JButton btnWipeSplash = new JButton("Splash");
    btnWipeSplash.setToolTipText("Wipe splash partition");
    btnWipeSplash.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            WiperDone.setText("");
            try {
                ApplicationStatus.setText("Wiping...");
                Process p1 = Runtime.getRuntime().exec("fastboot erase splash");
                p1.waitFor();
                ApplicationStatus.setText("Splash has been wiped");
                WiperDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnWipeSplash.setBounds(25, 236, 220, 75);
    panel_1.add(btnWipeSplash);

    JButton btnWipeData = new JButton("Data");
    btnWipeData.setToolTipText("Wipe data partition");
    btnWipeData.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            WiperDone.setText("");
            try {
                ApplicationStatus.setText("Wiping...");
                Process p1 = Runtime.getRuntime().exec("fastboot erase data");
                p1.waitFor();
                ApplicationStatus.setText("Data has been wiped");
                WiperDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnWipeData.setBounds(25, 131, 220, 75);
    panel_1.add(btnWipeData);

    JButton btnFlashDalvikCache = new JButton("Dalvik Cache **");
    btnFlashDalvikCache.setToolTipText("Wipe dalvik cache");
    btnFlashDalvikCache.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            WiperDone.setText("");
            try {
                ApplicationStatus.setText("Wiping...");
                Process p1 = Runtime.getRuntime().exec("adb shell su -c rm * /data/dalvik-cache");
                p1.waitFor();
                Process p2 = Runtime.getRuntime().exec("adb shell su -c rm * /cache/dalvik-cache");
                p2.waitFor();
                ApplicationStatus.setText("Dalvik Cache has been wiped! Now rebooting device...");
                Process p3 = Runtime.getRuntime().exec("adb reboot");
                p3.waitFor();
                ApplicationStatus.setText("Done");
                WiperDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnFlashDalvikCache.setBounds(541, 27, 220, 75);
    panel_1.add(btnFlashDalvikCache);

    JButton btnWipeCache = new JButton("Cache");
    btnWipeCache.setToolTipText("Wipe cache partition");
    btnWipeCache.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            WiperDone.setText("");
            try {
                ApplicationStatus.setText("Wiping...");
                Process p1 = Runtime.getRuntime().exec("fastboot erase cache");
                p1.waitFor();
                ApplicationStatus.setText("Cache has been wiped! Now rebooting device...");
                Process p2 = Runtime.getRuntime().exec("adb reboot");
                p2.waitFor();
                ApplicationStatus.setText("Done");
                WiperDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnWipeCache.setBounds(282, 27, 220, 75);
    panel_1.add(btnWipeCache);

    JButton btnWipeRadio = new JButton("Radio");
    btnWipeRadio.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            WiperDone.setText("");
            try {
                ApplicationStatus.setText("Wiping...");
                Process p1 = Runtime.getRuntime().exec("fastboot erase radio");
                p1.waitFor();
                ApplicationStatus.setText("Radio has been wiped");
                WiperDone.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Done.png")));
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });
    btnWipeRadio.setToolTipText("Wipe radio partition");
    btnWipeRadio.setBounds(282, 131, 220, 75);
    panel_1.add(btnWipeRadio);

    JLabel lblNoteYourDevices = new JLabel(
            "Note: Your device's bootloader must support fastboot commands and should be in fastboot mode");
    lblNoteYourDevices.setBounds(25, 357, 835, 19);
    panel_1.add(lblNoteYourDevices);

    JPanel panel_3 = new JPanel();
    panel_3.setBackground(Color.WHITE);
    tabbedPane.addTab("Bootloader", null, panel_3, null);
    panel_3.setLayout(null);

    JLabel label_17 = new JLabel("Note: Don't worry if the app says to connect your device while");
    label_17.setBounds(66, 320, 600, 19);
    panel_3.add(label_17);

    JLabel label_18 = new JLabel("android is not booted ex. fastboot, bootloader, booting etc.");
    label_18.setBounds(66, 337, 600, 19);
    panel_3.add(label_18);

    JLabel lblOnlyForNexus = new JLabel(
            "Works only with specific devices ex. Nexus, Android One, FEW MTK devices etc.");
    lblOnlyForNexus.setBounds(66, 351, 600, 24);
    panel_3.add(lblOnlyForNexus);

    JButton btnUnlockBootloader = new JButton("Unlock Bootloader");
    btnUnlockBootloader.setToolTipText("Unlock android device bootloader");
    btnUnlockBootloader.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                ApplicationStatus.setText(
                        "Unlocking bootloader will factory reset your device and may void your device warranty!");
                JOptionPane.showMessageDialog(null,
                        "You will need to re-enable USB debugging later as your device will get factory reset");
                Process p1 = Runtime.getRuntime().exec("adb reboot bootloader");
                p1.waitFor();
                Process p2 = Runtime.getRuntime().exec("fastboot oem unlock");
                p2.waitFor();
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnUnlockBootloader.setBounds(282, 27, 220, 75);
    panel_3.add(btnUnlockBootloader);

    JButton btnLockBootloader = new JButton("Lock Bootloader");
    btnLockBootloader.setToolTipText("Lock android device bootloader");
    btnLockBootloader.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                Process p1 = Runtime.getRuntime().exec("adb reboot bootloader");
                p1.waitFor();
                Process p2 = Runtime.getRuntime().exec("fastboot oem lock");
                p2.waitFor();
            } catch (Exception e1) {
                System.err.println(e1);
            }
        }
    });

    btnLockBootloader.setBounds(25, 27, 220, 75);
    panel_3.add(btnLockBootloader);

    JPanel panel_6 = new JPanel();
    panel_6.setBackground(Color.WHITE);
    tabbedPane.addTab("Crypto", null, panel_6, null);
    panel_6.setLayout(null);

    JButton btnSHA512 = new JButton("SHA-512");
    btnSHA512.setToolTipText("Calculate SHA-512 sum of a file");
    btnSHA512.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            JFileChooser chooser = new JFileChooser();
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = new File("");
                ApplicationStatus.setText("Calculating...");
                CalculatedCrypto.setText(DigestUtils.sha512Hex(file.getAbsolutePath()));
                ApplicationStatus.setText("");
            }
        }
    });

    btnSHA512.setBounds(541, 131, 220, 75);
    panel_6.add(btnSHA512);

    JScrollPane scrollPane_2 = new JScrollPane();
    scrollPane_2.setBounds(12, 332, 900, 25);
    panel_6.add(scrollPane_2);

    InputCrypto = new JTextArea();
    InputCrypto.setToolTipText("Input sum to be compared with calculated sum");
    scrollPane_2.setViewportView(InputCrypto);

    JLabel lblLabelCalculatedSum = new JLabel("Calculated Sum :");
    lblLabelCalculatedSum.setBounds(12, 240, 235, 17);
    panel_6.add(lblLabelCalculatedSum);

    JScrollPane scrollPane_1 = new JScrollPane();
    scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
    scrollPane_1.setBounds(12, 268, 900, 28);
    panel_6.add(scrollPane_1);

    CalculatedCrypto = new JTextArea();
    CalculatedCrypto.setToolTipText("Calclated sum");
    scrollPane_1.setViewportView(CalculatedCrypto);
    CalculatedCrypto.setEditable(false);

    JButton btnSHA384 = new JButton("SHA-384");
    btnSHA384.setToolTipText("Calculate SHA-384 sum of a file");
    btnSHA384.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            JFileChooser chooser = new JFileChooser();
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = new File("");
                ApplicationStatus.setText("Calculating...");
                CalculatedCrypto.setText(DigestUtils.sha384Hex(file.getAbsolutePath()));
                ApplicationStatus.setText("");
            }
        }
    });

    btnSHA384.setBounds(282, 131, 220, 75);
    panel_6.add(btnSHA384);

    JButton btnSHA256 = new JButton("SHA-256");
    btnSHA256.setToolTipText("Calculate SHA-256 sum of a file");
    btnSHA256.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            JFileChooser chooser = new JFileChooser();
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = new File("");
                ApplicationStatus.setText("Calculating...");
                CalculatedCrypto.setText(DigestUtils.sha256Hex(file.getAbsolutePath()));
                ApplicationStatus.setText("");
            }
        }
    });

    btnSHA256.setBounds(25, 131, 220, 75);
    panel_6.add(btnSHA256);

    JButton btnSHA1 = new JButton("SHA-1");
    btnSHA1.setToolTipText("Calculate SHA-1 sum of a file");
    btnSHA1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            JFileChooser chooser = new JFileChooser();
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = new File("");
                ApplicationStatus.setText("Calculating...");
                CalculatedCrypto.setText(DigestUtils.sha1Hex(file.getAbsolutePath()));
                ApplicationStatus.setText("");
            }
        }
    });

    btnSHA1.setBounds(541, 27, 220, 75);
    panel_6.add(btnSHA1);

    JButton btnMD5 = new JButton("MD5");
    btnMD5.setToolTipText("Calculate MD5 sum of a file");
    btnMD5.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            JFileChooser chooser = new JFileChooser();
            int returnVal = chooser.showOpenDialog(getParent());
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = new File("");
                ApplicationStatus.setText("Calculating...");
                CalculatedCrypto.setText(DigestUtils.md5Hex(file.getAbsolutePath()));
                ApplicationStatus.setText("");
            }
        }
    });

    btnMD5.setBounds(282, 27, 220, 75);
    panel_6.add(btnMD5);

    JLabel lblInputSumTo = new JLabel("Input Sum to be compared :");
    lblInputSumTo.setBounds(12, 308, 235, 15);
    panel_6.add(lblInputSumTo);

    JButton btnCompare = new JButton("Compare");
    btnCompare.setToolTipText("Click to compare calculated sum and input sum");
    btnCompare.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (InputCrypto.getText().equals("")) {
                JOptionPane.showMessageDialog(null, "Please select algorithm and a file");
            }
            if (CalculatedCrypto.getText().equals("")) {
                JOptionPane.showMessageDialog(null, "Please input a sum to be compared");
            } else {
                if (InputCrypto.getText().equalsIgnoreCase(CalculatedCrypto.getText())) {
                    JOptionPane.showMessageDialog(null, "Both sums are matched");
                } else {
                    JOptionPane.showMessageDialog(null, "Sums are not matched!");
                }
            }
        }
    });
    btnCompare.setBounds(924, 268, 134, 89);
    panel_6.add(btnCompare);

    JButton btnClearCalculatedCrypto = new JButton("Clear");
    btnClearCalculatedCrypto.setToolTipText("Clear the calculated sum");
    btnClearCalculatedCrypto.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            CalculatedCrypto.setText("");
            InputCrypto.setText("");
        }
    });
    btnClearCalculatedCrypto.setBounds(25, 27, 220, 75);
    panel_6.add(btnClearCalculatedCrypto);

    JLabel label_2 = new JLabel("");
    label_2.setBounds(50, 0, 1038, 256);
    label_2.setIcon(new ImageIcon(Interface.class.getResource("/graphics/Interface_logo.png")));
    contentPane.add(label_2);

    new Updater();

    Thread t = new Thread(r); // Background services
    t.start();

    Runtime.getRuntime().addShutdownHook(new Thread() { // Exit sequence
        public void run() {
            try {
                System.out.println("Killing ADB instance...");
                Process p1 = Runtime.getRuntime().exec("adb kill-server");
                p1.waitFor();
                System.out.println("Cleaning cache...");
                File file2 = new File(".CheckADBConnection");
                if (file2.exists() && !file2.isDirectory()) {
                    file2.delete();
                }
                File file3 = new File("su");
                if (file3.exists() && !file3.isDirectory()) {
                    file3.delete();
                }
                File file4 = new File(".logcat.txt");
                if (file4.exists() && !file4.isDirectory()) {
                    file4.delete();
                }
                File file5 = new File(".userapps.txt");
                if (file5.exists() && !file5.isDirectory()) {
                    file5.delete();
                }
                File file6 = new File(".privapps.txt");
                if (file6.exists() && !file6.isDirectory()) {
                    file6.delete();
                }
                File file7 = new File(".systemapps.txt");
                if (file7.exists() && !file7.isDirectory()) {
                    file4.delete();
                }
                System.out.println("Droid PC Suite terminated");
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });
}

From source file:atlas.kingj.roi.FrmMain.java

/**
 * Initialize the contents of the frame.
 *///from  www  .  jav a  2  s .co  m
private void initialize() {

    frmTitanRoiCalculator = new JFrame();
    frmTitanRoiCalculator.addWindowListener(new FrmTitanRoiCalculatorWindowListener());
    frmTitanRoiCalculator.setResizable(false);
    frmTitanRoiCalculator.setTitle("Titan Production Calculator");
    try {
        frmTitanRoiCalculator.setIconImage(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/logo.png")));//Toolkit.getDefaultToolkit().getImage(FrmMain.class.getResource("/atlas/logo.png")));
    } catch (NullPointerException e) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    frmTitanRoiCalculator.setBounds(100, 100, 800, 600);
    frmTitanRoiCalculator.setLocationRelativeTo(null);
    frmTitanRoiCalculator.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//JFrame.EXIT_ON_CLOSE);

    JMenuBar menuBar = new JMenuBar();
    frmTitanRoiCalculator.setJMenuBar(menuBar);

    JMenu mnFile = new JMenu("File");
    mnFile.setMnemonic('F');
    menuBar.add(mnFile);

    mntmOpen = new JMenuItem("Open");
    mntmOpen.setMnemonic('O');
    mntmOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
    mntmOpen.addActionListener(new MntmOpenActionListener());
    mnFile.add(mntmOpen);

    mntmSave = new JMenuItem("Save");
    mntmSave.setMnemonic('S');
    mntmSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
    mntmSave.addActionListener(new MntmSaveActionListener());
    mnFile.add(mntmSave);

    JMenuItem mntmExit = new JMenuItem("Exit");
    mntmExit.setMnemonic('X');
    mntmExit.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            SaveAndClose();
        }
    });

    mntmSaveAll = new JMenuItem("Save All");
    mntmSaveAll.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            SaveAll();
        }
    });

    mntmOpenAll = new JMenuItem("Open All");
    mntmOpenAll.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            OpenAll();
        }
    });
    mnFile.add(mntmOpenAll);
    mntmSaveAll.setMnemonic('V');
    mnFile.add(mntmSaveAll);

    mnExport = new JMenu("Export");
    mnFile.add(mnExport);

    mntmSpreadsheet = new JMenuItem("Spreadsheet");
    mntmSpreadsheet.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            ResetStatusLabel();

            fc = new OpenSaveFileChooser();
            fc.setFileFilter(new XLSfilter());
            fc.type = 3;

            int returnVal = fc.showSaveDialog(frmTitanRoiCalculator);
            if (returnVal == JFileChooser.APPROVE_OPTION) {

                File file = fc.getSelectedFile();

                String path = file.getAbsolutePath();

                String extension = ".xls";

                if (!path.endsWith(extension)) {
                    file = new File(path + extension);
                }

                StatusDialog a = new StatusDialog("Generating spreadsheet...");

                SaveFileWorker worker = new SaveFileWorker(file, a, false);

                worker.execute();

                a.setLocationRelativeTo(frmTitanRoiCalculator);
                a.setVisible(true);

                if (FileSaveError)
                    ShowMessage("File save error");
                else if (FileSaveWarning)
                    ShowMessage("File saved, but possible errors.");
                else
                    ShowMessageSuccess("File saved.");

            }
        }
    });
    mnExport.add(mntmSpreadsheet);
    mnFile.add(mntmExit);

    JMenu mnView = new JMenu("View");
    mnView.setMnemonic('V');
    menuBar.add(mnView);

    RoiData = new ROIData();

    mntmUnitConverter = new JMenuItem("Unit Converter");
    mntmUnitConverter.setMnemonic('C');
    mntmUnitConverter.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK));
    mntmUnitConverter.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            new UnitConverter();
        }
    });
    mnView.add(mntmUnitConverter);

    mnSettings = new JMenu("Settings");
    mnSettings.setMnemonic('E');
    menuBar.add(mnSettings);

    mnUnits = new JMenu("Units");
    mnUnits.setMnemonic('U');
    mnSettings.add(mnUnits);

    rdbtnmntmImperial = new JRadioButtonMenuItem("Imperial");
    rdbtnmntmImperial.setMnemonic('I');
    rdbtnmntmImperial.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, InputEvent.CTRL_MASK));
    rdbtnmntmImperial.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            if (metric) {
                // Change units from metric to imperial
                ChangeUnits();
            }
        }
    });
    mnUnits.add(rdbtnmntmImperial);

    rdbtnmntmMetric = new JRadioButtonMenuItem("Metric");
    rdbtnmntmMetric.setMnemonic('M');
    rdbtnmntmMetric.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, InputEvent.CTRL_MASK));
    rdbtnmntmMetric.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (!metric) {
                // Change units from imperial to metric
                ChangeUnits();
            }
        }
    });
    rdbtnmntmMetric.setSelected(true);
    mnUnits.add(rdbtnmntmMetric);

    btnsUnits.add(rdbtnmntmMetric);
    btnsUnits.add(rdbtnmntmImperial);

    JMenuItem mntmOptions_1 = new JMenuItem("Options");
    mntmOptions_1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_MASK));
    mntmOptions_1.setMnemonic('O');
    mntmOptions_1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Machine machine = null;
            if (listMachines.getSelectedIndex() > -1)
                machine = (Machine) listMachines.getSelectedValue();
            OptionDialog options = new OptionDialog(environment, machine);
            options.setLocationRelativeTo(frmTitanRoiCalculator);
            options.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosed(WindowEvent e) {
                    UpdateAnalysis();
                }
            });
            options.setVisible(true);
        }
    });

    mnTimings = new JMenu("Timings");
    mnSettings.add(mnTimings);

    mntmSaveToFile = new JMenuItem("Save to File");
    mntmSaveToFile.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            OperatorTimings times = environment.timings;

            fc = new OpenSaveFileChooser();
            fc.setFileFilter(new OBJfilter(3));
            fc.type = 1;

            int returnVal = fc.showSaveDialog(frmTitanRoiCalculator);
            if (returnVal == JFileChooser.APPROVE_OPTION) {

                File file = fc.getSelectedFile();

                String path = file.getAbsolutePath();

                String extension = ".ser";

                if (!path.endsWith(extension)) {
                    file = new File(path + extension);
                }

                try {
                    FileOutputStream fout = new FileOutputStream(file);
                    ObjectOutputStream oos = new ObjectOutputStream(fout);
                    oos.writeObject(times);
                    oos.close();
                    ShowMessageSuccess("File saved.");
                } catch (Exception e1) {
                    JOptionPane.showMessageDialog(frmTitanRoiCalculator, "Error writing file.", "Error",
                            JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    });
    mnTimings.add(mntmSaveToFile);

    mntmLoadFromFile = new JMenuItem("Load from File");
    mntmLoadFromFile.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            fc = new OpenSaveFileChooser();
            fc.setFileFilter(new OBJfilter(3));
            fc.type = 1;

            int returnVal = fc.showOpenDialog(frmTitanRoiCalculator);
            if (returnVal == JFileChooser.APPROVE_OPTION) {

                File file = fc.getSelectedFile();

                try {
                    FileInputStream fin = new FileInputStream(file);
                    ObjectInputStream ois = new ObjectInputStream(fin);
                    environment.timings = (OperatorTimings) ois.readObject();
                    ois.close();

                    ShowMessageSuccess("File loaded.");

                } catch (Exception e1) {
                    ShowMessage("File error.");
                }
            }
        }
    });
    mnTimings.add(mntmLoadFromFile);
    mnSettings.add(mntmOptions_1);

    JMenu mnHelp = new JMenu("Help");
    mnHelp.setMnemonic('H');
    menuBar.add(mnHelp);

    JMenuItem mntmInstructions = new JMenuItem("Instructions");
    mntmInstructions.setMnemonic('I');
    mntmInstructions.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            InstructDialog instructions = new InstructDialog();
            instructions.setLocationRelativeTo(frmTitanRoiCalculator);
            instructions.setVisible(true);
        }
    });
    mnHelp.add(mntmInstructions);

    JMenuItem mntmAbout = new JMenuItem("About");
    mntmAbout.setMnemonic('A');
    mntmAbout.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            AboutDialog about = new AboutDialog();
            about.setLocationRelativeTo(frmTitanRoiCalculator);
            about.setVisible(true);
        }
    });
    mnHelp.add(mntmAbout);

    tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    tabbedPane.addChangeListener(TabChangeListener);
    frmTitanRoiCalculator.getContentPane().add(tabbedPane, BorderLayout.CENTER);

    pnlMachine = new JPanel();
    tabbedPane.addTab("Machine Selection", null, pnlMachine, "Add and configure machine setups");
    tabbedPane.setEnabledAt(0, true);
    pnlMachine.setLayout(null);

    grpMachines = new JPanel();
    grpMachines.setFont(new Font("Tahoma", Font.PLAIN, 11));
    grpMachines.setBounds(20, 72, 182, 256);
    grpMachines.setBorder(
            new TitledBorder(null, "Machine Type", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    pnlMachine.add(grpMachines);
    grpMachines.setLayout(null);

    try {
        rdbtnER610 = new JRadioButton(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/er610.png"))));
        rdbtnER610.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/er610_dis.png"))));
        rdbtnER610.setDisabledSelectedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/er610_dis.png"))));
        rdbtnER610.setEnabled(false);
        rdbtnER610.setToolTipText("Titan ER610");
    } catch (NullPointerException e1) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }

    rdbtnER610.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            rdbtnClick("ER610");
            UpdateMachine();
            listMachines.repaint();
        }
    });
    rdbtnER610.setSelected(true);
    rdbtnER610.setBounds(13, 24, 155, 40);
    try {
        rdbtnER610.setPressedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/er610_down.png"))));
        rdbtnER610.setRolloverEnabled(true);
        rdbtnER610.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/er610_over.png"))));
        rdbtnER610.setSelectedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/er610_select.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    grpMachines.add(rdbtnER610);

    try {
        rdbtnSR9DS = new JRadioButton(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr9ds.png"))));
        rdbtnSR9DS.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr9ds_dis.png"))));
        rdbtnSR9DS.setEnabled(false);
        rdbtnSR9DS.setToolTipText("Titan SR9-DS");
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    rdbtnSR9DS.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            rdbtnClick("SR9DS");
            UpdateMachine();
            listMachines.repaint();
        }
    });

    try {
        rdbtnSR9DS.setPressedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr9ds_down.png"))));
        rdbtnSR9DS.setRolloverEnabled(true);
        rdbtnSR9DS.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr9ds_over.png"))));
        rdbtnSR9DS.setSelectedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr9ds_select.png"))));
        rdbtnSR9DS.setBounds(13, 68, 155, 40);
        grpMachines.add(rdbtnSR9DS);

        rdbtnSR9DT = new JRadioButton(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr9dt.png"))));
        rdbtnSR9DT.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr9dt_dis.png"))));
        rdbtnSR9DT.setEnabled(false);
        rdbtnSR9DT.setToolTipText("Titan SR9-DT");
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    rdbtnSR9DT.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            rdbtnClick("SR9DT");
            UpdateMachine();
            listMachines.repaint();
        }
    });
    rdbtnSR9DT.setBounds(13, 112, 155, 40);
    try {
        rdbtnSR9DT.setPressedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr9dt_down.png"))));
        rdbtnSR9DT.setRolloverEnabled(true);
        rdbtnSR9DT.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr9dt_over.png"))));
        rdbtnSR9DT.setSelectedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr9dt_select.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    grpMachines.add(rdbtnSR9DT);

    try {
        rdbtnSR800 = new JRadioButton(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr800.png"))));
        rdbtnSR800.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr800_dis.png"))));
        rdbtnSR800.setEnabled(false);
        rdbtnSR800.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                rdbtnClick("SR800");
                UpdateMachine();
                listMachines.repaint();
            }
        });
        rdbtnSR800.setPressedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr800_down.png"))));
        rdbtnSR800.setRolloverEnabled(true);
        rdbtnSR800.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr800_over.png"))));
        rdbtnSR800.setSelectedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/sr800_select.png"))));
    } catch (IOException e2) {
        e2.printStackTrace();
    }
    rdbtnSR800.setToolTipText("Titan SR800");
    rdbtnSR800.setRolloverEnabled(true);
    rdbtnSR800.setBounds(13, 156, 155, 40);
    grpMachines.add(rdbtnSR800);

    try {
        rdbtnCustom = new JRadioButton(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/custom.png"))));
        rdbtnCustom.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/custom_dis.png"))));
        rdbtnCustom.setEnabled(false);
        rdbtnCustom.setPressedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/custom_down.png"))));
        rdbtnCustom.setRolloverEnabled(true);
        rdbtnCustom.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/custom_over.png"))));
        rdbtnCustom.setSelectedIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/custom_select.png"))));
    } catch (IOException e2) {
        e2.printStackTrace();
    }
    rdbtnCustom.setToolTipText("Custom Machine");
    rdbtnCustom.setRolloverEnabled(true);
    rdbtnCustom.setBounds(13, 200, 155, 40);
    grpMachines.add(rdbtnCustom);
    rdbtnCustom.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            rdbtnClick("Custom");
            UpdateMachine();
            ResetStatusLabel();
            listMachines.repaint();
        }
    });

    rdbtnsMachines.add(rdbtnER610);
    rdbtnsMachines.add(rdbtnSR9DS);
    rdbtnsMachines.add(rdbtnSR9DT);
    rdbtnsMachines.add(rdbtnSR800);
    rdbtnsMachines.add(rdbtnCustom);

    grpVariants = new JPanel();
    grpVariants.setFont(new Font("Tahoma", Font.PLAIN, 11));
    grpVariants.setBounds(20, 339, 482, 112);
    grpVariants
            .setBorder(new TitledBorder(null, "Variants", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    pnlMachine.add(grpVariants);
    grpVariants.setLayout(null);

    cmbCorepos = new JComboBox();
    cmbCorepos.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbCorepos.setToolTipText("Set the core positioning system");
    cmbCorepos.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
        }
    });
    cmbCorepos.setEnabled(false);
    cmbCorepos.setBounds(104, 70, 122, 20);
    grpVariants.add(cmbCorepos);
    cmbCorepos.setModel(new DefaultComboBoxModel(new String[] { "Manual", "Laser" }));

    lblCorePositioning = new JLabel("Core Positioning:");
    lblCorePositioning.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblCorePositioning.setToolTipText("Set the core positioning system");
    lblCorePositioning.setEnabled(false);
    lblCorePositioning.setHorizontalAlignment(SwingConstants.RIGHT);
    lblCorePositioning.setBounds(12, 73, 88, 14);
    grpVariants.add(lblCorePositioning);

    lblKnifeControl = new JLabel("Knife Control:");
    lblKnifeControl.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblKnifeControl.setToolTipText("Set the type of knife positioning system");
    lblKnifeControl.setEnabled(false);
    lblKnifeControl.setHorizontalAlignment(SwingConstants.RIGHT);
    lblKnifeControl.setBounds(22, 48, 78, 14);
    grpVariants.add(lblKnifeControl);

    cmbKnives = new JComboBox();
    cmbKnives.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbKnives.setToolTipText("Set the type of knife positioning system");
    cmbKnives.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
        }
    });
    cmbKnives.setEnabled(false);
    cmbKnives.setBounds(104, 45, 122, 20);
    grpVariants.add(cmbKnives);
    cmbKnives.setModel(new DefaultComboBoxModel(new String[] { "Manual", "Auto" }));

    cmbUnloader = new JComboBox();
    cmbUnloader.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbUnloader.setToolTipText("Set the unloader type");
    cmbUnloader.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
        }
    });
    cmbUnloader.setEnabled(false);
    cmbUnloader.setBounds(350, 20, 122, 20);
    grpVariants.add(cmbUnloader);
    cmbUnloader.setModel(new DefaultComboBoxModel(new String[] { "Manual", "Pneumatic", "Electric" }));

    lblUnloader = new JLabel("Unloader:");
    lblUnloader.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblUnloader.setToolTipText("Set the unloader type");
    lblUnloader.setEnabled(false);
    lblUnloader.setHorizontalAlignment(SwingConstants.RIGHT);
    lblUnloader.setBounds(259, 23, 87, 14);
    grpVariants.add(lblUnloader);

    cmbSpeed = new JComboBox();
    cmbSpeed.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbSpeed.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            if (formReady)
                UpdateMachine();
        }
    });
    cmbSpeed.setEnabled(false);
    cmbSpeed.setToolTipText("Machine top speed in metres/min");
    cmbSpeed.setBounds(104, 20, 122, 20);
    grpVariants.add(cmbSpeed);
    cmbSpeed.setModel(new DefaultComboBoxModel(new String[] { "450", "550" }));

    lblSpeed = new JLabel("Speed:");
    lblSpeed.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblSpeed.setToolTipText("Machine top speed in metres/min");
    lblSpeed.setEnabled(false);
    lblSpeed.setHorizontalAlignment(SwingConstants.RIGHT);
    lblSpeed.setBounds(54, 23, 46, 14);
    grpVariants.add(lblSpeed);

    cmbUnwindDrive = new JComboBox();
    cmbUnwindDrive.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbUnwindDrive.setToolTipText("Unwind drive type");
    cmbUnwindDrive.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
        }
    });
    cmbUnwindDrive.setEnabled(false);
    cmbUnwindDrive.setBounds(350, 45, 122, 20);
    grpVariants.add(cmbUnwindDrive);
    cmbUnwindDrive.setModel(new DefaultComboBoxModel(new String[] { "Single", "Double" }));

    lblUnwindDrive = new JLabel("Unwind Drive:");
    lblUnwindDrive.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblUnwindDrive.setToolTipText("Unwind drive type");
    lblUnwindDrive.setEnabled(false);
    lblUnwindDrive.setHorizontalAlignment(SwingConstants.RIGHT);
    lblUnwindDrive.setBounds(259, 48, 87, 14);
    grpVariants.add(lblUnwindDrive);

    lblRewindControlLoop = new JLabel("Rewind Control Loop:");
    lblRewindControlLoop.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblRewindControlLoop.setToolTipText("Rewind control loop type");
    lblRewindControlLoop.setEnabled(false);
    lblRewindControlLoop.setHorizontalAlignment(SwingConstants.RIGHT);
    lblRewindControlLoop.setBounds(224, 73, 122, 14);
    grpVariants.add(lblRewindControlLoop);

    cmbRewindCtrl = new JComboBox();
    cmbRewindCtrl.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbRewindCtrl.setToolTipText("Rewind control loop type");
    cmbRewindCtrl.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
        }
    });
    cmbRewindCtrl.setEnabled(false);
    cmbRewindCtrl.setBounds(350, 70, 122, 20);
    grpVariants.add(cmbRewindCtrl);
    cmbRewindCtrl.setModel(new DefaultComboBoxModel(new String[] { "Open", "Closed" }));

    listModel = new DefaultListModel();
    jobModel = new DefaultListModel();
    scheduleModel = new DefaultListModel();
    listModel.removeAllElements();
    /*listMachines.setModel(new AbstractListModel() {
       String[] values = new String[] {"ER610: My test 1", "SR9-DS: this is another test", "SR9-DT: third test", "ER610:  test 2", "ER610: bla bla", "SR9-DS: this is another test", "SR9-DT: hello", "SR9-DT: third test"};
       public int getSize() {
    return values.length;
       }
       public Object getElementAt(int index) {
    return values[index];
       }
    });*/

    JLabel lblMachines = new JLabel("Machines");
    lblMachines.setFont(new Font("Tahoma", Font.BOLD, 12));
    lblMachines.setBounds(522, 19, 85, 14);
    pnlMachine.add(lblMachines);

    btnMachDelete = new JButton("");
    try {
        btnMachDelete
                .setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/delete.png"))));
        btnMachDelete.setRolloverEnabled(true);
        btnMachDelete.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/delete_over.png"))));
        btnMachDelete.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/delete_dis.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnMachDelete.setToolTipText("Delete machine");
    btnMachDelete.setEnabled(false);
    btnMachDelete.addActionListener(new DeleteButtonListener());
    btnMachDelete.setBounds(651, 460, 36, 36);
    pnlMachine.add(btnMachDelete);

    btnMachUp = new JButton("");
    btnMachUp.setToolTipText("Move machine up");
    btnMachUp.setEnabled(false);
    try {
        btnMachUp.setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/up.png"))));
        btnMachUp.setRolloverEnabled(true);
        btnMachUp.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/up_over.png"))));
        btnMachUp.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/up_dis.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnMachUp.addActionListener(new UpListener());
    btnMachUp.setBounds(700, 463, 30, 30);
    pnlMachine.add(btnMachUp);

    btnMachDown = new JButton("");
    btnMachDown.setToolTipText("Move machine down");
    btnMachDown.setEnabled(false);
    try {
        btnMachDown.setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/down.png"))));
        btnMachDown.setRolloverEnabled(true);
        btnMachDown.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/down_over.png"))));
        btnMachDown.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/down_dis.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnMachDown.addActionListener(new DownListener());
    btnMachDown.setBounds(737, 463, 30, 30);
    pnlMachine.add(btnMachDown);

    btnMachReset = new JButton("Reset");
    btnMachReset.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnMachReset.setEnabled(false);
    btnMachReset.setToolTipText("Reset the form");
    btnMachReset.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            ResetForm();
        }
    });

    btnMachReset.setBounds(20, 460, 100, 36);
    pnlMachine.add(btnMachReset);
    /*txtMachName.addKeyListener(new KeyAdapter() {
       @Override
       public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();  
    if (e.getKeyCode() == KeyEvent.VK_ENTER)  
       btnAddMachine.doClick();
       }
    });*/

    btnNewMachine = new JButton("Add New");
    btnNewMachine.setFont(new Font("Tahoma", Font.BOLD, 11));
    btnNewMachine.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            formReady = false;

            ResetStatusLabel();

            int index = listMachines.getSelectedIndex();
            int size = listModel.getSize();

            if (size >= Consts.MACH_LIST_LIMIT) { // Max list size
                ShowMessage(
                        "Maximum number of machines allocated. Please delete before attempting to add more.");
                return;
            }

            String newName = getUniqueName("Machine");
            txtMachName.setText(newName);
            machine = new Machine(newName);
            machNames.add(newName.toLowerCase());

            //If no selection or if item in last position is selected,
            //add the new one to end of list, and select new one.
            if (index == -1 || (index + 1 == size)) {

                listModel.addElement(machine);
                listMachines.setSelectedIndex(size);

                RoiData.energies.add(RoiData.new EnergyData());
                RoiData.maintenance.add(RoiData.new MaintData());
                listCompare.addSelectionInterval(size, size);

                //Otherwise insert the new one after the current selection,
                //and select new one.
            } else {
                int[] sel = listCompare.getSelectedIndices();
                int[] selection = new int[sel.length + 1];
                System.arraycopy(sel, 0, selection, 0, sel.length);
                listCompare.setSelectedIndices(new int[] {});
                listModel.insertElementAt(machine, index + 1);

                boolean max = false;
                for (int i = 0; i < selection.length; i++) {
                    if (selection[i] >= index + 1 && !max) {
                        if (i < selection.length - 1)
                            System.arraycopy(selection, i, selection, i + 1, selection.length - i - 1);
                        selection[i] = index + 1;
                        max = true;
                    } else if (selection[i] >= index + 1)
                        selection[i] = selection[i] + 1;
                }
                RoiData.energies.add(index + 1, RoiData.new EnergyData());
                RoiData.maintenance.add(index + 1, RoiData.new MaintData());
                listCompare.setSelectedIndices(selection);
                //listCompareRoi.setSelectedIndices(selection);
                listMachines.setSelectedIndex(index + 1);
                //listCompare.addSelectionInterval(index + 1, index + 1);
            }

            ResetStatusLabel();
            //UpdateForm();  already triggered in listchanged
            formReady = true;
            txtMachName.requestFocusInWindow();
        }
    });
    try {
        btnNewMachine
                .setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/plus.png"))));
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnNewMachine.setToolTipText("Add new machine");
    btnNewMachine.setBounds(522, 460, 110, 36);
    pnlMachine.add(btnNewMachine);

    grpOptions = new JPanel();
    grpOptions.setFont(new Font("Tahoma", Font.PLAIN, 11));
    grpOptions.setBounds(212, 72, 290, 256);
    pnlMachine.add(grpOptions);
    grpOptions.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Options",
            TitledBorder.LEADING, TitledBorder.TOP, null, null));
    grpOptions.setLayout(null);

    chckbxFlag = new JCheckBox("Flag Detection");
    chckbxFlag.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxFlag.setToolTipText("Whether an automatic flag detection system is used");
    chckbxFlag.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
            if (!chckbxFlag.isSelected())
                chckbxSelectAll.setSelected(false);
            else
                UpdateSelectAllChckbx();
        }
    });
    chckbxFlag.setEnabled(false);
    chckbxFlag.setBounds(155, 104, 109, 23);
    grpOptions.add(chckbxFlag);

    chckbxSpliceTable = new JCheckBox("Splice Table");
    chckbxSpliceTable.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxSpliceTable.setToolTipText("Whether a splice table is fitted");
    chckbxSpliceTable.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
            if (!chckbxSpliceTable.isSelected())
                chckbxSelectAll.setSelected(false);
            else
                UpdateSelectAllChckbx();
        }
    });
    chckbxSpliceTable.setEnabled(false);
    chckbxSpliceTable.setBounds(22, 104, 109, 23);
    grpOptions.add(chckbxSpliceTable);

    chckbxAlignmentGuide = new JCheckBox("Alignment Guide");
    chckbxAlignmentGuide.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxAlignmentGuide.setToolTipText("Whether an alignment guide is fitted");
    chckbxAlignmentGuide.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
            if (!chckbxAlignmentGuide.isSelected())
                chckbxSelectAll.setSelected(false);
            else
                UpdateSelectAllChckbx();
        }
    });
    chckbxAlignmentGuide.setEnabled(false);
    chckbxAlignmentGuide.setBounds(22, 130, 127, 23);
    grpOptions.add(chckbxAlignmentGuide);

    chckbxRollConditioning = new JCheckBox("Roll Conditioning");
    chckbxRollConditioning.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxRollConditioning.setToolTipText("Whether the machine supports roll conditioning");
    chckbxRollConditioning.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
            if (!chckbxRollConditioning.isSelected())
                chckbxSelectAll.setSelected(false);
            else
                UpdateSelectAllChckbx();
        }
    });
    chckbxRollConditioning.setEnabled(false);
    chckbxRollConditioning.setBounds(22, 156, 127, 23);
    grpOptions.add(chckbxRollConditioning);

    chckbxTurretSupport = new JCheckBox("Turret Support");
    chckbxTurretSupport.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxTurretSupport.setToolTipText("For dual turret machines: extra turret support");
    chckbxTurretSupport.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
            if (!chckbxTurretSupport.isSelected())
                chckbxSelectAll.setSelected(false);
            else
                UpdateSelectAllChckbx();
        }
    });
    chckbxTurretSupport.setEnabled(false);
    chckbxTurretSupport.setBounds(22, 182, 127, 23);
    grpOptions.add(chckbxTurretSupport);

    chckbxAutostripping = new JCheckBox("Autostripping");
    chckbxAutostripping.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxAutostripping.setToolTipText("Whether an autostripping feature is present for reel unloading");
    chckbxAutostripping.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
            if (!chckbxAutostripping.isSelected())
                chckbxSelectAll.setSelected(false);
            else
                UpdateSelectAllChckbx();
        }
    });
    chckbxAutostripping.setEnabled(false);
    chckbxAutostripping.setBounds(22, 208, 97, 23);
    grpOptions.add(chckbxAutostripping);

    chckbxExtraRewind = new JCheckBox("850mm Rewind");
    chckbxExtraRewind.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxExtraRewind.setToolTipText("Extra wide 850mm max diameter rewind support");
    chckbxExtraRewind.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
            if (!chckbxExtraRewind.isSelected())
                chckbxSelectAll.setSelected(false);
            else
                UpdateSelectAllChckbx();
        }
    });
    chckbxExtraRewind.setEnabled(false);
    chckbxExtraRewind.setBounds(155, 208, 109, 23);
    grpOptions.add(chckbxExtraRewind);

    chckbxAutoCutoff = new JCheckBox("Auto Cut-off");
    chckbxAutoCutoff.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxAutoCutoff.setToolTipText("Whether the web is cut automatically when a run completes");
    chckbxAutoCutoff.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
            if (!chckbxAutoCutoff.isSelected())
                chckbxSelectAll.setSelected(false);
            else
                UpdateSelectAllChckbx();
        }
    });
    chckbxAutoCutoff.setEnabled(false);
    chckbxAutoCutoff.setBounds(155, 130, 109, 23);
    grpOptions.add(chckbxAutoCutoff);

    chckbxAutoTapeCore = new JCheckBox("Auto Tape Core");
    chckbxAutoTapeCore.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxAutoTapeCore.setToolTipText("Whether new reels are automatically taped before a run begins");
    chckbxAutoTapeCore.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
            if (!chckbxAutoTapeCore.isSelected())
                chckbxSelectAll.setSelected(false);
            else
                UpdateSelectAllChckbx();
        }
    });
    chckbxAutoTapeCore.setEnabled(false);
    chckbxAutoTapeCore.setBounds(155, 156, 109, 23);
    grpOptions.add(chckbxAutoTapeCore);

    chckbxAutoTapeTail = new JCheckBox("Auto Tape Tail");
    chckbxAutoTapeTail.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxAutoTapeTail.setToolTipText("Whether the tails of completed reels are automatically taped down");
    chckbxAutoTapeTail.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (formReady)
                UpdateMachine();
            if (!chckbxAutoTapeTail.isSelected())
                chckbxSelectAll.setSelected(false);
            else
                UpdateSelectAllChckbx();
        }
    });
    chckbxAutoTapeTail.setEnabled(false);
    chckbxAutoTapeTail.setBounds(155, 182, 109, 23);
    grpOptions.add(chckbxAutoTapeTail);

    txtMachName = new JTextField();
    txtMachName.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtMachName.selectAll();
        }
    });
    txtMachName.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void changedUpdate(DocumentEvent arg0) {
        }

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            UpdateMachineName();
        }

        @Override
        public void removeUpdate(DocumentEvent arg0) {
            UpdateMachineName();
        }
    });
    txtMachName.setEnabled(false);
    txtMachName.setBounds(125, 35, 137, 28);
    grpOptions.add(txtMachName);
    txtMachName.getDocument().addDocumentListener(new DocumentListener() {
        public void changedUpdate(DocumentEvent e) {
        }

        public void removeUpdate(DocumentEvent e) {
            // text was deleted
        }

        public void insertUpdate(DocumentEvent e) {
            // text was inserted
        }
    });

    txtMachName.setToolTipText("Enter a name to refer to this particular machine by");
    txtMachName.setFont(new Font("Tahoma", Font.BOLD, 12));
    txtMachName.setColumns(10);

    lblMachName = new JLabel("Machine name:");
    lblMachName.setToolTipText("Enter a name to refer to this particular machine by");
    lblMachName.setEnabled(false);
    lblMachName.setBounds(26, 36, 91, 24);
    grpOptions.add(lblMachName);
    lblMachName.setFont(new Font("Tahoma", Font.PLAIN, 13));

    chckbxSelectAll = new JCheckBox("Select All");
    chckbxSelectAll.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxSelectAll.setToolTipText("Select all available options");
    chckbxSelectAll.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (chckbxSelectAll.isSelected()) {
                if (chckbxAlignmentGuide.isEnabled())
                    chckbxAlignmentGuide.setSelected(true);
                if (chckbxAutoCutoff.isEnabled())
                    chckbxAutoCutoff.setSelected(true);
                if (chckbxAutostripping.isEnabled())
                    chckbxAutostripping.setSelected(true);
                if (chckbxAutoTapeCore.isEnabled())
                    chckbxAutoTapeCore.setSelected(true);
                if (chckbxAutoTapeTail.isEnabled())
                    chckbxAutoTapeTail.setSelected(true);
                if (chckbxExtraRewind.isEnabled())
                    chckbxExtraRewind.setSelected(true);
                if (chckbxFlag.isEnabled())
                    chckbxFlag.setSelected(true);
                if (chckbxRollConditioning.isEnabled())
                    chckbxRollConditioning.setSelected(true);
                if (chckbxSpliceTable.isEnabled())
                    chckbxSpliceTable.setSelected(true);
                if (chckbxTurretSupport.isEnabled())
                    chckbxTurretSupport.setSelected(true);
            } else {
                chckbxAlignmentGuide.setSelected(false);
                chckbxAutoCutoff.setSelected(false);
                chckbxAutostripping.setSelected(false);
                chckbxAutoTapeCore.setSelected(false);
                chckbxAutoTapeTail.setSelected(false);
                chckbxExtraRewind.setSelected(false);
                chckbxFlag.setSelected(false);
                chckbxRollConditioning.setSelected(false);
                chckbxSpliceTable.setSelected(false);
                chckbxTurretSupport.setSelected(false);
            }

            if (formReady)
                UpdateMachine();
        }
    });
    chckbxSelectAll.setEnabled(false);
    chckbxSelectAll.setBounds(22, 78, 97, 23);
    grpOptions.add(chckbxSelectAll);

    lblMachineConfiguration = new JLabel("Machine Configuration");
    lblMachineConfiguration.setFont(new Font("Tahoma", Font.BOLD, 18));
    lblMachineConfiguration.setBounds(29, 18, 269, 22);
    pnlMachine.add(lblMachineConfiguration);

    lblAddNewMachines = new JLabel(
            "Add new machines to the list on the right, then configure their options and variants below");
    lblAddNewMachines.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblAddNewMachines.setBounds(29, 45, 433, 14);
    pnlMachine.add(lblAddNewMachines);

    btnCustomMachine = new JButton("Custom Machine Options");
    btnCustomMachine.setEnabled(false);
    btnCustomMachine.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnCustomMachine.setBounds(322, 460, 180, 36);
    pnlMachine.add(btnCustomMachine);
    btnCustomMachine.setToolTipText("Edit settings for a custom machine type");

    scrollPane = new JScrollPane();
    scrollPane.setBorder(null);
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
    scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane.setBounds(522, 44, 245, 405);
    pnlMachine.add(scrollPane);

    panel_6 = new JPanel();
    panel_6.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, new Color(192, 192, 192), null, null, null));
    panel_6.setBackground(Color.WHITE);
    panel_6.setToolTipText("Select a machine to edit options, re-order, or delete");
    scrollPane.setViewportView(panel_6);
    panel_6.setLayout(new BorderLayout(0, 0));

    //Create the list and put it in a scroll pane.
    listMachines = new JList(listModel);
    panel_6.add(listMachines, BorderLayout.NORTH);
    listMachines.addListSelectionListener(new MachineListSelectionListener());
    listMachines.setCellRenderer(new MachineListRenderer());

    listMachines.setBorder(null);
    listMachines.setToolTipText("Select a machine to edit options, re-order, or delete");
    listMachines.setFont(new Font("Tahoma", Font.PLAIN, 13));
    listMachines.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    btnOverrideDefaultAcceleration = new JButton("Override Default Acceleration");
    btnOverrideDefaultAcceleration.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnOverrideDefaultAcceleration
            .setToolTipText("Set new values for the acceleration/deceleration of this machine");
    btnOverrideDefaultAcceleration.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try { // check list selected
                listMachines.getSelectedIndex();
            } catch (Exception e2) {
                return;
            }
            Machine currMachine = (Machine) listMachines.getSelectedValue();
            AccelDecel dialog = new AccelDecel(currMachine);
            dialog.setLocationRelativeTo(frmTitanRoiCalculator);
            dialog.setVisible(true);
        }
    });
    btnOverrideDefaultAcceleration.setEnabled(false);
    btnOverrideDefaultAcceleration.setBounds(130, 460, 182, 36);
    pnlMachine.add(btnOverrideDefaultAcceleration);

    btnCustomMachine.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            ResetStatusLabel();
            //rdbtnOther.doClick();
            MachineBuilder newmach = new MachineBuilder(machine);
            newmach.setLocationRelativeTo(frmTitanRoiCalculator);
            newmach.setVisible(true);
        }
    });

    pnlJob = new JPanel();
    tabbedPane.addTab("Job Selection", null, pnlJob, "Add and configure machine jobs");
    tabbedPane.setEnabledAt(1, true);
    pnlJob.setLayout(null);

    JPanel pnlMaterials = new JPanel();
    pnlMaterials.setBounds(280, 72, 227, 124);
    pnlMaterials.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Material Settings",
            TitledBorder.LEADING, TitledBorder.TOP, null, null));
    pnlJob.add(pnlMaterials);
    pnlMaterials.setLayout(null);

    Material[] materials = { new Material("Custom", 1.0, 20), new Material("Aluminium", 2.7, 40),
            new Material("Board", 1.3, 80), new Material("Cellophane", 1.5, 20),
            new Material("HDPE/BOPE", 0.94, 20), new Material("Laminate", 1.0, 20),
            new Material("LDPE/BOPE", 0.91, 20), new Material("LLDPE", 0.9, 20),
            new Material("MDPE", 0.925, 20), new Material("Nylon", 1.12, 20),
            new Material("Polypropylene", 0.91, 20), new Material("Polystyrene", 1.04, 20),
            new Material("Paper", 0.8, 100), new Material("PEEK", 1.3, 20), new Material("Polyester", 1.4, 20),
            new Material("PLA", 1.24, 20), new Material("Polyolefin", 0.92, 20),
            new Material("PSA Label", 1.1, 20), new Material("PVC", 1.36, 20),
            new Material("Shrink label", 0.91, 20), new Material("Tri. Lam.", 1.1, 20) };

    cmbMaterials = new JComboBox(materials);
    cmbMaterials.setMaximumRowCount(20);
    cmbMaterials.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            if (jobFormReady) {
                Material m = (Material) cmbMaterials.getSelectedItem();
                if (!(m.name.equals("Custom"))) {
                    jobFormReady = false;
                    txtThickness.setText(Double.toString(roundTwoDecimals(m.getThickness())));
                    if (lblGsm.getText().equals("(gsm)"))
                        txtDensity.setText(Double.toString(roundTwoDecimals(m.getDensity())));
                    else
                        txtDensity
                                .setText(Double.toString(roundTwoDecimals(m.getDensity() * m.getThickness())));
                    if (!metric) {
                        txtThickness
                                .setText(Double.toString(roundTwoDecimals(Core.MicroToMil(m.getThickness()))));
                    }
                    jobFormReady = true;
                }
                UpdateJob();
            }
        }
    });
    cmbMaterials.setEnabled(false);
    cmbMaterials.setSelectedIndex(0);
    cmbMaterials.setToolTipText("Choose a preset material");
    cmbMaterials.setBounds(81, 26, 117, 22);
    pnlMaterials.add(cmbMaterials);

    lblPresets = new JLabel("Presets:");
    lblPresets.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblPresets.setToolTipText("Choose a preset material");
    lblPresets.setEnabled(false);
    lblPresets.setBounds(37, 29, 40, 15);
    pnlMaterials.add(lblPresets);

    lblThickness_1 = new JLabel("Thickness:");
    lblThickness_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblThickness_1.setToolTipText("Material thickness");
    lblThickness_1.setEnabled(false);
    lblThickness_1.setHorizontalAlignment(SwingConstants.RIGHT);
    lblThickness_1.setBounds(7, 61, 70, 14);
    pnlMaterials.add(lblThickness_1);

    lblDensity_1 = new JLabel("Density:");
    lblDensity_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblDensity_1.setToolTipText("Material density (per volume, not area)");
    lblDensity_1.setEnabled(false);
    lblDensity_1.setHorizontalAlignment(SwingConstants.RIGHT);
    lblDensity_1.setBounds(31, 86, 46, 14);
    pnlMaterials.add(lblDensity_1);

    txtThickness = new JTextField();
    txtThickness.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtThickness.selectAll();
        }
    });
    txtThickness.setEnabled(false);
    txtThickness.getDocument().addDocumentListener(new JobInputChangeListener());

    txtThickness.setToolTipText("Material thickness");
    txtThickness.setText("20");
    txtThickness.setBounds(81, 58, 86, 20);
    pnlMaterials.add(txtThickness);
    txtThickness.setColumns(10);

    txtDensity = new JTextField();
    txtDensity.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtDensity.selectAll();
        }
    });
    txtDensity.setEnabled(false);
    txtDensity.getDocument().addDocumentListener(new JobInputChangeListener());

    txtDensity.setToolTipText("Material density (per volume, not area)");
    txtDensity.setText("0.92");
    txtDensity.setBounds(81, 83, 86, 20);
    pnlMaterials.add(txtDensity);
    txtDensity.setColumns(10);

    lblmicro0 = new JLabel("(\u00B5m)");
    lblmicro0.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblmicro0.setEnabled(false);
    lblmicro0.setBounds(177, 61, 46, 14);
    pnlMaterials.add(lblmicro0);

    lblgm3 = new JLabel("(g/cm  )");
    lblgm3.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblgm3.setEnabled(false);
    lblgm3.setBounds(177, 86, 46, 14);
    pnlMaterials.add(lblgm3);

    label_3 = new JLabel("3");
    label_3.setEnabled(false);
    label_3.setFont(new Font("Tahoma", Font.PLAIN, 8));
    label_3.setBounds(204, 83, 14, 14);
    pnlMaterials.add(label_3);

    JPanel pnlJobs = new JPanel();
    pnlJobs.setBounds(20, 168, 250, 283);
    pnlJobs.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Rewind Settings",
            TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
    pnlJob.add(pnlJobs);
    pnlJobs.setLayout(null);

    lblTargetRewindLength = new JLabel("Rewind Output:");
    lblTargetRewindLength.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblTargetRewindLength.setToolTipText("Quantity of rewind output");
    lblTargetRewindLength.setEnabled(false);
    lblTargetRewindLength.setHorizontalAlignment(SwingConstants.RIGHT);
    lblTargetRewindLength.setBounds(17, 197, 88, 14);
    pnlJobs.add(lblTargetRewindLength);

    lblSlitWidth = new JLabel("Slit Width:");
    lblSlitWidth.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblSlitWidth.setToolTipText("Width of each output reel");
    lblSlitWidth.setEnabled(false);
    lblSlitWidth.setHorizontalAlignment(SwingConstants.RIGHT);
    lblSlitWidth.setBounds(46, 60, 59, 14);
    pnlJobs.add(lblSlitWidth);

    lblSlitCount = new JLabel("Reel Count:");
    lblSlitCount.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblSlitCount.setToolTipText("Number of reels per set at the output");
    lblSlitCount.setEnabled(false);
    lblSlitCount.setHorizontalAlignment(SwingConstants.RIGHT);
    lblSlitCount.setBounds(46, 33, 59, 14);
    pnlJobs.add(lblSlitCount);

    lblTrimtotal = new JLabel("Trim (total):");
    lblTrimtotal.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblTrimtotal.setToolTipText("The trim resulting from the given slit widths");
    lblTrimtotal.setEnabled(false);
    lblTrimtotal.setHorizontalAlignment(SwingConstants.RIGHT);
    lblTrimtotal.setBounds(20, 114, 85, 14);
    pnlJobs.add(lblTrimtotal);

    txtSlits = new JTextField();
    txtSlits.setToolTipText("Number of reels per set at the output");
    txtSlits.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtSlits.selectAll();
        }
    });
    txtSlits.getDocument().addDocumentListener(new JobInputChangeListener());
    txtSlits.setEnabled(false);

    txtSlits.setText("1");
    txtSlits.setBounds(109, 30, 86, 20);
    pnlJobs.add(txtSlits);
    txtSlits.setColumns(10);

    txtSlitWidth = new JTextField();
    txtSlitWidth.setToolTipText("Width of each output reel");
    txtSlitWidth.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtSlitWidth.selectAll();
        }
    });
    txtSlitWidth.getDocument().addDocumentListener(new JobInputChangeListener());
    txtSlitWidth.setEnabled(false);

    txtSlitWidth.setText("1350");
    txtSlitWidth.setBounds(109, 58, 86, 20);
    pnlJobs.add(txtSlitWidth);
    txtSlitWidth.setColumns(10);

    txtRewindAmount = new JTextField();
    txtRewindAmount.setToolTipText("Quantity of rewind output");
    txtRewindAmount.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtRewindAmount.selectAll();
        }
    });
    txtRewindAmount.getDocument().addDocumentListener(new JobInputChangeListener());
    txtRewindAmount.setEnabled(false);
    txtRewindAmount.setName("RewindLength");

    txtRewindAmount.setText("1000");
    txtRewindAmount.setBounds(109, 194, 86, 20);
    pnlJobs.add(txtRewindAmount);
    txtRewindAmount.setColumns(10);

    lblTrim = new JLabel("0 mm");
    lblTrim.setToolTipText("The trim resulting from the given slit widths");
    lblTrim.setEnabled(false);
    lblTrim.setBounds(111, 114, 65, 14);
    pnlJobs.add(lblTrim);

    cmbRewindCore = new JComboBox();
    cmbRewindCore.setToolTipText("Core diameter of rewind reels");
    ((JTextField) cmbRewindCore.getEditor().getEditorComponent()).getDocument()
            .addDocumentListener(new DocumentListener() {
                @Override
                public void removeUpdate(DocumentEvent arg0) {
                    UpdateJob();
                }

                @Override
                public void insertUpdate(DocumentEvent arg0) {
                    UpdateJob();
                }

                @Override
                public void changedUpdate(DocumentEvent arg0) {
                }
            });
    /*cmbRewindCore.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
    UpdateJob(jobIndex);
       }
    });*/
    cmbRewindCore.setEnabled(false);

    cmbRewindCore.setModel(new DefaultComboBoxModel(Consts.REWIND_CORE_MM));
    cmbRewindCore.setSelectedIndex(1);
    cmbRewindCore.setBounds(109, 137, 87, 20);
    pnlJobs.add(cmbRewindCore);
    cmbRewindCore.setEditable(true);

    lblRewindCoremm = new JLabel("Rewind Core:");
    lblRewindCoremm.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblRewindCoremm.setToolTipText("Core diameter of rewind reels");
    lblRewindCoremm.setEnabled(false);
    lblRewindCoremm.setBounds(40, 140, 65, 14);
    pnlJobs.add(lblRewindCoremm);

    lblPer_1 = new JLabel("per:");
    lblPer_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblPer_1.setToolTipText("Set whether rewind output is measured per reel or per set");
    lblPer_1.setEnabled(false);
    lblPer_1.setBounds(85, 248, 20, 14);
    pnlJobs.add(lblPer_1);

    cmbJobDomain = new JComboBox();
    cmbJobDomain.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            UpdateSetReel();
            //UpdateJob();
        }
    });
    cmbJobDomain.setEnabled(false);
    cmbJobDomain.setToolTipText("Set whether rewind output is measured per reel or per set");
    cmbJobDomain.setModel(new DefaultComboBoxModel(new String[] { "Reel", "Set" }));
    cmbJobDomain.setBounds(109, 246, 95, 20);
    pnlJobs.add(cmbJobDomain);

    lblmm3 = new JLabel("(mm)");
    lblmm3.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblmm3.setEnabled(false);
    lblmm3.setBounds(205, 61, 27, 14);
    pnlJobs.add(lblmm3);

    lblmm2 = new JLabel("(mm)");
    lblmm2.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblmm2.setEnabled(false);
    lblmm2.setBounds(206, 140, 27, 14);
    pnlJobs.add(lblmm2);

    pnlUnwinds = new JPanel();
    pnlUnwinds.setLayout(null);
    pnlUnwinds.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Unwind Settings",
            TitledBorder.LEADING, TitledBorder.TOP, null, null));
    pnlUnwinds.setBounds(280, 207, 227, 162);
    pnlJob.add(pnlUnwinds);

    lblUnwindLength = new JLabel("Unwind Size:");
    lblUnwindLength.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblUnwindLength.setToolTipText("Quantity of material per mother roll");
    lblUnwindLength.setEnabled(false);
    lblUnwindLength.setHorizontalAlignment(SwingConstants.RIGHT);
    lblUnwindLength.setBounds(21, 104, 66, 14);
    pnlUnwinds.add(lblUnwindLength);

    txtUnwindAmount = new JTextField();
    txtUnwindAmount.setToolTipText("Quantity of material per mother roll");
    txtUnwindAmount.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent arg0) {
            txtUnwindAmount.selectAll();
        }
    });
    txtUnwindAmount.getDocument().addDocumentListener(new JobInputChangeListener());
    txtUnwindAmount.setEnabled(false);
    txtUnwindAmount.setName("UnwindLength");
    txtUnwindAmount.setText("10000");
    txtUnwindAmount.setBounds(92, 100, 86, 20);
    pnlUnwinds.add(txtUnwindAmount);
    txtUnwindAmount.setColumns(10);

    lblWebWidthmm = new JLabel("Web Width:");
    lblWebWidthmm.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblWebWidthmm.setToolTipText("Width of mother rolls");
    lblWebWidthmm.setEnabled(false);
    lblWebWidthmm.setBounds(31, 29, 57, 14);
    pnlUnwinds.add(lblWebWidthmm);

    lblUnwindCoremm = new JLabel("Unwind Core:");
    lblUnwindCoremm.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblUnwindCoremm.setToolTipText("Core diameter of mother rolls");
    lblUnwindCoremm.setEnabled(false);
    lblUnwindCoremm.setBounds(22, 54, 66, 14);
    pnlUnwinds.add(lblUnwindCoremm);

    cmbUnwindCore = new JComboBox();
    cmbUnwindCore.setToolTipText("Core diameter of mother rolls");
    ((JTextField) cmbUnwindCore.getEditor().getEditorComponent()).getDocument()
            .addDocumentListener(new DocumentListener() {
                @Override
                public void removeUpdate(DocumentEvent arg0) {
                    UpdateJob();
                }

                @Override
                public void insertUpdate(DocumentEvent arg0) {
                    UpdateJob();
                }

                @Override
                public void changedUpdate(DocumentEvent arg0) {
                }
            });
    cmbUnwindCore.setEnabled(false);

    cmbUnwindCore.setModel(new DefaultComboBoxModel(new String[] { "76", "152", "254" }));
    cmbUnwindCore.setBounds(92, 51, 86, 20);
    pnlUnwinds.add(cmbUnwindCore);
    cmbUnwindCore.setEditable(true);

    lblmm0 = new JLabel("(mm)");
    lblmm0.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblmm0.setEnabled(false);
    lblmm0.setBounds(189, 29, 32, 14);
    pnlUnwinds.add(lblmm0);

    lblmm1 = new JLabel("(mm)");
    lblmm1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblmm1.setEnabled(false);
    lblmm1.setBounds(189, 53, 32, 14);
    pnlUnwinds.add(lblmm1);

    pnlEnviron = new JPanel();
    tabbedPane.addTab("Job Scheduling", null, pnlEnviron, "Edit the schedule of jobs to be analysed");
    tabbedPane.setEnabledAt(2, true);
    pnlEnviron.setLayout(null);

    JPanel pnlShifts = new JPanel();
    pnlShifts.setLayout(null);
    pnlShifts.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Shift Options",
            TitledBorder.LEADING, TitledBorder.TOP, null, null));
    pnlShifts.setBounds(20, 72, 287, 162);
    pnlEnviron.add(pnlShifts);

    JLabel lblShiftLength = new JLabel("Shift Length:");
    lblShiftLength.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblShiftLength.setToolTipText("Hours per working shift");
    lblShiftLength.setHorizontalAlignment(SwingConstants.RIGHT);
    lblShiftLength.setBounds(15, 28, 108, 14);
    pnlShifts.add(lblShiftLength);

    JLabel lblDayLength = new JLabel("Day Length:");
    lblDayLength.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblDayLength.setToolTipText("Working hours per day");
    lblDayLength.setHorizontalAlignment(SwingConstants.RIGHT);
    lblDayLength.setBounds(29, 78, 94, 14);
    pnlShifts.add(lblDayLength);

    JLabel lblShiftsDay = new JLabel("Shifts per Day:");
    lblShiftsDay.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblShiftsDay.setToolTipText("Shifts per day");
    lblShiftsDay.setHorizontalAlignment(SwingConstants.RIGHT);
    lblShiftsDay.setBounds(15, 53, 108, 14);
    pnlShifts.add(lblShiftsDay);

    JLabel lblDays = new JLabel("Days per Year:");
    lblDays.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblDays.setToolTipText("Days per year");
    lblDays.setHorizontalAlignment(SwingConstants.RIGHT);
    lblDays.setBounds(0, 106, 123, 14);
    pnlShifts.add(lblDays);

    txtShiftLength = new JTextField();
    txtShiftLength.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent arg0) {
            UpdateShifts();
        }

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            UpdateShifts();
        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {
        }
    });
    txtShiftLength.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent arg0) {
            txtShiftLength.selectAll();
        }
    });
    txtShiftLength.setToolTipText("Hours per working shift");

    txtShiftLength.setText("8");
    txtShiftLength.setBounds(133, 25, 86, 20);
    pnlShifts.add(txtShiftLength);
    txtShiftLength.setColumns(10);

    txtShiftCount = new JTextField();
    txtShiftCount.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent arg0) {
            UpdateShifts();
        }

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            UpdateShifts();
        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {
        }
    });
    txtShiftCount.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtShiftCount.selectAll();
        }
    });
    txtShiftCount.setToolTipText("Shifts per day");

    txtShiftCount.setText("3");
    txtShiftCount.setBounds(133, 50, 86, 20);
    pnlShifts.add(txtShiftCount);
    txtShiftCount.setColumns(10);

    txtDaysYear = new JTextField();
    txtDaysYear.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent arg0) {
            UpdateShifts();
        }

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            UpdateShifts();
        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {
        }
    });
    txtDaysYear.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtDaysYear.selectAll();
        }
    });
    txtDaysYear.setToolTipText("Days per year");

    txtDaysYear.setText("250");
    txtDaysYear.setBounds(133, 103, 86, 20);
    pnlShifts.add(txtDaysYear);
    txtDaysYear.setColumns(10);

    lblDayLength2 = new JLabel("24 hours");
    lblDayLength2.setToolTipText("Working hours per day");
    lblDayLength2.setBounds(133, 78, 86, 14);
    pnlShifts.add(lblDayLength2);

    lblHoursYear = new JLabel("Hours per Year:");
    lblHoursYear.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblHoursYear.setToolTipText("Working hours per year");
    lblHoursYear.setBounds(47, 131, 76, 14);
    pnlShifts.add(lblHoursYear);

    lblHoursYear2 = new JLabel("6000 hours");
    lblHoursYear2.setToolTipText("Working hours per year");
    lblHoursYear2.setBounds(133, 131, 86, 14);
    pnlShifts.add(lblHoursYear2);

    lblHrs = new JLabel("hrs");
    lblHrs.setBounds(229, 28, 46, 14);
    pnlShifts.add(lblHrs);

    btnAddAll = new JButton("Add All");
    btnAddAll.setToolTipText("Add all jobs to the schedule in order");
    btnAddAll.setFont(new Font("Tahoma", Font.BOLD, 11));
    btnAddAll.setEnabled(false);
    try {
        btnAddAll.setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/plus.png"))));
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnAddAll.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < jobModel.getSize(); ++i) {
                listJobsAvail.setSelectedIndex(i);
                btnAddJob.doClick();
            }
        }
    });
    btnAddAll.setBounds(327, 460, 110, 36);
    pnlEnviron.add(btnAddAll);

    btnAddJob = new JButton("");
    btnAddJob.setToolTipText("Add this job to the schedule");
    btnAddJob.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //AddToSchedule(listJobsAvail.getSelectedValue());

            ResetStatusLabel();

            int index = listSchedule.getSelectedIndex();
            //int source_index = listJobsAvail.getSelectedIndex();
            Job sel = (Job) listJobsAvail.getSelectedValue();
            JobItem j = environment.getSchedule().new JobItem(sel, 0, sel.getTotWeight(), sel.getTotLength());
            int size = scheduleModel.getSize();

            // no limit now there are scroll bars
            /* if(size >= Consts.JOB_LIST_LIMIT){    // Max list size
              ShowMessage("Maximum number of jobs scheduled. Please delete before attempting to add more.");
              return;
            }*/

            //If no selection or if item in last position is selected,
            //add the new one to end of list, and select new one.
            if (index == -1 || (index + 1 == size)) {

                scheduleModel.addElement(sel);
                listSchedule.setSelectedIndex(size);
                environment.getSchedule().addJob(j);

                //Otherwise insert the new one after the current selection,
                //and select new one.
            } else {
                scheduleModel.insertElementAt(sel, index + 1);
                listSchedule.setSelectedIndex(index + 1);
                environment.getSchedule().insertJob(j, index + 1);
            }

            btnClearSchedule.setEnabled(true);
        }
    });
    btnAddJob.setEnabled(false);
    try {
        btnAddJob.setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/add_job.png"))));
        btnAddJob.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/add_job_dis.png"))));
        btnAddJob.setRolloverEnabled(true);
        btnAddJob.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/add_job_over.png"))));
    } catch (NullPointerException e111) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnAddJob.setBounds(521, 178, 54, 54);
    pnlEnviron.add(btnAddJob);

    btnRemoveJob = new JButton("");
    btnRemoveJob.setToolTipText("Remove job from schedule");
    btnRemoveJob.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            ResetStatusLabel();

            // Uncomment this code to allow jobs to be saved back after removal from schedule
            /*if(listSchedule.getSelectedIndex() > -1){
               Job j = (Job) listSchedule.getSelectedValue();
               String name = j.getName().toLowerCase();
               if(!jobNames.contains(name) && !jobModel.contains(j)){
                  if(jobModel.size() < Consts.JOB_LIST_LIMIT){
             jobNames.add(name);
             jobFormReady = true;
             int index = -1;
             if(listJobsAvail.getSelectedIndex() > -1)
                index = listJobsAvail.getSelectedIndex();
             if(index < 0){
                jobModel.addElement(j);
                listJobsAvail.setSelectedIndex(jobModel.size()-1);
                listJobs.setSelectedIndex(jobModel.size()-1);
             }else{
                jobModel.insertElementAt(j, index+1);
                listJobsAvail.setSelectedIndex(index+1);
                listJobs.setSelectedIndex(index+1);
             }
                  }
               }
            }*/

            ListSelectionModel lsm = listSchedule.getSelectionModel();
            int firstSelected = lsm.getMinSelectionIndex();
            int lastSelected = lsm.getMaxSelectionIndex();
            scheduleModel.removeRange(firstSelected, lastSelected);
            environment.getSchedule().remove(firstSelected);

            int size = scheduleModel.size();

            if (size == 0) {
                //List is empty: disable delete, up, and down buttons.
                btnClearSchedule.setEnabled(false);
                btnUpSchedule.setEnabled(false);
                btnDownSchedule.setEnabled(false);
                listSchedule.clearSelection();
                btnRemoveJob.setEnabled(false);
                btnViewSchedule.setEnabled(false);
            } else {
                //Adjust the selection.
                if (firstSelected == scheduleModel.getSize()) {
                    //Removed item in last position.
                    firstSelected--;
                }
                listSchedule.setSelectedIndex(firstSelected);

                if (size == 21) { // No longer full list
                    ResetStatusLabel();
                }

            }
        }
    });
    btnRemoveJob.setEnabled(false);
    try {
        btnRemoveJob
                .setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/del_job.png"))));
        btnRemoveJob.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/del_job_dis.png"))));
        btnRemoveJob.setRolloverEnabled(true);
        btnRemoveJob.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/del_job_over.png"))));
    } catch (NullPointerException e111) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnRemoveJob.setBounds(520, 243, 54, 54);
    pnlEnviron.add(btnRemoveJob);

    lblJobSchedule_1 = new JLabel("Job Schedule");
    lblJobSchedule_1.setFont(new Font("Tahoma", Font.BOLD, 18));
    lblJobSchedule_1.setBounds(29, 18, 269, 22);
    pnlEnviron.add(lblJobSchedule_1);

    lblScheduleJobsTo = new JLabel("Schedule jobs to the right, then set shift options below");
    lblScheduleJobsTo.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblScheduleJobsTo.setBounds(29, 45, 279, 14);
    pnlEnviron.add(lblScheduleJobsTo);

    lblAvailableJobs_1 = new JLabel("Available Jobs");
    lblAvailableJobs_1.setFont(new Font("Tahoma", Font.BOLD, 12));
    lblAvailableJobs_1.setBounds(327, 19, 137, 14);
    pnlEnviron.add(lblAvailableJobs_1);

    lblJobSchedule_2 = new JLabel("Job Schedule");
    lblJobSchedule_2.setFont(new Font("Tahoma", Font.BOLD, 12));
    lblJobSchedule_2.setBounds(577, 19, 110, 14);
    pnlEnviron.add(lblJobSchedule_2);

    panel = new JPanel();
    panel.setLayout(null);
    panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Schedule Options",
            TitledBorder.LEADING, TitledBorder.TOP, null, null));
    panel.setBounds(20, 245, 287, 104);
    pnlEnviron.add(panel);

    btnViewSchedule = new JButton("View Schedule Diagram");
    btnViewSchedule.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnViewSchedule.setToolTipText("View chart of schedule timings");
    btnViewSchedule.setEnabled(false);
    btnViewSchedule.setBounds(33, 27, 170, 29);
    panel.add(btnViewSchedule);

    chckbxSimulateScheduleStart = new JCheckBox("Ignore machine config & knife positioning times");
    chckbxSimulateScheduleStart.setFont(new Font("Tahoma", Font.PLAIN, 11));
    chckbxSimulateScheduleStart.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (!initialising)
                environment.StartStopTimes = !chckbxSimulateScheduleStart.isSelected();
        }
    });
    chckbxSimulateScheduleStart.setToolTipText(
            "WARNING:  Use ONLY when you wish to model the output of a single job over a long time period \u2013 such that the initial set-up time has no material impact on the production volume");
    chckbxSimulateScheduleStart.setBounds(30, 62, 251, 18);
    panel.add(chckbxSimulateScheduleStart);

    lblhoverForInfo = new JLabel("(hover for info)");
    lblhoverForInfo.setToolTipText(
            "WARNING:  Use ONLY when you wish to model the output of a single job over a long time period \u2013 such that the initial set-up time has no material impact on the production volume");
    lblhoverForInfo.setForeground(Color.GRAY);
    lblhoverForInfo.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblhoverForInfo.setBounds(34, 80, 147, 14);
    panel.add(lblhoverForInfo);

    btnUpSchedule = new JButton("");
    btnUpSchedule.setToolTipText("Move job earlier in schedule");
    btnUpSchedule.addActionListener(new ScheduleUpListener());
    try {
        btnUpSchedule.setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/up.png"))));
        btnUpSchedule.setRolloverEnabled(true);
        btnUpSchedule.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/up_over.png"))));
        btnUpSchedule.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/up_dis.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnUpSchedule.setEnabled(false);
    btnUpSchedule.setBounds(700, 463, 30, 30);
    pnlEnviron.add(btnUpSchedule);

    btnDownSchedule = new JButton("");
    btnDownSchedule.setToolTipText("Move job later in schedule");
    btnDownSchedule.addActionListener(new ScheduleDownListener());
    try {
        btnDownSchedule
                .setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/down.png"))));
        btnDownSchedule.setRolloverEnabled(true);
        btnDownSchedule.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/down_over.png"))));
        btnDownSchedule.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/down_dis.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnDownSchedule.setEnabled(false);
    btnDownSchedule.setBounds(737, 463, 30, 30);
    pnlEnviron.add(btnDownSchedule);

    btnClearSchedule = new JButton("Clear");
    btnClearSchedule.setToolTipText("Clear all jobs from the schedule");
    btnClearSchedule.setFont(new Font("Tahoma", Font.BOLD, 11));
    btnClearSchedule.setEnabled(false);
    try {
        btnClearSchedule
                .setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/delete.png"))));
        btnClearSchedule.setRolloverEnabled(true);
        btnClearSchedule.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/delete_over.png"))));
        btnClearSchedule.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/delete_dis.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnClearSchedule.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            scheduleModel.removeAllElements();
            environment.getSchedule().empty();
        }
    });
    btnClearSchedule.setBounds(577, 460, 110, 36);
    pnlEnviron.add(btnClearSchedule);
    //listSchedule.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
    //listSchedule.setBounds(577, 44, 190, 405);
    //pnlEnviron.add(listSchedule);
    btnViewSchedule.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            ScheduleChart ch = new ScheduleChart(environment.getSchedule());
            ch.pack();
            try {
                ch.setIconImage(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/logo.png")));
            } catch (NullPointerException e11) {
                System.out.println("Image load error");
            } catch (IOException e) {
                e.printStackTrace();
            }
            ch.setLocationRelativeTo(frmTitanRoiCalculator);
            ch.setVisible(true);
        }
    });

    scrlSchedule = new JScrollPane();
    scrlSchedule.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    scrlSchedule.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, null, null, null));
    scrlSchedule.setBounds(577, 44, 190, 405);
    scrlSchedule.getVerticalScrollBar().setUnitIncrement(16);
    pnlEnviron.add(scrlSchedule);

    panel_8 = new JPanel();
    panel_8.setToolTipText("Select job to re-order or remove from schedule");
    panel_8.setBackground(Color.WHITE);
    panel_8.setBorder(null);
    scrlSchedule.setViewportView(panel_8);
    panel_8.setLayout(new BorderLayout(0, 0));

    listSchedule = new JList(scheduleModel);
    panel_8.add(listSchedule, BorderLayout.NORTH);
    listSchedule.setToolTipText("Select job to re-order or remove from schedule");
    listSchedule.addListSelectionListener(new ScheduleSelectionListener());
    listSchedule.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    listSchedule.setCellRenderer(new JobListRenderer());

    panel_5 = new JPanel();
    panel_5.setLayout(null);
    panel_5.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Notes",
            TitledBorder.LEADING, TitledBorder.TOP, null, null));
    panel_5.setBounds(20, 360, 287, 136);
    pnlEnviron.add(panel_5);

    lblToViewAnalysis = new JLabel("To view analysis for 1 job only, add just that job");
    lblToViewAnalysis.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblToViewAnalysis.setBounds(24, 24, 241, 14);
    panel_5.add(lblToViewAnalysis);

    lblToTheSchedule = new JLabel("to the schedule.");
    lblToTheSchedule.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblToTheSchedule.setBounds(24, 38, 241, 14);
    panel_5.add(lblToTheSchedule);

    lblToModelMaintenance = new JLabel("To model maintenance or other downtime, edit the");
    lblToModelMaintenance.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblToModelMaintenance.setBounds(24, 59, 253, 14);
    panel_5.add(lblToModelMaintenance);

    lblShiftOptionsAbove = new JLabel("shift options above. This will affect annual output,");
    lblShiftOptionsAbove.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblShiftOptionsAbove.setBounds(24, 73, 253, 14);
    panel_5.add(lblShiftOptionsAbove);

    lblButNotThe = new JLabel("but not the rates or efficiencies. For these, use the");
    lblButNotThe.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblButNotThe.setBounds(24, 87, 253, 14);
    panel_5.add(lblButNotThe);

    lbladvancedTabIn = new JLabel("'advanced' tab in the options menu box.");
    lbladvancedTabIn.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lbladvancedTabIn.setBounds(24, 101, 253, 14);
    panel_5.add(lbladvancedTabIn);

    scrollPane_2 = new JScrollPane();
    scrollPane_2.setBorder(null);
    scrollPane_2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
    scrollPane_2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane_2.setBounds(327, 44, 190, 405);
    pnlEnviron.add(scrollPane_2);

    panel_9 = new JPanel();
    panel_9.setToolTipText("Select job to be added");
    scrollPane_2.setViewportView(panel_9);
    panel_9.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, null, null, null));
    panel_9.setBackground(Color.WHITE);
    panel_9.setLayout(new BorderLayout(0, 0));

    listJobsAvail = new JList(jobModel);
    panel_9.add(listJobsAvail, BorderLayout.NORTH);
    listJobsAvail.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "add");
    listJobsAvail.getActionMap().put("add", new AddScheduleBtn());
    listJobsAvail.setToolTipText("Select job to be added");
    listJobsAvail.addListSelectionListener(new JobAvailSelectionListener());
    listJobsAvail.setCellRenderer(new JobListRenderer());
    listJobsAvail.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    listJobsAvail.setBorder(null);

    pnlCompare = new JPanel();
    tabbedPane.addTab("Productivity Comparison", null, pnlCompare, "Productivity comparison data & graphs");
    tabbedPane.setEnabledAt(3, true);
    pnlCompare.setLayout(null);

    pnlResults = new JPanel();
    pnlResults.setBorder(
            new TitledBorder(null, "Numerical Results", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    pnlResults.setBounds(20, 72, 479, 134);
    pnlCompare.add(pnlResults);
    pnlResults.setLayout(null);

    lblOutputLength = new JLabel("Output length over time period:");
    lblOutputLength.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblOutputLength.setEnabled(false);
    lblOutputLength.setToolTipText("Quantity produced");
    lblOutputLength.setBounds(220, 54, 152, 14);
    pnlResults.add(lblOutputLength);

    lblOutputWeight = new JLabel("Output weight over time period:");
    lblOutputWeight.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblOutputWeight.setEnabled(false);
    lblOutputWeight.setToolTipText("Quantity produced");
    lblOutputWeight.setBounds(220, 79, 162, 14);
    pnlResults.add(lblOutputWeight);

    cmbTimeRef = new JComboBox();
    cmbTimeRef.setEnabled(false);
    cmbTimeRef.setToolTipText("Select a time range to display results over");
    cmbTimeRef.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // Refresh analyses
            UpdateNumericalAnalysis();
        }
    });
    cmbTimeRef.setModel(
            new DefaultComboBoxModel(new String[] { "Schedule", "Year", "Hour", "Shift", "Day"/*, "Week"*/ }));
    cmbTimeRef.setBounds(247, 98, 125, 24);
    pnlResults.add(cmbTimeRef);

    lblPer = new JLabel("Per:");
    lblPer.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblPer.setEnabled(false);
    lblPer.setBounds(220, 103, 20, 14);
    pnlResults.add(lblPer);

    lblAverageMmin = new JLabel("Average rate:");
    lblAverageMmin.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblAverageMmin.setEnabled(false);
    lblAverageMmin.setToolTipText("Average quantity processed");
    lblAverageMmin.setBounds(20, 54, 95, 14);
    pnlResults.add(lblAverageMmin);

    lblNumericsWeight = new JLabel("0.0 tons");
    lblNumericsWeight.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblNumericsWeight.setEnabled(false);
    lblNumericsWeight.setToolTipText("Quantity produced");
    lblNumericsWeight.setBounds(380, 79, 89, 14);
    pnlResults.add(lblNumericsWeight);

    lblNumericsLength = new JLabel("0.0 metres");
    lblNumericsLength.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblNumericsLength.setEnabled(false);
    lblNumericsLength.setToolTipText("Quantity produced");
    lblNumericsLength.setBounds(380, 54, 89, 14);
    pnlResults.add(lblNumericsLength);

    lblNumericsRate = new JLabel("0.0 m/hr");
    lblNumericsRate.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblNumericsRate.setEnabled(false);
    lblNumericsRate.setToolTipText("Average quantity processed");
    lblNumericsRate.setBounds(128, 54, 82, 14);
    pnlResults.add(lblNumericsRate);

    lblEfficiency = new JLabel("Machine running:");
    lblEfficiency.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblEfficiency.setEnabled(false);
    lblEfficiency.setToolTipText("Proportion of total time for which the machine is running");
    lblEfficiency.setBounds(20, 104, 95, 14);
    pnlResults.add(lblEfficiency);

    cmbMachines = new JComboBox();
    cmbMachines.setMaximumRowCount(15);
    cmbMachines.setFont(new Font("Tahoma", Font.BOLD, 11));
    cmbMachines.setEnabled(false);
    cmbMachines.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            UpdateNumericalAnalysis();
        }
    });
    cmbMachines.setToolTipText("Select machine");
    cmbMachines.setBounds(128, 20, 244, 24);
    pnlResults.add(cmbMachines);

    lblMachine = new JLabel("Select Machine:");
    lblMachine.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblMachine.setEnabled(false);
    lblMachine.setToolTipText("Select machine");
    lblMachine.setBounds(20, 25, 77, 14);
    pnlResults.add(lblMachine);

    lblNumericsEff = new JLabel("0.0 %");
    lblNumericsEff.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblNumericsEff.setEnabled(false);
    lblNumericsEff.setToolTipText("Machine efficiency");
    lblNumericsEff.setBounds(128, 104, 65, 14);
    pnlResults.add(lblNumericsEff);

    lblscheduletimelbl = new JLabel("Time to run schedule:");
    lblscheduletimelbl.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblscheduletimelbl.setToolTipText("Time to run schedule");
    lblscheduletimelbl.setEnabled(false);
    lblscheduletimelbl.setBounds(20, 79, 103, 14);
    pnlResults.add(lblscheduletimelbl);

    lblscheduletime = new JLabel("0.0 hr");
    lblscheduletime.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblscheduletime.setToolTipText("Time to run schedule");
    lblscheduletime.setEnabled(false);
    lblscheduletime.setBounds(128, 79, 77, 14);
    pnlResults.add(lblscheduletime);

    pnlROI = new JPanel();
    tabbedPane.addTab("Return on Investment", (Icon) null, pnlROI,
            "Return on investment comparison and analysis");
    pnlROI.setLayout(null);
    tabbedPane.setEnabledAt(4, true);

    lblProductivityComparison = new JLabel("Productivity Comparison");
    lblProductivityComparison.setFont(new Font("Tahoma", Font.BOLD, 18));
    lblProductivityComparison.setBounds(29, 18, 269, 22);
    pnlCompare.add(lblProductivityComparison);

    lblSelectMultipleMachines = new JLabel(
            "Select multiple machines from the list on the right, then compare them below");
    lblSelectMultipleMachines.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblSelectMultipleMachines.setBounds(29, 45, 433, 14);
    pnlCompare.add(lblSelectMultipleMachines);

    label_2 = new JLabel("Machines");
    label_2.setFont(new Font("Tahoma", Font.BOLD, 12));
    label_2.setBounds(522, 19, 85, 14);
    pnlCompare.add(label_2);

    pnlProdGraph = new JPanel();
    pnlProdGraph.setBounds(20, 222, 479, 274);
    pnlCompare.add(pnlProdGraph);
    pnlProdGraph.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Graphical Results",
            TitledBorder.LEADING, TitledBorder.TOP, null, null));
    pnlProdGraph.setLayout(null);

    btnShowGraph = new JButton("Open Graph");
    btnShowGraph.setFont(new Font("Tahoma", Font.BOLD, 11));
    btnShowGraph.setToolTipText("Open graph in new window");
    btnShowGraph.setEnabled(false);
    btnShowGraph.setBounds(366, 51, 99, 39);
    pnlProdGraph.add(btnShowGraph);

    btnSaveToFile = new JButton("Save to File");
    btnSaveToFile.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnSaveToFile.setToolTipText("Save image to disk");
    btnSaveToFile.setEnabled(false);
    btnSaveToFile.addActionListener(SaveActionListener);
    btnSaveToFile.setBounds(366, 97, 99, 24);
    pnlProdGraph.add(btnSaveToFile);

    pnlPreview = new JPanel();
    pnlPreview.setBackground(Color.WHITE);
    pnlPreview.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, null, null, null));
    pnlPreview.setBounds(21, 51, 335, 205);
    pnlProdGraph.add(pnlPreview);
    pnlPreview.setLayout(null);
    pnlGraph = new ChartPanel(chart);
    pnlGraph.setBounds(2, 2, 331, 201);
    //pnlGraph.setPreferredSize(new java.awt.Dimension(243, 171));
    pnlPreview.add(pnlGraph);
    try {
        picLabel = new JLabel(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/no_preview.png"))));
    } catch (IOException e2) {
        e2.printStackTrace();
    }
    picLabel.setBounds(2, 2, 331, 201);
    pnlPreview.add(picLabel);
    pnlGraph.setVisible(false);

    lblPreview = new JLabel("Graph Preview");
    lblPreview.setForeground(Color.DARK_GRAY);
    lblPreview.setFont(new Font("Tahoma", Font.BOLD, 12));
    lblPreview.setEnabled(false);
    lblPreview.setBounds(21, 24, 99, 16);
    pnlProdGraph.add(lblPreview);

    lblType = new JLabel("Graph Type:");
    lblType.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblType.setEnabled(false);
    lblType.setToolTipText("Choose measurement type");
    lblType.setBounds(184, 26, 65, 14);
    pnlProdGraph.add(lblType);

    btnShowTimings = new JButton("Machine Runs");
    btnShowTimings.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnShowTimings.setToolTipText("Show timing diagram for a single machine run");
    btnShowTimings.setEnabled(false);
    btnShowTimings.addActionListener(new BtnShowTimingsActionListener());
    btnShowTimings.setBounds(366, 201, 99, 24);
    pnlProdGraph.add(btnShowTimings);

    btnDowntime = new JButton("Productivity");
    btnDowntime.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnDowntime.setToolTipText("View productivity breakdown charts for the selected machines");
    btnDowntime.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            ShowTimingBreakdown();
        }
    });
    btnDowntime.setEnabled(false);
    btnDowntime.setBounds(366, 232, 99, 24);
    pnlProdGraph.add(btnDowntime);

    lblbreakdown1 = new JLabel("Show timing");
    lblbreakdown1.setEnabled(false);
    lblbreakdown1.setBounds(370, 166, 99, 14);
    pnlProdGraph.add(lblbreakdown1);

    lblbreakdown2 = new JLabel("breakdown for:");
    lblbreakdown2.setEnabled(false);
    lblbreakdown2.setBounds(370, 182, 99, 14);
    pnlProdGraph.add(lblbreakdown2);

    panel_3 = new JPanel();
    panel_3.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    panel_3.setBounds(522, 459, 245, 37);
    pnlCompare.add(panel_3);
    panel_3.setLayout(null);

    btnNone = new JButton("None");
    btnNone.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnNone.setEnabled(false);
    btnNone.setBounds(172, 7, 57, 23);
    panel_3.add(btnNone);
    btnNone.setToolTipText("Clear machine selection");

    btnAll = new JButton("All");
    btnAll.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnAll.setEnabled(false);
    btnAll.setBounds(105, 7, 57, 23);
    panel_3.add(btnAll);
    btnAll.setToolTipText("Select all machines");

    lblSelect = new JLabel("Select:");
    lblSelect.setEnabled(false);
    lblSelect.setBounds(37, 11, 46, 14);
    panel_3.add(lblSelect);

    scrollPane_3 = new JScrollPane();
    scrollPane_3.setBorder(null);
    scrollPane_3.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
    scrollPane_3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane_3.setBounds(522, 44, 245, 405);
    pnlCompare.add(scrollPane_3);

    panel_10 = new JPanel();
    panel_10.setToolTipText(
            "Click a machine to select it. Select multiple machines to compare their performance under the chosen job schedule.");
    panel_10.setBackground(Color.WHITE);
    scrollPane_3.setViewportView(panel_10);
    panel_10.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, null, null, null));
    panel_10.setLayout(new BorderLayout(0, 0));

    listCompare = new JList(listModel);
    panel_10.add(listCompare, BorderLayout.NORTH);
    listCompare.setCellRenderer(new MachineListRenderer());
    listCompare.setToolTipText(
            "Click a machine to select it. Select multiple machines to compare their performance under the chosen job schedule.");
    listCompare.setBorder(null);
    listCompare.addListSelectionListener(new MultiSelectionListener());

    btnAll.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            int[] count = new int[listModel.size()];
            for (int i = 0; i < listModel.size(); ++i)
                count[i] = i;
            listCompare.setSelectedIndices(count);
        }
    });
    btnNone.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            listCompare.clearSelection();
        }
    });
    btnShowGraph.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            // TODO base on cmbGraphType: or not if just using chart

            /*PieChart test = new PieChart("title","this is a pie chart");
            test.pack();
            test.setVisible(true);
            test.setLocationRelativeTo(null);*/
            JFrame popGraph = new JFrame();

            JFreeChart chartBig = null;
            try {
                chartBig = (JFreeChart) chart.clone();
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
            //chartBig.setTitle("Productivity Comparison");

            ChartPanel cpanel = new ChartPanel(chartBig);
            cpanel.setPreferredSize(new java.awt.Dimension(500, 300));
            popGraph.setContentPane(cpanel);
            try {
                popGraph.setIconImage(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/logo.png")));
            } catch (NullPointerException e11) {
                System.out.println("Image load error");
            } catch (IOException e) {
                e.printStackTrace();
            }
            popGraph.setTitle("Productivity Graph");
            popGraph.setSize(450, 300);

            popGraph.pack();
            popGraph.setVisible(true);
            popGraph.setLocationRelativeTo(frmTitanRoiCalculator);
        }
    });

    cmbGraphType = new JComboBox();
    cmbGraphType.setMaximumRowCount(10);
    cmbGraphType.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbGraphType.setEnabled(false);
    cmbGraphType.setToolTipText("Choose measurement type");
    cmbGraphType.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // Refresh analyses
            UpdateGraph();
        }
    });
    cmbGraphType.setModel(new DefaultComboBoxModel(new String[] { "Schedule Time", "Length per Hour",
            "Weight per Hour", "Length per Year", "Weight per Year", "Run Percentage" }));
    cmbGraphType.setSelectedIndex(0);
    cmbGraphType.setBounds(251, 21, 105, 24);
    pnlProdGraph.add(cmbGraphType);

    lblReturnOnInvestment = new JLabel("Return on Investment");
    lblReturnOnInvestment.setFont(new Font("Tahoma", Font.BOLD, 18));
    lblReturnOnInvestment.setBounds(29, 18, 269, 22);
    pnlROI.add(lblReturnOnInvestment);

    lblSelectMultipleMachines_1 = new JLabel(
            "Select multiple machines from the list on the right, then compare them below");
    lblSelectMultipleMachines_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblSelectMultipleMachines_1.setBounds(29, 45, 433, 14);
    pnlROI.add(lblSelectMultipleMachines_1);

    lblCompareroiList = new JLabel("Machines");
    lblCompareroiList.setFont(new Font("Tahoma", Font.BOLD, 12));
    lblCompareroiList.setBounds(522, 19, 85, 14);
    pnlROI.add(lblCompareroiList);

    panel_4 = new JPanel();
    panel_4.setLayout(null);
    panel_4.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    panel_4.setBounds(522, 459, 245, 37);
    pnlROI.add(panel_4);

    btnROIselectnone = new JButton("None");
    btnROIselectnone.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnROIselectnone.setEnabled(false);
    btnROIselectnone.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            listCompareRoi.clearSelection();
        }
    });
    btnROIselectnone.setToolTipText("Clear machine selection");
    btnROIselectnone.setBounds(172, 7, 57, 23);
    panel_4.add(btnROIselectnone);

    btnROIselectall = new JButton("All");
    btnROIselectall.setFont(new Font("Tahoma", Font.PLAIN, 11));
    btnROIselectall.setEnabled(false);
    btnROIselectall.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            int[] count = new int[listModel.size()];
            for (int i = 0; i < listModel.size(); ++i)
                count[i] = i;
            listCompareRoi.setSelectedIndices(count);
        }
    });
    btnROIselectall.setToolTipText("Select all machines");
    btnROIselectall.setBounds(105, 7, 57, 23);
    panel_4.add(btnROIselectall);

    lblROIselect = new JLabel("Select:");
    lblROIselect.setEnabled(false);
    lblROIselect.setBounds(37, 11, 46, 14);
    panel_4.add(lblROIselect);

    tabsROI = new JTabbedPane(JTabbedPane.TOP);
    tabsROI.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent arg0) {
            try {
                ResetStatusLabel();
            } catch (NullPointerException e) {
                // Form is still initialising
                return;
            }

            int tab = tabsROI.getSelectedIndex();
            switch (tab) {
            case 0:
                UpdateROIProd();
                break;
            case 1:
                UpdateROIEnergy();
                break;
            case 2:
                UpdateROIMaint();
                break;
            case 3:
                UpdateROIWaste();
                break;
            }
        }
    });
    tabsROI.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
    tabsROI.setBounds(29, 72, 470, 424);
    pnlROI.add(tabsROI);

    pnlProdROI = new JPanel();
    pnlProdROI.setBackground(Color.WHITE);
    tabsROI.addTab("Productivity", null, pnlProdROI, "ROI based on productivity");
    pnlProdROI.setLayout(null);

    lblThisToolIlllustrates = new JLabel(
            "This tool illlustrates the long-term financial benfits of particular machines and options in");
    lblThisToolIlllustrates.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblThisToolIlllustrates.setForeground(Color.GRAY);
    lblThisToolIlllustrates.setBounds(10, 11, 439, 14);
    pnlProdROI.add(lblThisToolIlllustrates);

    lblInTermsOf = new JLabel("terms of productivity gains.");
    lblInTermsOf.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblInTermsOf.setForeground(Color.GRAY);
    lblInTermsOf.setBounds(10, 27, 317, 14);
    pnlProdROI.add(lblInTermsOf);

    pnlGraphProd = new JPanel();
    pnlGraphProd.setBackground(Color.WHITE);
    pnlGraphProd.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, null, null, null));
    pnlGraphProd.setBounds(10, 100, 439, 230);
    pnlProdROI.add(pnlGraphProd);
    pnlGraphProd.setLayout(null);

    pnlGraphProdInner = new ChartPanel(null);
    pnlGraphProdInner.setBounds(2, 2, 435, 226);
    //pnlGraphProd.add(pnlGraphProdInner);

    try {
        lblNoGraph = new JLabel(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/no_preview.png"))));
    } catch (IOException e2) {
        e2.printStackTrace();
    }
    lblNoGraph.setBounds(2, 2, 435, 226);
    pnlGraphProd.add(lblNoGraph);

    lblSellingPrice = new JLabel("Selling price:");
    lblSellingPrice.setEnabled(false);
    lblSellingPrice.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblSellingPrice.setBounds(10, 52, 60, 14);
    pnlProdROI.add(lblSellingPrice);

    txtsellingprice = new JTextField();
    txtsellingprice.setToolTipText("Average selling price of the material per unit weight");
    txtsellingprice.setEnabled(false);
    txtsellingprice.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent arg0) {
            txtsellingprice.selectAll();
        }
    });
    txtsellingprice.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void changedUpdate(DocumentEvent arg0) {
        }

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            UpdateROIValue();
        }

        @Override
        public void removeUpdate(DocumentEvent arg0) {
            UpdateROIValue();
        }

    });
    txtsellingprice.setFont(new Font("Tahoma", Font.PLAIN, 11));
    txtsellingprice.setBounds(90, 49, 65, 20);
    pnlProdROI.add(txtsellingprice);
    txtsellingprice.setColumns(10);

    lblPerTonne = new JLabel("per tonne");
    lblPerTonne.setEnabled(false);
    lblPerTonne.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblPerTonne.setBounds(160, 52, 70, 14);
    pnlProdROI.add(lblPerTonne);

    lblContribution = new JLabel("Contribution:");
    lblContribution.setEnabled(false);
    lblContribution.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblContribution.setBounds(10, 75, 70, 14);
    pnlProdROI.add(lblContribution);

    txtcontribution = new JTextField();
    txtcontribution.setToolTipText("Contribution percentage");
    txtcontribution.setEnabled(false);
    txtcontribution.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtcontribution.selectAll();
        }
    });
    txtcontribution.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void changedUpdate(DocumentEvent e) {
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            UpdateROIValue();
        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            UpdateROIValue();
        }
    });
    txtcontribution.setFont(new Font("Tahoma", Font.PLAIN, 11));
    txtcontribution.setBounds(90, 73, 65, 20);
    pnlProdROI.add(txtcontribution);
    txtcontribution.setColumns(10);

    lblpercent = new JLabel("%");
    lblpercent.setEnabled(false);
    lblpercent.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblpercent.setBounds(160, 76, 11, 14);
    pnlProdROI.add(lblpercent);

    lblValueAddedlbl = new JLabel("Value added:");
    lblValueAddedlbl.setEnabled(false);
    lblValueAddedlbl.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblValueAddedlbl.setBounds(279, 52, 70, 14);
    pnlProdROI.add(lblValueAddedlbl);

    lblvalueadded = new JLabel("\u00A30.00 / tonne");
    lblvalueadded.setToolTipText("Value added per unit weight");
    lblvalueadded.setEnabled(false);
    lblvalueadded.setFont(new Font("Tahoma", Font.BOLD, 12));
    lblvalueadded.setBounds(279, 71, 170, 20);
    pnlProdROI.add(lblvalueadded);

    cmbMarg1 = new JComboBox();
    cmbMarg1.setToolTipText("Old machine");
    cmbMarg1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            UpdateROIProd();
        }
    });
    cmbMarg1.setEnabled(false);
    cmbMarg1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbMarg1.setBounds(10, 359, 111, 20);
    pnlProdROI.add(cmbMarg1);

    cmbMarg2 = new JComboBox();
    cmbMarg2.setToolTipText("New machine");
    cmbMarg2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            UpdateROIProd();
        }
    });
    cmbMarg2.setEnabled(false);
    cmbMarg2.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbMarg2.setBounds(141, 359, 111, 20);
    pnlProdROI.add(cmbMarg2);

    lblMarginalImprovement = new JLabel("\u00A30.00 per annum");
    lblMarginalImprovement.setToolTipText("Marginal improvement");
    lblMarginalImprovement.setEnabled(false);
    lblMarginalImprovement.setFont(new Font("Tahoma", Font.BOLD, 13));
    lblMarginalImprovement.setBounds(279, 358, 170, 20);
    pnlProdROI.add(lblMarginalImprovement);

    lblSelectMachines = new JLabel("Select 2 machines to view the marginal improvement between them:");
    lblSelectMachines.setForeground(Color.GRAY);
    lblSelectMachines.setFont(new Font("Tahoma", Font.BOLD, 11));
    lblSelectMachines.setBounds(10, 338, 412, 14);
    pnlProdROI.add(lblSelectMachines);

    lblpound1 = new JLabel("\u00A3");
    lblpound1.setEnabled(false);
    lblpound1.setBounds(80, 52, 11, 14);
    pnlProdROI.add(lblpound1);

    lblTo = new JLabel("to");
    lblTo.setForeground(Color.GRAY);
    lblTo.setFont(new Font("Tahoma", Font.BOLD, 11));
    lblTo.setBounds(125, 362, 16, 14);
    pnlProdROI.add(lblTo);

    label = new JLabel("=");
    label.setForeground(Color.GRAY);
    label.setFont(new Font("Tahoma", Font.BOLD, 13));
    label.setBounds(259, 362, 11, 14);
    pnlProdROI.add(label);

    pnlEnergy = new JPanel();
    pnlEnergy.setBackground(Color.WHITE);
    tabsROI.addTab("Energy Efficiency", null, pnlEnergy, "ROI based on machine power usage");
    pnlEnergy.setLayout(null);

    lblThisToolHighlights = new JLabel(
            "This tool highlights power consumption differences between machines, and the resulting");
    lblThisToolHighlights.setForeground(Color.GRAY);
    lblThisToolHighlights.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblThisToolHighlights.setBounds(10, 11, 439, 14);
    pnlEnergy.add(lblThisToolHighlights);

    lblImpactOnFinancial = new JLabel("impact on financial returns.");
    lblImpactOnFinancial.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblImpactOnFinancial.setForeground(Color.GRAY);
    lblImpactOnFinancial.setBounds(10, 27, 439, 14);
    pnlEnergy.add(lblImpactOnFinancial);

    rdbtnAveragePower = new JRadioButton("Average power");
    rdbtnAveragePower.setToolTipText("Select \"average power\" input type");
    rdbtnAveragePower.setFont(new Font("Tahoma", Font.PLAIN, 11));
    rdbtnAveragePower.setEnabled(false);
    rdbtnAveragePower.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            ClearPowerTxts();
            txtaveragepower.setEnabled(true);
            txthourlyusage.setEnabled(false);
            txtannualusage.setEnabled(false);
            lblKw.setEnabled(true);
            lblKwh.setEnabled(false);
            lblKwh_1.setEnabled(false);
            txtaveragepower.requestFocusInWindow();
            UpdateEnergyData();
        }
    });
    rdbtnAveragePower.setSelected(true);
    rdbtnAveragePower.setBackground(Color.WHITE);
    rdbtnAveragePower.setBounds(349, 44, 109, 23);
    pnlEnergy.add(rdbtnAveragePower);

    rdbtnHourlyUsage = new JRadioButton("Hourly usage");
    rdbtnHourlyUsage.setToolTipText("Select \"hourly usage\" input type");
    rdbtnHourlyUsage.setFont(new Font("Tahoma", Font.PLAIN, 11));
    rdbtnHourlyUsage.setEnabled(false);
    rdbtnHourlyUsage.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            ClearPowerTxts();
            txtaveragepower.setEnabled(false);
            txthourlyusage.setEnabled(true);
            txtannualusage.setEnabled(false);
            lblKw.setEnabled(false);
            lblKwh.setEnabled(true);
            lblKwh_1.setEnabled(false);
            txthourlyusage.requestFocusInWindow();
            UpdateEnergyData();
        }
    });
    rdbtnHourlyUsage.setBackground(Color.WHITE);
    rdbtnHourlyUsage.setBounds(349, 70, 109, 23);
    pnlEnergy.add(rdbtnHourlyUsage);

    rdbtnAnnualUsage = new JRadioButton("Annual usage");
    rdbtnAnnualUsage.setToolTipText("Select \"annual usage\" input type");
    rdbtnAnnualUsage.setFont(new Font("Tahoma", Font.PLAIN, 11));
    rdbtnAnnualUsage.setEnabled(false);
    rdbtnAnnualUsage.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            ClearPowerTxts();
            txtaveragepower.setEnabled(false);
            txthourlyusage.setEnabled(false);
            txtannualusage.setEnabled(true);
            lblKw.setEnabled(false);
            lblKwh.setEnabled(false);
            lblKwh_1.setEnabled(true);
            txtannualusage.requestFocusInWindow();
            UpdateEnergyData();
        }
    });
    rdbtnAnnualUsage.setBackground(Color.WHITE);
    rdbtnAnnualUsage.setBounds(349, 97, 109, 23);
    pnlEnergy.add(rdbtnAnnualUsage);

    rdbtnsPower.add(rdbtnAveragePower);
    rdbtnsPower.add(rdbtnHourlyUsage);
    rdbtnsPower.add(rdbtnAnnualUsage);

    lblEnergyCostl = new JLabel("Energy cost:");
    lblEnergyCostl.setEnabled(false);
    lblEnergyCostl.setFont(new Font("Tahoma", Font.BOLD, 11));
    lblEnergyCostl.setBounds(10, 101, 72, 14);
    pnlEnergy.add(lblEnergyCostl);

    lblpound2 = new JLabel("\u00A3");
    lblpound2.setEnabled(false);
    lblpound2.setFont(new Font("Tahoma", Font.PLAIN, 12));
    lblpound2.setBounds(91, 100, 13, 14);
    pnlEnergy.add(lblpound2);

    txtenergycost = new JTextField();
    txtenergycost.setToolTipText("Raw energy cost, per kWh");
    txtenergycost.setEnabled(false);
    txtenergycost.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent arg0) {
            txtenergycost.selectAll();
        }
    });
    txtenergycost.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent arg0) {
            UpdateROIEnergy();
        }

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            UpdateROIEnergy();
        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {
        }
    });
    txtenergycost.setFont(new Font("Tahoma", Font.PLAIN, 12));
    txtenergycost.setBounds(102, 98, 74, 20);
    pnlEnergy.add(txtenergycost);
    txtenergycost.setColumns(10);

    lblPerKwh = new JLabel("per kWh");
    lblPerKwh.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblPerKwh.setEnabled(false);
    lblPerKwh.setBounds(179, 101, 46, 14);
    pnlEnergy.add(lblPerKwh);

    txtaveragepower = new JTextField();
    txtaveragepower.setToolTipText("Average power in kW");
    txtaveragepower.setEnabled(false);
    txtaveragepower.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent arg0) {
            UpdateEnergyData();
        }

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            UpdateEnergyData();
        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {
        }
    });
    txtaveragepower.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtaveragepower.selectAll();
        }
    });
    txtaveragepower.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent arg0) {
            if (txtLimitRunSpeed.contains(arg0.getPoint())) {
                if (!txtaveragepower.isEnabled()) {
                    rdbtnAveragePower.doClick();
                }
            }
        }
    });
    txtaveragepower.setBounds(233, 47, 86, 20);
    pnlEnergy.add(txtaveragepower);
    txtaveragepower.setColumns(10);

    txthourlyusage = new JTextField();
    txthourlyusage.setToolTipText("Average hourly energy usage");
    txthourlyusage.setEnabled(false);
    txthourlyusage.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent e) {
            UpdateEnergyData();
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            UpdateEnergyData();
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
        }
    });
    txthourlyusage.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txthourlyusage.selectAll();
        }
    });
    txthourlyusage.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent arg0) {
            if (txtLimitRunSpeed.contains(arg0.getPoint())) {
                if (!txthourlyusage.isEnabled())
                    rdbtnHourlyUsage.doClick();
            }
        }
    });
    txthourlyusage.setColumns(10);
    txthourlyusage.setBounds(233, 73, 86, 20);
    pnlEnergy.add(txthourlyusage);

    txtannualusage = new JTextField();
    txtannualusage.setToolTipText("Average annual energy usage");
    txtannualusage.setEnabled(false);
    txtannualusage.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent e) {
            UpdateEnergyData();
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            UpdateEnergyData();
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
        }
    });
    txtannualusage.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtannualusage.selectAll();
        }
    });
    txtannualusage.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent arg0) {
            if (txtLimitRunSpeed.contains(arg0.getPoint())) {
                if (!txtannualusage.isEnabled())
                    rdbtnAnnualUsage.doClick();
            }
        }
    });
    txtannualusage.setColumns(10);
    txtannualusage.setBounds(233, 99, 86, 20);
    pnlEnergy.add(txtannualusage);

    cmbMachineEnergy = new JComboBox();
    cmbMachineEnergy.setEnabled(false);
    cmbMachineEnergy.setToolTipText("Select machine to edit");
    cmbMachineEnergy.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            UpdateEnergyView();
        }
    });
    cmbMachineEnergy.setBounds(69, 46, 152, 23);
    pnlEnergy.add(cmbMachineEnergy);

    lblMachine_1 = new JLabel("Machine:");
    lblMachine_1.setEnabled(false);
    lblMachine_1.setFont(new Font("Tahoma", Font.BOLD, 11));
    lblMachine_1.setBounds(10, 50, 59, 14);
    pnlEnergy.add(lblMachine_1);

    lblKw = new JLabel("kW");
    lblKw.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblKw.setEnabled(false);
    lblKw.setBounds(323, 50, 15, 14);
    pnlEnergy.add(lblKw);

    lblKwh = new JLabel("kWh");
    lblKwh.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblKwh.setEnabled(false);
    lblKwh.setBounds(323, 76, 26, 14);
    pnlEnergy.add(lblKwh);

    lblKwh_1 = new JLabel("MWh");
    lblKwh_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblKwh_1.setEnabled(false);
    lblKwh_1.setBounds(323, 102, 26, 14);
    pnlEnergy.add(lblKwh_1);

    pnlGraphEnergy = new JPanel();
    pnlGraphEnergy.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, null, null, null));
    pnlGraphEnergy.setBackground(Color.WHITE);
    pnlGraphEnergy.setBounds(10, 126, 439, 226);
    pnlEnergy.add(pnlGraphEnergy);
    pnlGraphEnergy.setLayout(null);
    try {
        lblNoGraph2 = new JLabel(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/no_preview.png"))));
    } catch (IOException e2) {
        e2.printStackTrace();
    }
    lblNoGraph2.setBounds(2, 2, 435, 222);
    pnlGraphEnergy.add(lblNoGraph2);

    lblPleaseSetPower = new JLabel("Please set power usage for each machine");
    lblPleaseSetPower.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblPleaseSetPower.setEnabled(false);
    lblPleaseSetPower.setForeground(Color.GRAY);
    lblPleaseSetPower.setBounds(10, 74, 215, 14);
    pnlEnergy.add(lblPleaseSetPower);

    lblMarginalEnergy = new JLabel("\u00A30.00 per annum");
    lblMarginalEnergy.setToolTipText("Marginal improvement");
    lblMarginalEnergy.setFont(new Font("Tahoma", Font.BOLD, 13));
    lblMarginalEnergy.setEnabled(false);
    lblMarginalEnergy.setBounds(279, 358, 170, 20);
    pnlEnergy.add(lblMarginalEnergy);

    label_4 = new JLabel("=");
    label_4.setForeground(Color.GRAY);
    label_4.setFont(new Font("Tahoma", Font.BOLD, 13));
    label_4.setBounds(259, 362, 11, 14);
    pnlEnergy.add(label_4);

    cmbMargEnergy2 = new JComboBox();
    cmbMargEnergy2.setToolTipText("New machine");
    cmbMargEnergy2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            UpdateROIEnergy();
        }
    });
    cmbMargEnergy2.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbMargEnergy2.setEnabled(false);
    cmbMargEnergy2.setBounds(141, 359, 111, 20);
    pnlEnergy.add(cmbMargEnergy2);

    label_5 = new JLabel("to");
    label_5.setForeground(Color.GRAY);
    label_5.setFont(new Font("Tahoma", Font.BOLD, 11));
    label_5.setBounds(125, 362, 16, 14);
    pnlEnergy.add(label_5);

    cmbMargEnergy1 = new JComboBox();
    cmbMargEnergy1.setToolTipText("Old machine");
    cmbMargEnergy1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            UpdateROIEnergy();
        }
    });
    cmbMargEnergy1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbMargEnergy1.setEnabled(false);
    cmbMargEnergy1.setBounds(10, 359, 111, 20);
    pnlEnergy.add(cmbMargEnergy1);

    pnlMaint = new JPanel();
    pnlMaint.setBackground(Color.WHITE);
    tabsROI.addTab("Maintenance", null, pnlMaint, "ROI based on maintenance costs");
    tabsROI.setMnemonicAt(2, 65);
    pnlMaint.setLayout(null);

    lblThisToolDemonstrates_1 = new JLabel(
            "This tool demonstrates the maintenance reduction benefits of machines.");
    lblThisToolDemonstrates_1.setBounds(10, 11, 421, 14);
    lblThisToolDemonstrates_1.setForeground(Color.GRAY);
    lblThisToolDemonstrates_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    pnlMaint.add(lblThisToolDemonstrates_1);

    lblMaintenanceHoursPer = new JLabel("Annual downtime:");
    lblMaintenanceHoursPer.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblMaintenanceHoursPer.setEnabled(false);
    lblMaintenanceHoursPer.setBounds(10, 64, 86, 14);
    pnlMaint.add(lblMaintenanceHoursPer);

    lblRepairCostsPer = new JLabel("Labour costs per hour:");
    lblRepairCostsPer.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblRepairCostsPer.setEnabled(false);
    lblRepairCostsPer.setBounds(255, 36, 111, 14);
    pnlMaint.add(lblRepairCostsPer);

    lblPartsCostsPer = new JLabel("Parts costs per year:");
    lblPartsCostsPer.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblPartsCostsPer.setEnabled(false);
    lblPartsCostsPer.setBounds(255, 64, 101, 14);
    pnlMaint.add(lblPartsCostsPer);

    cmbMachinesmaintenance = new JComboBox();
    cmbMachinesmaintenance.setEnabled(false);
    cmbMachinesmaintenance.setToolTipText("Please set maintenance costs for each machine");
    cmbMachinesmaintenance.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            ViewMaintCosts();
        }
    });
    cmbMachinesmaintenance.setBounds(79, 30, 152, 23);
    pnlMaint.add(cmbMachinesmaintenance);

    txtmaintenancehours = new JTextField();
    txtmaintenancehours.setToolTipText("Hours per year for which machine is not running due to maintenance");
    txtmaintenancehours.setEnabled(false);
    txtmaintenancehours.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtmaintenancehours.selectAll();
        }
    });
    txtmaintenancehours.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent e) {
            UpdateMaintCosts();
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            UpdateMaintCosts();
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
        }
    });
    txtmaintenancehours.setBounds(106, 61, 67, 20);
    pnlMaint.add(txtmaintenancehours);
    txtmaintenancehours.setColumns(10);

    txtmaintenanceperhour = new JTextField();
    txtmaintenanceperhour.setToolTipText("Hourly labour costs for maintenance");
    txtmaintenanceperhour.setEnabled(false);
    txtmaintenanceperhour.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtmaintenanceperhour.selectAll();
        }
    });
    txtmaintenanceperhour.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent e) {
            UpdateMaintCosts();
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            UpdateMaintCosts();
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
        }
    });
    txtmaintenanceperhour.setColumns(10);
    txtmaintenanceperhour.setBounds(382, 33, 67, 20);
    pnlMaint.add(txtmaintenanceperhour);

    txtmaintenanceparts = new JTextField();
    txtmaintenanceparts.setToolTipText("Annual cost of maintenance parts for this machine");
    txtmaintenanceparts.setEnabled(false);
    txtmaintenanceparts.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtmaintenanceparts.selectAll();
        }
    });
    txtmaintenanceparts.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent e) {
            UpdateMaintCosts();
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            UpdateMaintCosts();
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
        }
    });
    txtmaintenanceparts.setColumns(10);
    txtmaintenanceparts.setBounds(382, 61, 67, 20);
    pnlMaint.add(txtmaintenanceparts);

    lbltotalmaintcost = new JLabel("\u00A30.00 / year");
    lbltotalmaintcost.setToolTipText("Total annual spend on maintenance for this machine (labour + parts)");
    lbltotalmaintcost.setForeground(Color.GRAY);
    lbltotalmaintcost.setEnabled(false);
    lbltotalmaintcost.setHorizontalAlignment(SwingConstants.LEFT);
    lbltotalmaintcost.setFont(new Font("Tahoma", Font.BOLD, 11));
    lbltotalmaintcost.setBounds(344, 87, 105, 14);
    pnlMaint.add(lbltotalmaintcost);

    lblpound10 = new JLabel("\u00A3");
    lblpound10.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblpound10.setEnabled(false);
    lblpound10.setBounds(373, 36, 11, 14);
    pnlMaint.add(lblpound10);

    lblpound11 = new JLabel("\u00A3");
    lblpound11.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblpound11.setEnabled(false);
    lblpound11.setBounds(373, 64, 11, 14);
    pnlMaint.add(lblpound11);

    pnlGraphMaint = new JPanel();
    pnlGraphMaint.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, null, null, null));
    pnlGraphMaint.setBackground(Color.WHITE);
    pnlGraphMaint.setBounds(10, 110, 439, 242);
    pnlMaint.add(pnlGraphMaint);
    pnlGraphMaint.setLayout(null);
    try {
        lblNoGraph3 = new JLabel(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/no_preview.png"))));
    } catch (IOException e2) {
        e2.printStackTrace();
    }
    lblNoGraph3.setBounds(2, 2, 435, 238);
    pnlGraphMaint.add(lblNoGraph3);

    cmbMargMaint1 = new JComboBox();
    cmbMargMaint1.setToolTipText("Old machine");
    cmbMargMaint1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            UpdateROIMaint();
        }
    });
    cmbMargMaint1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbMargMaint1.setEnabled(false);
    cmbMargMaint1.setBounds(10, 359, 111, 20);
    pnlMaint.add(cmbMargMaint1);

    label_8 = new JLabel("to");
    label_8.setForeground(Color.GRAY);
    label_8.setFont(new Font("Tahoma", Font.BOLD, 11));
    label_8.setBounds(125, 362, 16, 14);
    pnlMaint.add(label_8);

    cmbMargMaint2 = new JComboBox();
    cmbMargMaint2.setToolTipText("New machine");
    cmbMargMaint2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            UpdateROIMaint();
        }
    });
    cmbMargMaint2.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbMargMaint2.setEnabled(false);
    cmbMargMaint2.setBounds(141, 359, 111, 20);
    pnlMaint.add(cmbMargMaint2);

    label_9 = new JLabel("=");
    label_9.setForeground(Color.GRAY);
    label_9.setFont(new Font("Tahoma", Font.BOLD, 13));
    label_9.setBounds(259, 362, 11, 14);
    pnlMaint.add(label_9);

    lblMarginalMaint = new JLabel("\u00A30.00 per annum");
    lblMarginalMaint.setToolTipText("Marginal improvement");
    lblMarginalMaint.setFont(new Font("Tahoma", Font.BOLD, 13));
    lblMarginalMaint.setEnabled(false);
    lblMarginalMaint.setBounds(279, 358, 170, 20);
    pnlMaint.add(lblMarginalMaint);

    lblProdLoss = new JLabel("\u00A30.00 / year");
    lblProdLoss.setToolTipText("Loss in production value due to downtime");
    lblProdLoss.setForeground(Color.GRAY);
    lblProdLoss.setEnabled(false);
    lblProdLoss.setHorizontalAlignment(SwingConstants.LEFT);
    lblProdLoss.setFont(new Font("Tahoma", Font.BOLD, 11));
    lblProdLoss.setBounds(106, 87, 125, 14);
    pnlMaint.add(lblProdLoss);

    lblHrs_1 = new JLabel("hrs");
    lblHrs_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblHrs_1.setEnabled(false);
    lblHrs_1.setBounds(180, 64, 16, 14);
    pnlMaint.add(lblHrs_1);

    label_10 = new JLabel("Machine:");
    label_10.setEnabled(false);
    label_10.setFont(new Font("Tahoma", Font.BOLD, 11));
    label_10.setBounds(10, 34, 59, 14);
    pnlMaint.add(label_10);

    label_11 = new JLabel("=");
    label_11.setEnabled(false);
    label_11.setForeground(Color.GRAY);
    label_11.setFont(new Font("Tahoma", Font.BOLD, 13));
    label_11.setBounds(88, 87, 11, 14);
    pnlMaint.add(label_11);

    label_12 = new JLabel("=");
    label_12.setEnabled(false);
    label_12.setForeground(Color.GRAY);
    label_12.setFont(new Font("Tahoma", Font.BOLD, 13));
    label_12.setBounds(323, 87, 11, 14);
    pnlMaint.add(label_12);

    lblAnnualTotal = new JLabel("Annual total");
    lblAnnualTotal.setEnabled(false);
    lblAnnualTotal.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblAnnualTotal.setBounds(255, 87, 67, 14);
    pnlMaint.add(lblAnnualTotal);

    lblProductionLoss = new JLabel("Production loss");
    lblProductionLoss.setEnabled(false);
    lblProductionLoss.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblProductionLoss.setBounds(10, 87, 77, 14);
    pnlMaint.add(lblProductionLoss);

    pnlWaste = new JPanel();
    pnlWaste.setBackground(Color.WHITE);
    tabsROI.addTab("Waste Reduction", null, pnlWaste, "ROI based on waste reduction");
    pnlWaste.setLayout(null);

    lblThisToolDemonstrates = new JLabel(
            "This tool demonstrates the waste reduction capabilities of particular machines.");
    lblThisToolDemonstrates.setForeground(Color.GRAY);
    lblThisToolDemonstrates.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblThisToolDemonstrates.setBounds(10, 11, 439, 14);
    pnlWaste.add(lblThisToolDemonstrates);

    lblWasteSavedPer_1 = new JLabel("Waste saved per splice due to flag detection camera:");
    lblWasteSavedPer_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblWasteSavedPer_1.setEnabled(false);
    lblWasteSavedPer_1.setBounds(10, 39, 256, 14);
    pnlWaste.add(lblWasteSavedPer_1);

    txtwastesavedflags = new JTextField();
    txtwastesavedflags.setToolTipText("Saving per splice");
    txtwastesavedflags.setEnabled(false);
    txtwastesavedflags.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtwastesavedflags.selectAll();
        }
    });
    txtwastesavedflags.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent e) {
            UpdateROIWaste();
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            UpdateROIWaste();
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
        }
    });
    txtwastesavedflags.setBounds(286, 36, 86, 20);
    pnlWaste.add(txtwastesavedflags);
    txtwastesavedflags.setColumns(10);

    lblM_1 = new JLabel("m");
    lblM_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblM_1.setEnabled(false);
    lblM_1.setBounds(378, 39, 46, 14);
    pnlWaste.add(lblM_1);

    lblWasteSavedPer_2 = new JLabel("Waste saved per mother roll due to alignment guide:");
    lblWasteSavedPer_2.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblWasteSavedPer_2.setEnabled(false);
    lblWasteSavedPer_2.setBounds(10, 64, 256, 14);
    pnlWaste.add(lblWasteSavedPer_2);

    txtwastesavedguide = new JTextField();
    txtwastesavedguide.setToolTipText("Saving per mother roll");
    txtwastesavedguide.setEnabled(false);
    txtwastesavedguide.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent e) {
            UpdateROIWaste();
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            UpdateROIWaste();
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
        }
    });
    txtwastesavedguide.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtwastesavedguide.selectAll();
        }
    });
    txtwastesavedguide.setBounds(286, 61, 86, 20);
    pnlWaste.add(txtwastesavedguide);
    txtwastesavedguide.setColumns(10);

    lblM_2 = new JLabel("m");
    lblM_2.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblM_2.setEnabled(false);
    lblM_2.setBounds(378, 64, 46, 14);
    pnlWaste.add(lblM_2);

    pnlGraphWaste = new JPanel();
    pnlGraphWaste.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, null, null, null));
    pnlGraphWaste.setBackground(Color.WHITE);
    pnlGraphWaste.setBounds(10, 90, 439, 262);
    pnlWaste.add(pnlGraphWaste);
    pnlGraphWaste.setLayout(null);
    try {
        lblNoGraph4 = new JLabel(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/no_preview.png"))));
    } catch (IOException e2) {
        e2.printStackTrace();
    }
    lblNoGraph4.setBounds(2, 2, 435, 258);
    pnlGraphWaste.add(lblNoGraph4);

    cmbMargWaste1 = new JComboBox();
    cmbMargWaste1.setToolTipText("Old machine");
    cmbMargWaste1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            UpdateROIWaste();
        }
    });
    cmbMargWaste1.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbMargWaste1.setEnabled(false);
    cmbMargWaste1.setBounds(10, 359, 111, 20);
    pnlWaste.add(cmbMargWaste1);

    label_1 = new JLabel("to");
    label_1.setForeground(Color.GRAY);
    label_1.setFont(new Font("Tahoma", Font.BOLD, 11));
    label_1.setBounds(125, 362, 16, 14);
    pnlWaste.add(label_1);

    cmbMargWaste2 = new JComboBox();
    cmbMargWaste2.setToolTipText("New machine");
    cmbMargWaste2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            UpdateROIWaste();
        }
    });
    cmbMargWaste2.setFont(new Font("Tahoma", Font.PLAIN, 11));
    cmbMargWaste2.setEnabled(false);
    cmbMargWaste2.setBounds(141, 359, 111, 20);
    pnlWaste.add(cmbMargWaste2);

    label_6 = new JLabel("=");
    label_6.setForeground(Color.GRAY);
    label_6.setFont(new Font("Tahoma", Font.BOLD, 13));
    label_6.setBounds(259, 362, 11, 14);
    pnlWaste.add(label_6);

    lblMarginalWaste = new JLabel("0.00m per annum");
    lblMarginalWaste.setToolTipText("Marginal improvement");
    lblMarginalWaste.setFont(new Font("Tahoma", Font.BOLD, 13));
    lblMarginalWaste.setEnabled(false);
    lblMarginalWaste.setBounds(279, 355, 170, 16);
    pnlWaste.add(lblMarginalWaste);

    lblMarginalWasteValue = new JLabel("(\u00A30.00 per annum)");
    lblMarginalWasteValue.setToolTipText("Marginal improvement value");
    lblMarginalWasteValue.setForeground(Color.GRAY);
    lblMarginalWasteValue.setFont(new Font("Tahoma", Font.BOLD, 11));
    lblMarginalWasteValue.setBounds(279, 370, 170, 16);
    pnlWaste.add(lblMarginalWasteValue);

    machNames = new HashSet<String>();
    jobNames = new HashSet<String>();

    lblStatus = new JLabel(" Ready.");
    lblStatus.setFont(new Font("Tahoma", Font.PLAIN, 12));
    frmTitanRoiCalculator.getContentPane().add(lblStatus, BorderLayout.SOUTH);

    lblmmin = new JLabel("(m/min)");
    lblmmin.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblmmin.setEnabled(false);
    lblmmin.setBounds(206, 168, 44, 14);
    pnlJobs.add(lblmmin);

    objfilter = new OBJfilter(1);

    // labels for unit conversion
    labs = new JLabel[7];
    labs[0] = lblmm0;
    labs[1] = lblmm1;
    labs[2] = lblmm2;
    labs[3] = lblgm3;
    labs[4] = lblmm3;
    labs[5] = lblmicro0;

    lblGsm = new JLabel("(gsm)");
    lblGsm.setToolTipText("Switch the input type for density between gsm and g/cc");
    lblGsm.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblGsm.setEnabled(false);
    lblGsm.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent arg0) {
            if (lblGsm.isEnabled() && lblGsm.contains(arg0.getPoint())) {
                jobFormReady = false;
                try {
                    //double oldval = Double.parseDouble(txtDensity.getText());
                    //double thickness = Double.parseDouble(txtThickness.getText());
                    double oldval = ((Job) listJobs.getSelectedValue()).getDensity();
                    double thickness = ((Job) listJobs.getSelectedValue()).getThickness();
                    if (lblGsm.getText().equals("(gsm)")) {
                        lblGsm.setText("(g/cc)");
                        label_3.setVisible(false);
                        lblgm3.setText("(gsm)");
                        txtDensity.setText(Double.toString(roundTwoDecimals(oldval * thickness)));
                        ((Job) listJobs.getSelectedValue()).gsm = true;
                    } else {
                        lblGsm.setText("(gsm)");
                        label_3.setVisible(true);
                        lblgm3.setText("(g/cm  )");
                        txtDensity.setText(Double.toString(roundTwoDecimals(oldval)));
                        ((Job) listJobs.getSelectedValue()).gsm = false;
                    }
                } catch (Exception e) {
                    lblGsm.setText("(gsm)");
                    label_3.setVisible(true);
                    lblgm3.setText("(g/cm  )");
                    txtDensity.setText("0.92");
                }
                jobFormReady = true;

            }
        }

        @Override
        public void mouseEntered(MouseEvent arg0) {
            lblGsm.setForeground(new Color(0, 0, 128));
        }

        @Override
        public void mouseExited(MouseEvent e) {
            lblGsm.setForeground(Color.black);
        }
    });
    lblGsm.setForeground(new Color(0, 0, 0));
    lblGsm.setCursor(new Cursor(Cursor.HAND_CURSOR));
    lblGsm.setBounds(177, 102, 46, 14);
    pnlMaterials.add(lblGsm);

    lblOr = new JLabel("or:");
    lblOr.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblOr.setEnabled(false);
    lblOr.setBounds(155, 102, 14, 14);
    pnlMaterials.add(lblOr);
    labs[6] = lblmmin;

    cmbUnwindType = new JComboBox();
    cmbUnwindType.setToolTipText("Type of measure to use for the unwind quantity above");
    cmbUnwindType.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            UpdateUnwindAmount();
        }
    });
    cmbUnwindType.setEnabled(false);
    cmbUnwindType
            .setModel(new DefaultComboBoxModel(new String[] { "Length (m)", "Weight (kg)", "Diameter (mm)" }));
    cmbUnwindType.setBounds(92, 124, 95, 20);
    pnlUnwinds.add(cmbUnwindType);

    txtWebWidth = new JTextField();
    txtWebWidth.setToolTipText("Width of mother rolls");
    txtWebWidth.setText("1350");
    txtWebWidth.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent arg0) {
            txtWebWidth.selectAll();
        }
    });
    txtWebWidth.setEnabled(false);
    txtWebWidth.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent arg0) {
            UpdateJob();
        }

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            UpdateJob();
        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {
        }
    });
    txtWebWidth.setBounds(92, 26, 86, 20);
    pnlUnwinds.add(txtWebWidth);
    txtWebWidth.setColumns(10);

    lblAverageFlags = new JLabel("Average Flags:");
    lblAverageFlags.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblAverageFlags.setToolTipText("The average number of flags in each mother roll");
    lblAverageFlags.setEnabled(false);
    lblAverageFlags.setBounds(14, 79, 75, 14);
    pnlUnwinds.add(lblAverageFlags);

    txtFlagCount = new JTextField();
    txtFlagCount.setToolTipText("The average number of flags in each mother roll");
    txtFlagCount.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent arg0) {
            txtFlagCount.selectAll();
        }
    });
    txtFlagCount.getDocument().addDocumentListener(new JobInputChangeListener());
    txtFlagCount.setEnabled(false);
    txtFlagCount.setText("1");
    txtFlagCount.setBounds(92, 76, 43, 20);
    pnlUnwinds.add(txtFlagCount);
    txtFlagCount.setColumns(10);

    lblPerRoll = new JLabel("per roll");
    lblPerRoll.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblPerRoll.setEnabled(false);
    lblPerRoll.setBounds(140, 79, 46, 14);
    pnlUnwinds.add(lblPerRoll);

    txtLimitRunSpeed = new JTextField();
    txtLimitRunSpeed.setToolTipText(
            "Override for top machine speed (may be required for particular materials or environments)");
    txtLimitRunSpeed.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent arg0) {
            if (txtLimitRunSpeed.contains(arg0.getPoint())) {
                txtLimitRunSpeed.setEnabled(true);
                chckbxLimitRunSpeed.setSelected(true);
                txtLimitRunSpeed.requestFocusInWindow();
                txtLimitRunSpeed.selectAll();
                UpdateJob();
            }
        }
    });
    txtLimitRunSpeed.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            if (txtLimitRunSpeed.isEnabled()) {
                txtLimitRunSpeed.selectAll();
                chckbxLimitRunSpeed.setSelected(true);
            }
        }
    });
    txtLimitRunSpeed.getDocument().addDocumentListener(new JobInputChangeListener());
    txtLimitRunSpeed.setEnabled(false);

    txtLimitRunSpeed.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            chckbxLimitRunSpeed.setSelected(true);
        }
    });
    txtLimitRunSpeed.setText("800");
    txtLimitRunSpeed.setColumns(10);
    txtLimitRunSpeed.setBounds(130, 165, 65, 20);
    pnlJobs.add(txtLimitRunSpeed);

    cmbRewindType = new JComboBox();
    cmbRewindType.setToolTipText("Type of measure to use for rewind output above");
    cmbRewindType.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            UpdateRewindAmount();
            //UpdateJob();
        }
    });
    cmbRewindType.setEnabled(false);
    cmbRewindType
            .setModel(new DefaultComboBoxModel(new String[] { "Length (m)", "Weight (kg)", "Diameter (mm)" }));
    cmbRewindType.setBounds(109, 218, 95, 20);
    pnlJobs.add(cmbRewindType);

    chckbxLimitRunSpeed = new JCheckBox("");
    chckbxLimitRunSpeed.setToolTipText(
            "Override for top machine speed (may be required for particular materials or environments)");
    chckbxLimitRunSpeed.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (chckbxLimitRunSpeed.isSelected()) {
                txtLimitRunSpeed.setEnabled(true);
                txtLimitRunSpeed.requestFocusInWindow();
                txtLimitRunSpeed.selectAll();
            } else {
                txtLimitRunSpeed.setEnabled(false);
            }

            UpdateJob();
        }
    });
    chckbxLimitRunSpeed.setEnabled(false);
    chckbxLimitRunSpeed.setBounds(105, 164, 20, 20);
    pnlJobs.add(chckbxLimitRunSpeed);

    lblLimitRunSpeed = new JLabel("Speed Limit:");
    lblLimitRunSpeed.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblLimitRunSpeed.setToolTipText(
            "Override for top machine speed (may be required for particular materials or environments)");
    lblLimitRunSpeed.setEnabled(false);
    lblLimitRunSpeed.setBounds(47, 168, 59, 14);
    pnlJobs.add(lblLimitRunSpeed);

    lblKnifeType = new JLabel("Knife Type:");
    lblKnifeType.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblKnifeType.setToolTipText("Select knife type for this job");
    lblKnifeType.setEnabled(false);
    lblKnifeType.setHorizontalAlignment(SwingConstants.RIGHT);
    lblKnifeType.setBounds(46, 89, 59, 14);
    pnlJobs.add(lblKnifeType);

    cmbKnifeType = new JComboBox();
    cmbKnifeType.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            UpdateJob();
        }
    });
    cmbKnifeType.setModel(new DefaultComboBoxModel(new String[] { "Razor in Air", "Rotary Shear" }));
    cmbKnifeType.setToolTipText("Select knife type for this job");
    cmbKnifeType.setEnabled(false);
    cmbKnifeType.setBounds(109, 86, 95, 20);
    pnlJobs.add(cmbKnifeType);

    tabbedPane.setMnemonicAt(0, KeyEvent.VK_M);
    tabbedPane.setMnemonicAt(1, KeyEvent.VK_J);
    tabbedPane.setMnemonicAt(2, KeyEvent.VK_S);
    tabbedPane.setMnemonicAt(3, KeyEvent.VK_P);
    tabbedPane.setMnemonicAt(4, KeyEvent.VK_R);

    tabsROI.setMnemonicAt(0, KeyEvent.VK_D);
    tabsROI.setMnemonicAt(1, KeyEvent.VK_N);
    tabsROI.setMnemonicAt(3, KeyEvent.VK_W);

    scrollPane_4 = new JScrollPane();
    scrollPane_4.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
    scrollPane_4.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane_4.setBorder(null);
    scrollPane_4.setBounds(522, 44, 245, 405);
    pnlROI.add(scrollPane_4);

    panel_11 = new JPanel();
    panel_11.setToolTipText(
            "Click a machine to select it. Select two or more machines to compare their ROI measures.");
    scrollPane_4.setViewportView(panel_11);
    panel_11.setBackground(Color.WHITE);
    panel_11.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, null, null, null));
    panel_11.setLayout(new BorderLayout(0, 0));

    listCompareRoi = new JList(listModel);
    panel_11.add(listCompareRoi, BorderLayout.NORTH);
    listCompareRoi.setToolTipText(
            "Click a machine to select it. Select two or more machines to compare their ROI measures.");
    listCompareRoi.setBorder(null);
    listCompareRoi.setSelectionModel(new DefaultListSelectionModel() {
        private static final long serialVersionUID = 1L;

        boolean gestureStarted = false;

        @Override
        public void setSelectionInterval(int index0, int index1) {
            if (!gestureStarted) {
                if (isSelectedIndex(index0)) {
                    super.removeSelectionInterval(index0, index1);
                } else {
                    super.addSelectionInterval(index0, index1);
                }
            }
            gestureStarted = true;
        }

        @Override
        public void setValueIsAdjusting(boolean isAdjusting) {
            if (isAdjusting == false) {
                gestureStarted = false;
            }
        }

    });
    listCompareRoi.addListSelectionListener(new ROIListSelectionListener());
    listCompareRoi.setCellRenderer(new MachineListRenderer());
    listCompare.setSelectionModel(listCompareRoi.getSelectionModel());

    btnJobUp = new JButton("");
    btnJobUp.setToolTipText("Move job up");
    btnJobUp.addActionListener(new JobUpListener());
    try {
        btnJobUp.setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/up.png"))));
        btnJobUp.setRolloverEnabled(true);
        btnJobUp.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/up_over.png"))));
        btnJobUp.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/up_dis.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnJobUp.setEnabled(false);
    btnJobUp.setBounds(700, 463, 30, 30);
    pnlJob.add(btnJobUp);

    btnJobDown = new JButton("");
    btnJobDown.setToolTipText("Move job down");
    btnJobDown.addActionListener(new JobDownListener());
    try {
        btnJobDown.setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/down.png"))));
        btnJobDown.setRolloverEnabled(true);
        btnJobDown.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/down_over.png"))));
        btnJobDown.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/down_dis.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnJobDown.setEnabled(false);
    btnJobDown.setBounds(737, 463, 30, 30);
    pnlJob.add(btnJobDown);

    btnNewJob = new JButton("Add New");
    btnNewJob.setFont(new Font("Tahoma", Font.BOLD, 11));
    btnNewJob.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            jobFormReady = false;
            ResetStatusLabel();

            EnableJobForm();

            // new
            ResetJobForm();
            lblGsm.setText("(gsm)");
            label_3.setVisible(true);
            lblgm3.setText("(g/cm  )");
            txtDensity.setText("0.92");

            btnJobDelete.setEnabled(true);

            btnAddAll.setEnabled(true);

            /*if(listJobs.getSelectedIndex() == 0)
               btnJobUp.setEnabled(false);
            else
               btnJobUp.setEnabled(true);
                    
            if(listJobs.getSelectedIndex() == jobModel.getSize()-1)
               btnJobDown.setEnabled(false);
            else
               btnJobDown.setEnabled(true);*/

            int index = listJobs.getSelectedIndex();
            int size = jobModel.getSize();

            if (size >= Consts.JOB_LIST_LIMIT) { // Max list size
                ShowMessage("Maximum number of jobs allocated. Please delete before attempting to add more.");
                return;
            }

            String newName = getUniqueJobName("Job");
            txtJobName.setText(newName);
            job = new Job(newName);
            jobNames.add(newName.toLowerCase());

            //If no selection or if item in last position is selected,
            //add the new one to end of list, and select new one.
            if (index == -1 || (index + 1 == size)) {

                jobModel.addElement(job);
                listJobs.setSelectedIndex(size);
                listJobsAvail.setSelectedIndex(size);
                if (size > 0)
                    btnJobUp.setEnabled(true);

                //Otherwise insert the new one after the current selection,
                //and select new one.
            } else {
                jobModel.insertElementAt(job, index + 1);
                listJobs.setSelectedIndex(index + 1);
                listJobsAvail.setSelectedIndex(index + 1);
            }

            // TODO don't reset form, or add copy button

            ResetStatusLabel();
            jobFormReady = true;

            UpdateJob();
            txtJobName.requestFocusInWindow();
        }
    });
    try {
        btnNewJob.setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/plus.png"))));
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnNewJob.setToolTipText("Add new job");
    btnNewJob.setBounds(522, 460, 110, 36);
    pnlJob.add(btnNewJob);

    lblJobConfiguration = new JLabel("Job Configuration");
    lblJobConfiguration.setFont(new Font("Tahoma", Font.BOLD, 18));
    lblJobConfiguration.setBounds(29, 18, 269, 22);
    pnlJob.add(lblJobConfiguration);

    btnJobDelete = new JButton("");
    btnJobDelete.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            ResetStatusLabel();

            Job selected = (Job) listJobs.getSelectedValue();
            jobNames.remove(selected.getName().toLowerCase());

            ListSelectionModel lsm = listJobs.getSelectionModel();
            int firstSelected = lsm.getMinSelectionIndex();
            int lastSelected = lsm.getMaxSelectionIndex();
            jobModel.removeRange(firstSelected, lastSelected);

            int size = jobModel.size();

            if (size == 0) {
                //List is empty: disable delete, up, and down buttons.
                /*btnJobDelete.setEnabled(false);
                btnJobUp.setEnabled(false);
                btnJobDown.setEnabled(false);*/

            } else {
                //Adjust the selection.
                if (firstSelected == jobModel.getSize()) {
                    //Removed item in last position.
                    firstSelected--;
                }
                listJobs.setSelectedIndex(firstSelected);

                if (size == 21) { // No longer full list
                    ResetStatusLabel();
                }

                job = (Job) listJobs.getSelectedValue();
            }
        }
    });

    try {
        btnJobDelete
                .setIcon(new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/delete.png"))));
        btnJobDelete.setRolloverEnabled(true);
        btnJobDelete.setRolloverIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/delete_over.png"))));
        btnJobDelete.setDisabledIcon(
                new ImageIcon(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/delete_dis.png"))));
    } catch (NullPointerException e11) {
        System.out.println("Image load error");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    btnJobDelete.setToolTipText("Delete job");
    btnJobDelete.setRolloverEnabled(true);
    btnJobDelete.setEnabled(false);
    btnJobDelete.setBounds(651, 460, 36, 36);
    pnlJob.add(btnJobDelete);

    lblAddNewJobs = new JLabel(
            "Add new jobs to the list on the right, then configure unwind, rewind and material settings below");
    lblAddNewJobs.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblAddNewJobs.setBounds(29, 45, 483, 14);
    pnlJob.add(lblAddNewJobs);

    lblJobs = new JLabel("Jobs");
    lblJobs.setFont(new Font("Tahoma", Font.BOLD, 12));
    lblJobs.setBounds(522, 19, 85, 14);
    pnlJob.add(lblJobs);

    panel_1 = new JPanel();
    panel_1.setLayout(null);
    panel_1.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Total Output",
            TitledBorder.LEADING, TitledBorder.TOP, null, null));
    panel_1.setBounds(280, 380, 227, 116);
    pnlJob.add(panel_1);

    lblTargetOutputFor = new JLabel("Target output for job:");
    lblTargetOutputFor.setEnabled(false);
    lblTargetOutputFor.setBounds(30, 22, 129, 14);
    panel_1.add(lblTargetOutputFor);

    txtTargetTotal = new JTextField();
    txtTargetTotal.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtTargetTotal.selectAll();
        }
    });
    txtTargetTotal.getDocument().addDocumentListener(new JobInputChangeListener());
    txtTargetTotal.setToolTipText("Total output quantity for this job");
    txtTargetTotal.setText("10000");
    txtTargetTotal.setEnabled(false);
    txtTargetTotal.setColumns(10);
    txtTargetTotal.setBounds(30, 43, 118, 20);

    panel_1.add(txtTargetTotal);

    cmbTargetTotal = new JComboBox();
    cmbTargetTotal.setToolTipText("Type of measure to use for output quantity above");
    cmbTargetTotal.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            UpdateTotalsAmount();
        }
    });
    cmbTargetTotal.setModel(
            new DefaultComboBoxModel(new String[] { "Length (m)", "Weight (kg)", "Weight (tonnes)" }));
    cmbTargetTotal.setEnabled(false);
    cmbTargetTotal.setBounds(30, 67, 118, 20);
    panel_1.add(cmbTargetTotal);

    lblCounts = new JLabel("0 reel(s), 0 set(s), 0 mother(s)");
    lblCounts.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblCounts.setForeground(Color.GRAY);
    lblCounts.setBounds(30, 92, 187, 14);
    panel_1.add(lblCounts);

    panel_2 = new JPanel();
    panel_2.setLayout(null);
    panel_2.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Name", TitledBorder.LEADING,
            TitledBorder.TOP, null, new Color(0, 0, 0)));
    panel_2.setBounds(20, 72, 250, 83);
    pnlJob.add(panel_2);

    txtJobName = new JTextField();
    txtJobName.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            txtJobName.selectAll();
        }
    });
    txtJobName.setBounds(90, 30, 145, 28);
    panel_2.add(txtJobName);
    txtJobName.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void changedUpdate(DocumentEvent arg0) {
        }

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            UpdateJobName();
        }

        @Override
        public void removeUpdate(DocumentEvent arg0) {
            UpdateJobName();
        }
    });
    txtJobName.setToolTipText("Set the name of this job");
    txtJobName.setFont(new Font("Tahoma", Font.BOLD, 12));
    txtJobName.setEnabled(false);
    txtJobName.setColumns(10);

    lblJobName = new JLabel("Job name:");
    lblJobName.setToolTipText("Set the name of this job");
    lblJobName.setEnabled(false);
    lblJobName.setBounds(22, 31, 60, 24);
    panel_2.add(lblJobName);
    lblJobName.setFont(new Font("Tahoma", Font.PLAIN, 13));

    btnResetJobs = new JButton("Reset");
    btnResetJobs.setBounds(20, 460, 100, 36);
    pnlJob.add(btnResetJobs);
    btnResetJobs.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            ResetJobForm();
            UpdateJob();
        }
    });
    btnResetJobs.setToolTipText("Reset the form");
    btnResetJobs.setEnabled(false);

    scrollPane_1 = new JScrollPane();
    scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
    scrollPane_1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane_1.setBorder(null);
    scrollPane_1.setBounds(522, 44, 245, 405);
    pnlJob.add(scrollPane_1);

    panel_7 = new JPanel();
    panel_7.setToolTipText("Select a job to edit options, re-order, or delete");
    scrollPane_1.setViewportView(panel_7);
    panel_7.setBackground(Color.WHITE);
    panel_7.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, null, null, null));
    panel_7.setLayout(new BorderLayout(0, 0));

    listJobs = new JList(jobModel);
    listJobs.setSelectionModel(listJobsAvail.getSelectionModel());
    panel_7.add(listJobs, BorderLayout.NORTH);
    listJobs.setToolTipText("Select a job to edit options, re-order, or delete");
    listJobs.addListSelectionListener(new JobListSelectionListener());
    listJobs.setBorder(null);
    listJobs.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    listJobs.setCellRenderer(new JobListRenderer());
    pnlJob.setFocusTraversalPolicy(new FocusTraversalOnArray(
            new Component[] { cmbMaterials, txtThickness, txtDensity, cmbUnwindCore, txtUnwindAmount, txtSlits,
                    txtSlitWidth, cmbRewindCore, txtRewindAmount, cmbJobDomain, lblPresets, lblThickness_1,
                    lblDensity_1, pnlMaterials, lblWebWidthmm, lblmm0, lblUnwindCoremm, lblmm1, lblUnwindLength,
                    pnlUnwinds, lblmicro0, lblgm3, label_3, pnlJobs, lblTargetRewindLength, lblSlitWidth,
                    lblSlitCount, lblTrimtotal, lblTrim, lblRewindCoremm, lblPer_1, lblmm3, lblmm2 }));
    Image img = null;
    try {
        img = ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/refresh.png"));
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
    Graphics g = bi.createGraphics();
    g.drawImage(img, 0, 0, 25, 25, null);

    LoadSettings();

    DoLicenceCheck();

    initialising = false;

}

From source file:com.juanhg.icewalker.IceWalkerApplet.java

private void autogeneratedCode() {
    JPanel panel_control = new JPanel();
    panel_control.setBorder(new CompoundBorder(new EtchedBorder(EtchedBorder.RAISED, null, null),
            new BevelBorder(BevelBorder.RAISED, null, null, null, null)));

    JPanel panelInputs = new JPanel();
    panelInputs.setToolTipText("");
    panelInputs.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));

    JPanel panelTiempo = new JPanel();
    panelTiempo.setToolTipText("");
    panelTiempo.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));

    JPanel panelOutputs = new JPanel();
    panelOutputs.setToolTipText("");
    panelOutputs.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));

    JPanel panelTitleOutputs = new JPanel();
    panelTitleOutputs.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));

    JLabel labelOutputData = new JLabel("Datos de la Simulaci\u00F3n");
    labelOutputData.setFont(new Font("Tahoma", Font.PLAIN, 14));
    panelTitleOutputs.add(labelOutputData);

    lblPhase = new JLabel("Velocidad:");
    lblPhase.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblVValue = new JLabel();
    lblVValue.setText("0");
    lblVValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JLabel lblPosicion = new JLabel("Posici\u00F3n:");
    lblPosicion.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblPositionValue = new JLabel();
    lblPositionValue.setText("0");
    lblPositionValue.setFont(new Font("Tahoma", Font.PLAIN, 14));
    GroupLayout gl_panelOutputs = new GroupLayout(panelOutputs);
    gl_panelOutputs// w  ww.jav  a2 s.c o  m
            .setHorizontalGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING)
                    .addComponent(panelTitleOutputs, GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE)
                    .addGroup(gl_panelOutputs.createSequentialGroup().addContainerGap()
                            .addComponent(lblPhase, GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE).addGap(26)
                            .addComponent(lblVValue, GroupLayout.PREFERRED_SIZE, 147,
                                    GroupLayout.PREFERRED_SIZE)
                            .addContainerGap(130, Short.MAX_VALUE))
                    .addGroup(gl_panelOutputs.createSequentialGroup().addContainerGap()
                            .addComponent(lblPosicion, GroupLayout.PREFERRED_SIZE, 81,
                                    GroupLayout.PREFERRED_SIZE)
                            .addGap(26).addComponent(lblPositionValue, GroupLayout.PREFERRED_SIZE, 147,
                                    GroupLayout.PREFERRED_SIZE)
                            .addContainerGap(130, Short.MAX_VALUE)));
    gl_panelOutputs
            .setVerticalGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_panelOutputs.createSequentialGroup()
                            .addComponent(panelTitleOutputs, GroupLayout.PREFERRED_SIZE,
                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(ComponentPlacement.UNRELATED)
                            .addGroup(gl_panelOutputs.createParallelGroup(Alignment.BASELINE)
                                    .addComponent(lblPhase).addComponent(lblVValue))
                            .addPreferredGap(ComponentPlacement.UNRELATED)
                            .addGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING)
                                    .addComponent(lblPosicion, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(lblPositionValue, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE))
                            .addGap(63)));
    panelOutputs.setLayout(gl_panelOutputs);

    panel_1 = new JPanel();
    panel_1.setBorder(new LineBorder(new Color(0, 0, 0)));
    GroupLayout gl_panel_control = new GroupLayout(panel_control);
    gl_panel_control.setHorizontalGroup(gl_panel_control.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panel_control.createSequentialGroup().addContainerGap().addGroup(gl_panel_control
                    .createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_panel_control.createSequentialGroup()
                            .addGroup(gl_panel_control.createParallelGroup(Alignment.TRAILING, false)
                                    .addComponent(panelOutputs, Alignment.LEADING, GroupLayout.DEFAULT_SIZE,
                                            GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(panelInputs, Alignment.LEADING, GroupLayout.DEFAULT_SIZE,
                                            GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addContainerGap())
                    .addGroup(Alignment.TRAILING, gl_panel_control.createSequentialGroup()
                            .addGroup(gl_panel_control.createParallelGroup(Alignment.TRAILING)
                                    .addComponent(panel_1, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 404,
                                            Short.MAX_VALUE)
                                    .addComponent(panelTiempo, GroupLayout.DEFAULT_SIZE, 404, Short.MAX_VALUE))
                            .addContainerGap()))));
    gl_panel_control.setVerticalGroup(gl_panel_control.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panel_control.createSequentialGroup().addContainerGap()
                    .addComponent(panelInputs, GroupLayout.PREFERRED_SIZE, 141, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panelOutputs, GroupLayout.PREFERRED_SIZE, 103, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panelTiempo, GroupLayout.PREFERRED_SIZE, 271, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED, 15, Short.MAX_VALUE).addComponent(panel_1,
                            GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap()));

    JLabel lblNewLabel = new JLabel("GNU GENERAL PUBLIC LICENSE");
    panel_1.add(lblNewLabel);

    btnLaunchSimulation = new JButton("Iniciar");
    btnLaunchSimulation.setFont(new Font("Tahoma", Font.PLAIN, 16));
    btnLaunchSimulation.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            btnLaunchSimulationEvent(event);
        }
    });

    panel = new JPanel();
    panel.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));

    label = new JLabel("Datos de la Simulaci\u00F3n");
    label.setFont(new Font("Tahoma", Font.PLAIN, 14));
    panel.add(label);

    btnBanana = new JButton("");
    btnBanana.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            btnBananaEvent();
        }
    });
    bananaImage = loadImage(banana);
    btnBanana.setIcon(new ImageIcon(bananaImage));

    btnBurger = new JButton("");
    btnBurger.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            btnBurgerEvent();
        }
    });
    burgerImage = loadImage(burger);
    btnBurger.setIcon(new ImageIcon(burgerImage));

    btnCookie = new JButton("");
    btnCookie.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            btnCookieEvent();
        }
    });
    cookieImage = loadImage(cookie);
    btnCookie.setIcon(new ImageIcon(cookieImage));

    btnCarrot = new JButton("");
    carrotImage = loadImage(carrot);
    btnCarrot.setIcon(new ImageIcon(carrotImage));
    btnCarrot.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            btnCarrotEvent();
        }
    });

    JLabel lblNewLabel_1 = new JLabel("30 cal/100g");

    JLabel lblCalg_2 = new JLabel("734 cal/100g");

    lblCalg = new JLabel("90 cal/100g");

    lblCalg_1 = new JLabel("433 cal/100g");

    GroupLayout gl_panelTiempo = new GroupLayout(panelTiempo);
    gl_panelTiempo.setHorizontalGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING)
            .addComponent(panel, GroupLayout.DEFAULT_SIZE, 402, Short.MAX_VALUE)
            .addGroup(gl_panelTiempo.createSequentialGroup().addGap(17).addGroup(gl_panelTiempo
                    .createParallelGroup(Alignment.LEADING, false)
                    .addComponent(btnLaunchSimulation, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE,
                            GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(gl_panelTiempo.createSequentialGroup()
                            .addGroup(gl_panelTiempo.createParallelGroup(Alignment.TRAILING)
                                    .addComponent(btnCarrot, GroupLayout.PREFERRED_SIZE, 81,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(lblNewLabel_1, GroupLayout.PREFERRED_SIZE, 72,
                                            GroupLayout.PREFERRED_SIZE))
                            .addPreferredGap(ComponentPlacement.UNRELATED)
                            .addGroup(gl_panelTiempo.createParallelGroup(Alignment.TRAILING)
                                    .addComponent(btnBanana).addComponent(lblCalg, GroupLayout.PREFERRED_SIZE,
                                            72, GroupLayout.PREFERRED_SIZE))
                            .addGap(18)
                            .addGroup(gl_panelTiempo.createParallelGroup(Alignment.TRAILING)
                                    .addComponent(btnCookie, GroupLayout.PREFERRED_SIZE, 81,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(lblCalg_1, GroupLayout.PREFERRED_SIZE, 72,
                                            GroupLayout.PREFERRED_SIZE))
                            .addGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING)
                                    .addGroup(gl_panelTiempo.createSequentialGroup().addGap(6).addComponent(
                                            btnBurger, GroupLayout.PREFERRED_SIZE, 81,
                                            GroupLayout.PREFERRED_SIZE))
                                    .addGroup(gl_panelTiempo.createSequentialGroup().addGap(18).addComponent(
                                            lblCalg_2, GroupLayout.PREFERRED_SIZE, 72,
                                            GroupLayout.PREFERRED_SIZE)))))
                    .addContainerGap(24, Short.MAX_VALUE)));
    gl_panelTiempo.setVerticalGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelTiempo.createSequentialGroup()
                    .addComponent(panel, GroupLayout.PREFERRED_SIZE, 31, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.UNRELATED)
                    .addGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING).addGroup(gl_panelTiempo
                            .createSequentialGroup()
                            .addGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING)
                                    .addComponent(btnCarrot, GroupLayout.PREFERRED_SIZE, 69,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(btnCookie, GroupLayout.PREFERRED_SIZE, 69,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(btnBurger, GroupLayout.PREFERRED_SIZE, 69,
                                            GroupLayout.PREFERRED_SIZE))
                            .addPreferredGap(ComponentPlacement.RELATED)
                            .addGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING, false)
                                    .addComponent(lblNewLabel_1, GroupLayout.DEFAULT_SIZE,
                                            GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addGroup(gl_panelTiempo.createParallelGroup(Alignment.BASELINE)
                                            .addComponent(lblCalg_2, GroupLayout.DEFAULT_SIZE,
                                                    GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                            .addComponent(lblCalg_1, GroupLayout.DEFAULT_SIZE, 27,
                                                    Short.MAX_VALUE))
                                    .addComponent(lblCalg, GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE)))
                            .addComponent(btnBanana, GroupLayout.PREFERRED_SIZE, 69,
                                    GroupLayout.PREFERRED_SIZE))
                    .addGap(30).addComponent(btnLaunchSimulation, GroupLayout.PREFERRED_SIZE, 62,
                            GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(33, Short.MAX_VALUE)));
    panelTiempo.setLayout(gl_panelTiempo);

    JLabel LabelStrength = new JLabel("Fuerza");
    LabelStrength.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JLabel labelStaticFriction = new JLabel("Roz. Est\u00E1tico");
    labelStaticFriction.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JLabel labelDynamicFriction = new JLabel("Roz. Din\u00E1mico");
    labelDynamicFriction.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JPanel panelTitle = new JPanel();
    panelTitle.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));

    lblStaticFrictionValue = new JLabel("0.2");
    lblStaticFrictionValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblDynamicFrictionValue = new JLabel("0.1");
    lblDynamicFrictionValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblStregthValue = new JLabel("100");
    lblStregthValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    sliderStrength = new JSlider();
    sliderStrength.setMinorTickSpacing(1);
    sliderStrength.setMinimum(1);
    sliderStrength.setMaximum(300);
    sliderStrength.setValue(100);
    sliderStrength.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent event) {
            sliderStrenghtEvent();
        }
    });

    sliderStaticFriction = new JSlider();
    sliderStaticFriction.setMinimum(15);
    sliderStaticFriction.setMaximum(80);
    sliderStaticFriction.setMinorTickSpacing(1);
    sliderStaticFriction.setValue(20);
    sliderStaticFriction.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            sliderStaticFrictionEvent();
        }
    });

    sliderDynamicFriction = new JSlider();
    sliderDynamicFriction.setValue(10);
    sliderDynamicFriction.setMaximum(15);
    sliderDynamicFriction.setMinimum(5);
    sliderDynamicFriction.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            sliderDynamicFrictionEvent();
        }
    });
    sliderDynamicFriction.setMinorTickSpacing(1);

    GroupLayout gl_panelInputs = new GroupLayout(panelInputs);
    gl_panelInputs.setHorizontalGroup(gl_panelInputs.createParallelGroup(Alignment.TRAILING)
            .addGroup(gl_panelInputs.createSequentialGroup().addContainerGap()
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.TRAILING, false)
                            .addComponent(labelDynamicFriction, Alignment.LEADING, GroupLayout.DEFAULT_SIZE,
                                    GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(LabelStrength, Alignment.LEADING, GroupLayout.DEFAULT_SIZE,
                                    GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(labelStaticFriction, Alignment.LEADING, GroupLayout.PREFERRED_SIZE,
                                    120, Short.MAX_VALUE))
                    .addGap(18)
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                            .addComponent(lblStregthValue, GroupLayout.PREFERRED_SIZE, 42,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(lblStaticFrictionValue, GroupLayout.PREFERRED_SIZE, 56,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(lblDynamicFrictionValue, GroupLayout.PREFERRED_SIZE, 56,
                                    GroupLayout.PREFERRED_SIZE))
                    .addGap(18)
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                            .addComponent(sliderStaticFriction, GroupLayout.PREFERRED_SIZE, 146,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(sliderStrength, GroupLayout.PREFERRED_SIZE, 146,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(sliderDynamicFriction, GroupLayout.PREFERRED_SIZE, 146,
                                    GroupLayout.PREFERRED_SIZE))
                    .addGap(26))
            .addComponent(panelTitle, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE));
    gl_panelInputs
            .setVerticalGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_panelInputs.createSequentialGroup()
                            .addComponent(panelTitle, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                                    GroupLayout.PREFERRED_SIZE)
                            .addGap(8)
                            .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.BASELINE)
                                            .addComponent(LabelStrength).addComponent(lblStregthValue,
                                                    GroupLayout.PREFERRED_SIZE, 17, GroupLayout.PREFERRED_SIZE))
                                    .addComponent(sliderStrength, GroupLayout.PREFERRED_SIZE,
                                            GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                            .addPreferredGap(ComponentPlacement.RELATED)
                            .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.BASELINE)
                                            .addComponent(labelStaticFriction)
                                            .addComponent(lblStaticFrictionValue, GroupLayout.PREFERRED_SIZE,
                                                    17, GroupLayout.PREFERRED_SIZE))
                                    .addComponent(sliderStaticFriction, GroupLayout.PREFERRED_SIZE,
                                            GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                            .addGap(11)
                            .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                                    .addComponent(labelDynamicFriction)
                                    .addComponent(lblDynamicFrictionValue, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(sliderDynamicFriction, GroupLayout.PREFERRED_SIZE,
                                            GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                            .addGap(75)));

    JLabel lblDatosDeEntrada = new JLabel("Datos de Entrada");
    lblDatosDeEntrada.setFont(new Font("Tahoma", Font.PLAIN, 14));
    panelTitle.add(lblDatosDeEntrada);
    panelInputs.setLayout(gl_panelInputs);
    panel_control.setLayout(gl_panel_control);

    JPanel panel_visualizar = new JPanel();

    GroupLayout groupLayout = new GroupLayout(getContentPane());
    groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.LEADING)
            .addGroup(groupLayout.createSequentialGroup().addContainerGap()
                    .addComponent(panel_control, GroupLayout.PREFERRED_SIZE, 432, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel_visualizar, GroupLayout.DEFAULT_SIZE, 592, Short.MAX_VALUE)
                    .addContainerGap()));
    groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
            .addGroup(groupLayout.createSequentialGroup().addContainerGap()
                    .addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
                            .addComponent(panel_visualizar, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 598,
                                    Short.MAX_VALUE)
                            .addComponent(panel_control, Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 598,
                                    Short.MAX_VALUE))
                    .addContainerGap()));
    GridBagLayout gbl_panel_visualizar = new GridBagLayout();
    gbl_panel_visualizar.columnWidths = new int[] { 0, 0 };
    gbl_panel_visualizar.rowHeights = new int[] { 0, 0, 0 };
    gbl_panel_visualizar.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
    gbl_panel_visualizar.rowWeights = new double[] { 1.0, 1.0, Double.MIN_VALUE };
    panel_visualizar.setLayout(gbl_panel_visualizar);

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    GridBagConstraints gbc_tabbedPane = new GridBagConstraints();
    gbc_tabbedPane.gridheight = 2;
    gbc_tabbedPane.fill = GridBagConstraints.BOTH;
    gbc_tabbedPane.gridx = 0;
    gbc_tabbedPane.gridy = 0;
    panel_visualizar.add(tabbedPane, gbc_tabbedPane);

    panelSimulation = new JPanelGrafica();
    tabbedPane.addTab("Simulacin", null, panelSimulation, null);
    panelSimulation.setBackground(Color.WHITE);

    getContentPane().setLayout(groupLayout);
}

From source file:com.juanhg.cicloc.cicloCApplet.java

private void autogeneratedCode() {
    JPanel panel_control = new JPanel();
    panel_control.setBorder(new CompoundBorder(new EtchedBorder(EtchedBorder.RAISED, null, null),
            new BevelBorder(BevelBorder.RAISED, null, null, null, null)));

    JPanel panelInputs = new JPanel();
    panelInputs.setToolTipText("");
    panelInputs.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));

    JPanel panelOutputs = new JPanel();
    panelOutputs.setToolTipText("");
    panelOutputs.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));

    JPanel panelTitleOutputs = new JPanel();
    panelTitleOutputs.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));

    JLabel labelOutputData = new JLabel("Datos de la Simulaci\u00F3n");
    labelOutputData.setFont(new Font("Tahoma", Font.PLAIN, 14));
    panelTitleOutputs.add(labelOutputData);

    lblPhase = new JLabel("Trabajo Ciclo:");
    lblPhase.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblTrabajoCValue = new JLabel();
    lblTrabajoCValue.setText("0");
    lblTrabajoCValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JLabel lblPosicion = new JLabel("Trabajo:");
    lblPosicion.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblTrabajoValue = new JLabel();
    lblTrabajoValue.setText("0");
    lblTrabajoValue.setFont(new Font("Tahoma", Font.PLAIN, 14));
    hotImage = loadImage(hot);/* w  w  w . j a v  a 2s  .c o  m*/

    coldImage = loadImage(cold);

    lblE = new JLabel("Rendimiento:");
    lblE.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblEValue = new JLabel();
    lblEValue.setText("0");
    lblEValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    GroupLayout gl_panelOutputs = new GroupLayout(panelOutputs);
    gl_panelOutputs.setHorizontalGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelOutputs.createSequentialGroup().addGap(22).addGroup(gl_panelOutputs
                    .createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_panelOutputs.createSequentialGroup()
                            .addComponent(lblE, GroupLayout.PREFERRED_SIZE, 84, GroupLayout.PREFERRED_SIZE)
                            .addGap(26).addComponent(lblEValue, GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE))
                    .addGroup(gl_panelOutputs.createSequentialGroup()
                            .addGroup(gl_panelOutputs.createParallelGroup(Alignment.TRAILING)
                                    .addGroup(gl_panelOutputs.createSequentialGroup()
                                            .addComponent(lblPhase, GroupLayout.DEFAULT_SIZE,
                                                    GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                            .addGap(26))
                                    .addGroup(gl_panelOutputs.createSequentialGroup()
                                            .addComponent(lblPosicion, GroupLayout.PREFERRED_SIZE, 81,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addGap(29)))
                            .addGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING, false)
                                    .addComponent(lblTrabajoValue, GroupLayout.DEFAULT_SIZE,
                                            GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(lblTrabajoCValue, GroupLayout.PREFERRED_SIZE, 103,
                                            GroupLayout.PREFERRED_SIZE))))
                    .addGap(109))
            .addGroup(gl_panelOutputs.createSequentialGroup().addComponent(panelTitleOutputs,
                    GroupLayout.PREFERRED_SIZE, 262, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(82, Short.MAX_VALUE)));
    gl_panelOutputs
            .setVerticalGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_panelOutputs.createSequentialGroup()
                            .addComponent(panelTitleOutputs, GroupLayout.PREFERRED_SIZE,
                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(ComponentPlacement.UNRELATED)
                            .addGroup(gl_panelOutputs.createParallelGroup(Alignment.BASELINE)
                                    .addComponent(lblTrabajoCValue).addComponent(lblPhase))
                            .addPreferredGap(ComponentPlacement.UNRELATED)
                            .addGroup(gl_panelOutputs.createParallelGroup(Alignment.BASELINE)
                                    .addComponent(lblPosicion, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(lblTrabajoValue, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE))
                            .addPreferredGap(ComponentPlacement.UNRELATED)
                            .addGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING)
                                    .addComponent(lblE, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(lblEValue, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE))
                            .addGap(79)));
    panelOutputs.setLayout(gl_panelOutputs);

    panel_1 = new JPanel();
    panel_1.setBorder(new LineBorder(new Color(0, 0, 0)));

    JPanel panel_6 = new JPanel();
    panel_6.setBorder(new LineBorder(new Color(0, 0, 0)));
    GroupLayout gl_panel_control = new GroupLayout(panel_control);
    gl_panel_control.setHorizontalGroup(gl_panel_control.createParallelGroup(Alignment.TRAILING)
            .addGroup(gl_panel_control.createSequentialGroup().addContainerGap()
                    .addGroup(gl_panel_control.createParallelGroup(Alignment.LEADING, false)
                            .addComponent(panelOutputs, 0, 0, Short.MAX_VALUE)
                            .addComponent(panelInputs, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE,
                                    Short.MAX_VALUE)
                            .addComponent(panel_6, 0, 0, Short.MAX_VALUE).addComponent(panel_1,
                                    GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addContainerGap(92, Short.MAX_VALUE)));
    gl_panel_control.setVerticalGroup(gl_panel_control.createParallelGroup(Alignment.TRAILING)
            .addGroup(gl_panel_control.createSequentialGroup().addContainerGap()
                    .addComponent(panelInputs, GroupLayout.PREFERRED_SIZE, 213, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panelOutputs, GroupLayout.PREFERRED_SIZE, 129, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel_6, GroupLayout.PREFERRED_SIZE, 146, Short.MAX_VALUE)
                    .addPreferredGap(ComponentPlacement.RELATED).addComponent(panel_1,
                            GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addGap(17)));

    btnLaunchSimulation = new JButton("Iniciar");
    btnLaunchSimulation.setFont(new Font("Tahoma", Font.PLAIN, 16));
    btnLaunchSimulation.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            btnLaunchSimulationEvent(event);
        }
    });

    btnCold = new JButton("");
    btnCold.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            btnHot.setEnabled(true);
            btnCold.setEnabled(false);
            isHot = false;
            lblE.setText("Eficiencia");

            lblModeValue.setText("Modo Frig");
            panelMode.setBackground(Color.BLUE);

        }
    });
    btnCold.setIcon(new ImageIcon(coldImage));
    btnCold.setEnabled(true);

    panelMode = new JPanel();
    panelMode.setBorder(new LineBorder(new Color(0, 0, 0)));
    panelMode.setBackground(Color.ORANGE);

    btnHot = new JButton("");
    btnHot.setIcon(new ImageIcon(hotImage));
    btnHot.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            btnHot.setEnabled(false);
            btnCold.setEnabled(true);
            isHot = true;
            lblE.setText("Rendimiento");

            lblModeValue.setText("Modo Motor");
            panelMode.setBackground(Color.ORANGE);
        }
    });
    btnHot.setEnabled(false);
    GroupLayout gl_panel_6 = new GroupLayout(panel_6);
    gl_panel_6.setHorizontalGroup(gl_panel_6.createParallelGroup(Alignment.LEADING).addGroup(gl_panel_6
            .createSequentialGroup().addContainerGap()
            .addGroup(gl_panel_6.createParallelGroup(Alignment.LEADING, false)
                    .addComponent(panelMode, Alignment.TRAILING, 0, 0, Short.MAX_VALUE)
                    .addComponent(btnHot, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE))
            .addGap(10)
            .addGroup(gl_panel_6.createParallelGroup(Alignment.TRAILING, false)
                    .addComponent(btnCold, GroupLayout.PREFERRED_SIZE, 112, GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnLaunchSimulation, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE,
                            Short.MAX_VALUE))
            .addContainerGap()));
    gl_panel_6.setVerticalGroup(gl_panel_6.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panel_6.createSequentialGroup().addGap(10)
                    .addGroup(gl_panel_6.createParallelGroup(Alignment.LEADING)
                            .addComponent(panelMode, 0, 0, Short.MAX_VALUE).addComponent(btnLaunchSimulation,
                                    GroupLayout.PREFERRED_SIZE, 45, GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addGroup(gl_panel_6.createParallelGroup(Alignment.TRAILING)
                            .addComponent(btnCold, GroupLayout.DEFAULT_SIZE, 68, Short.MAX_VALUE)
                            .addComponent(btnHot, GroupLayout.DEFAULT_SIZE, 68, Short.MAX_VALUE))
                    .addContainerGap()));

    lblModeValue = new JLabel("Modo Motor");
    lblModeValue.setFont(new Font("Tahoma", Font.PLAIN, 17));
    GroupLayout gl_panelMode = new GroupLayout(panelMode);
    gl_panelMode.setHorizontalGroup(gl_panelMode.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelMode.createSequentialGroup().addContainerGap()
                    .addComponent(lblModeValue, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
    gl_panelMode
            .setVerticalGroup(gl_panelMode.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_panelMode
                            .createSequentialGroup().addContainerGap().addComponent(lblModeValue,
                                    GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGap(52)));
    panelMode.setLayout(gl_panelMode);
    panel_6.setLayout(gl_panel_6);

    JLabel lblNewLabel = new JLabel("GNU GENERAL PUBLIC LICENSE");
    panel_1.add(lblNewLabel);

    JLabel LabelT1 = new JLabel("T1");
    LabelT1.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JLabel labelT2 = new JLabel("T2");
    labelT2.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JLabel labelVmin = new JLabel("Vm\u00EDn");
    labelVmin.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JPanel panelTitle = new JPanel();
    panelTitle.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));

    lblT2Value = new JLabel("300");
    lblT2Value.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblVminValue = new JLabel("2");
    lblVminValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblT1Value = new JLabel("400");
    lblT1Value.setFont(new Font("Tahoma", Font.PLAIN, 14));

    sliderT1 = new JSlider();
    sliderT1.setMinimum(350);
    sliderT1.setMaximum(450);
    sliderT1.setMinorTickSpacing(1);
    sliderT1.setValue(400);
    sliderT1.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent event) {
            sliderT1Event();
        }
    });

    sliderT2 = new JSlider();
    sliderT2.setMinimum(270);
    sliderT2.setMaximum(330);
    sliderT2.setMinorTickSpacing(1);
    sliderT2.setValue(300);
    sliderT2.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            sliderT2Event();
        }
    });

    sliderVMin = new JSlider();
    sliderVMin.setMaximum(4);
    sliderVMin.setMinimum(1);
    sliderVMin.setValue(2);
    sliderVMin.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            sliderVminEvent();
        }
    });

    JLabel lblVmax = new JLabel("Vm\u00E1x");
    lblVmax.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblVmaxValue = new JLabel("7");
    lblVmaxValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    sliderVMax = new JSlider();
    sliderVMax.setMaximum(10);
    sliderVMax.setMinimum(6);
    sliderVMax.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent arg0) {
            sliderVmaxEvent();
        }
    });
    sliderVMax.setValue(7);
    sliderVMax.setMinorTickSpacing(1);

    JLabel labelN = new JLabel("N");
    labelN.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblNValue = new JLabel("10");
    lblNValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    sliderN = new JSlider();
    sliderN.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            sliderNEvent();
        }
    });
    sliderN.setValue(10);
    sliderN.setMinorTickSpacing(1);

    GroupLayout gl_panelInputs = new GroupLayout(panelInputs);
    gl_panelInputs.setHorizontalGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelInputs.createSequentialGroup().addGap(19).addGroup(gl_panelInputs
                    .createParallelGroup(Alignment.LEADING, false)
                    .addComponent(labelN, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE,
                            GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(lblVmax, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE,
                            GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(labelVmin, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE,
                            Short.MAX_VALUE)
                    .addComponent(labelT2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(LabelT1, GroupLayout.PREFERRED_SIZE, 65, GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.TRAILING, false)
                            .addGroup(gl_panelInputs.createSequentialGroup()
                                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                                            .addComponent(lblT1Value, GroupLayout.PREFERRED_SIZE, 42,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addComponent(lblT2Value, GroupLayout.PREFERRED_SIZE, 56,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addComponent(lblVminValue, GroupLayout.PREFERRED_SIZE, 56,
                                                    GroupLayout.PREFERRED_SIZE))
                                    .addGap(18)
                                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING, false)
                                            .addComponent(sliderT1, 0, 0, Short.MAX_VALUE)
                                            .addComponent(sliderT2, 0, 0, Short.MAX_VALUE)
                                            .addComponent(sliderVMin, GroupLayout.PREFERRED_SIZE, 88,
                                                    GroupLayout.PREFERRED_SIZE)))
                            .addGroup(gl_panelInputs.createSequentialGroup()
                                    .addComponent(lblVmaxValue, GroupLayout.PREFERRED_SIZE, 56,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addGap(18).addComponent(sliderVMax, GroupLayout.PREFERRED_SIZE, 88,
                                            GroupLayout.PREFERRED_SIZE))
                            .addGroup(gl_panelInputs.createSequentialGroup()
                                    .addComponent(lblNValue, GroupLayout.PREFERRED_SIZE, 56,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addGap(18)
                                    .addComponent(sliderN, GroupLayout.PREFERRED_SIZE, 88,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addPreferredGap(ComponentPlacement.RELATED)))
                    .addContainerGap())
            .addComponent(panelTitle, GroupLayout.DEFAULT_SIZE, 259, Short.MAX_VALUE));
    gl_panelInputs.setVerticalGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelInputs.createSequentialGroup()
                    .addComponent(panelTitle, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                            GroupLayout.PREFERRED_SIZE)
                    .addGap(18)
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                            .addGroup(gl_panelInputs.createSequentialGroup().addComponent(LabelT1).addGap(12)
                                    .addComponent(labelT2).addGap(17).addComponent(labelVmin).addGap(17)
                                    .addComponent(lblVmax, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addGap(17).addComponent(labelN, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE))
                            .addGroup(gl_panelInputs.createSequentialGroup()
                                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                                            .addComponent(lblT1Value, GroupLayout.PREFERRED_SIZE, 17,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addComponent(sliderT1, GroupLayout.PREFERRED_SIZE,
                                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                                    .addPreferredGap(ComponentPlacement.RELATED)
                                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                                            .addComponent(lblT2Value, GroupLayout.PREFERRED_SIZE, 17,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addComponent(sliderT2, GroupLayout.PREFERRED_SIZE,
                                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                                    .addGap(11)
                                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                                            .addComponent(lblVminValue, GroupLayout.PREFERRED_SIZE, 17,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addComponent(sliderVMin, GroupLayout.PREFERRED_SIZE,
                                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                                    .addPreferredGap(ComponentPlacement.UNRELATED)
                                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                                            .addComponent(lblVmaxValue, GroupLayout.PREFERRED_SIZE, 17,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addComponent(sliderVMax, GroupLayout.PREFERRED_SIZE,
                                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                                    .addPreferredGap(ComponentPlacement.RELATED)
                                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.TRAILING)
                                            .addComponent(lblNValue, GroupLayout.PREFERRED_SIZE, 17,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addComponent(sliderN, GroupLayout.PREFERRED_SIZE,
                                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))))
                    .addGap(8)));

    JLabel lblDatosDeEntrada = new JLabel("Datos de Entrada");
    lblDatosDeEntrada.setFont(new Font("Tahoma", Font.PLAIN, 14));
    panelTitle.add(lblDatosDeEntrada);
    panelInputs.setLayout(gl_panelInputs);
    panel_control.setLayout(gl_panel_control);

    JPanel panel_visualizar = new JPanel();
    panel_visualizar.setBackground(Color.WHITE);

    GroupLayout groupLayout = new GroupLayout(getContentPane());
    groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
            .addGroup(Alignment.LEADING, groupLayout.createSequentialGroup().addContainerGap()
                    .addComponent(panel_control, GroupLayout.PREFERRED_SIZE, 286, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED).addComponent(panel_visualizar,
                            GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(93, Short.MAX_VALUE)));
    groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.TRAILING).addGroup(groupLayout
            .createSequentialGroup().addContainerGap()
            .addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
                    .addComponent(panel_visualizar, GroupLayout.DEFAULT_SIZE, 567, Short.MAX_VALUE)
                    .addComponent(panel_control, GroupLayout.PREFERRED_SIZE, 568, GroupLayout.PREFERRED_SIZE))
            .addContainerGap()));

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);

    panelPiston = new JPanelGrafica();
    panelPiston.setBackground(Color.WHITE);

    JPanel panel_5 = new JPanel();
    panel_5.setBackground(Color.WHITE);

    JPanel panel = new JPanel();
    panel.setBackground(Color.WHITE);
    GroupLayout gl_panel_visualizar = new GroupLayout(panel_visualizar);
    gl_panel_visualizar.setHorizontalGroup(gl_panel_visualizar.createParallelGroup(Alignment.LEADING)
            .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 845, Short.MAX_VALUE)
            .addGroup(gl_panel_visualizar.createSequentialGroup().addContainerGap()
                    .addComponent(panelPiston, GroupLayout.PREFERRED_SIZE, 355, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel, GroupLayout.PREFERRED_SIZE, 183, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel_5, GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE).addContainerGap()));
    gl_panel_visualizar.setVerticalGroup(gl_panel_visualizar.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panel_visualizar.createSequentialGroup()
                    .addComponent(tabbedPane, GroupLayout.PREFERRED_SIZE, 289, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addGroup(gl_panel_visualizar.createParallelGroup(Alignment.LEADING)
                            .addComponent(panel, GroupLayout.DEFAULT_SIZE, 291, Short.MAX_VALUE)
                            .addComponent(panelPiston, GroupLayout.DEFAULT_SIZE, 291, Short.MAX_VALUE)
                            .addComponent(panel_5, GroupLayout.DEFAULT_SIZE, 291, Short.MAX_VALUE))
                    .addContainerGap()));

    panelTermo = new JPanelGrafica();
    panelTermo.setBackground(Color.WHITE);
    GroupLayout gl_panel = new GroupLayout(panel);
    gl_panel.setHorizontalGroup(gl_panel.createParallelGroup(Alignment.LEADING).addComponent(panelTermo,
            GroupLayout.DEFAULT_SIZE, 131, Short.MAX_VALUE));
    gl_panel.setVerticalGroup(gl_panel.createParallelGroup(Alignment.LEADING).addComponent(panelTermo,
            GroupLayout.DEFAULT_SIZE, 291, Short.MAX_VALUE));
    panel.setLayout(gl_panel);

    panelPistonInterno = new JPanelGrafica();
    panelPistonInterno.setBackground(Color.WHITE);
    GroupLayout gl_panelPiston = new GroupLayout(panelPiston);
    gl_panelPiston.setHorizontalGroup(gl_panelPiston.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelPiston.createSequentialGroup()
                    .addComponent(panelPistonInterno, GroupLayout.PREFERRED_SIZE, 354,
                            GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
    gl_panelPiston.setVerticalGroup(gl_panelPiston.createParallelGroup(Alignment.LEADING)
            .addComponent(panelPistonInterno, GroupLayout.DEFAULT_SIZE, 261, Short.MAX_VALUE));
    panelPiston.setLayout(gl_panelPiston);

    JPanel panelBulb = new JPanel();
    panelBulb.setBackground(Color.WHITE);

    JPanel panelLED = new JPanel();
    panelLED.setBackground(Color.WHITE);

    lblBulbValue = new JLabel("-  Horas");

    lblLEDValue = new JLabel("-  Horas");
    GroupLayout gl_panel_5 = new GroupLayout(panel_5);
    gl_panel_5.setHorizontalGroup(gl_panel_5.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panel_5.createSequentialGroup()
                    .addGroup(gl_panel_5.createParallelGroup(Alignment.LEADING, false)
                            .addComponent(panelLED, 0, 0, Short.MAX_VALUE)
                            .addComponent(panelBulb, GroupLayout.PREFERRED_SIZE, 132, Short.MAX_VALUE))
                    .addGap(18).addGroup(gl_panel_5.createParallelGroup(Alignment.LEADING)
                            .addComponent(lblBulbValue).addComponent(lblLEDValue))
                    .addContainerGap(87, Short.MAX_VALUE)));
    gl_panel_5.setVerticalGroup(gl_panel_5.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panel_5.createSequentialGroup()
                    .addComponent(panelBulb, GroupLayout.PREFERRED_SIZE, 143, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.UNRELATED)
                    .addComponent(panelLED, GroupLayout.DEFAULT_SIZE, 137, Short.MAX_VALUE))
            .addGroup(gl_panel_5.createSequentialGroup().addGap(64).addComponent(lblBulbValue)
                    .addPreferredGap(ComponentPlacement.RELATED, 135, Short.MAX_VALUE).addComponent(lblLEDValue)
                    .addGap(64)));

    LEDOnImage = loadImage(LEDOn);
    LEDOffImage = loadImage(LEDOff);
    lblLED = new JLabel(new ImageIcon(LEDOffImage));
    lblLED.setBackground(Color.WHITE);

    GroupLayout gl_panelLED = new GroupLayout(panelLED);
    gl_panelLED.setHorizontalGroup(gl_panelLED.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelLED.createSequentialGroup()
                    .addComponent(lblLED, GroupLayout.PREFERRED_SIZE, 131, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(33, Short.MAX_VALUE)));
    gl_panelLED.setVerticalGroup(gl_panelLED.createParallelGroup(Alignment.TRAILING).addGroup(Alignment.LEADING,
            gl_panelLED.createSequentialGroup().addContainerGap().addComponent(lblLED, GroupLayout.DEFAULT_SIZE,
                    126, Short.MAX_VALUE)));
    panelLED.setLayout(gl_panelLED);

    bulbOnImage = loadImage(bulbOn);
    bulbOffImage = loadImage(bulbOff);
    lblBulb = new JLabel(new ImageIcon(bulbOffImage));
    lblBulb.setBackground(Color.WHITE);

    GroupLayout gl_panelBulb = new GroupLayout(panelBulb);
    gl_panelBulb.setHorizontalGroup(gl_panelBulb.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelBulb.createSequentialGroup()
                    .addComponent(lblBulb, GroupLayout.PREFERRED_SIZE, 134, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(30, Short.MAX_VALUE)));
    gl_panelBulb.setVerticalGroup(gl_panelBulb.createParallelGroup(Alignment.LEADING).addComponent(lblBulb,
            GroupLayout.DEFAULT_SIZE, 143, Short.MAX_VALUE));
    panelBulb.setLayout(gl_panelBulb);
    panel_5.setLayout(gl_panel_5);

    JPanel panelXV = new JPanel();
    panelXV.setBackground(Color.WHITE);
    tabbedPane.addTab("Grficas V", null, panelXV, null);

    JPanel panel_2 = new JPanel();

    JPanel panel_3 = new JPanel();

    JPanel panel_4 = new JPanel();

    panelTV = new JPanelGrafica();
    GroupLayout gl_panel_4 = new GroupLayout(panel_4);
    gl_panel_4.setHorizontalGroup(
            gl_panel_4.createParallelGroup(Alignment.LEADING).addGap(0, 272, Short.MAX_VALUE)
                    .addComponent(panelTV, GroupLayout.DEFAULT_SIZE, 272, Short.MAX_VALUE));
    gl_panel_4
            .setVerticalGroup(gl_panel_4.createParallelGroup(Alignment.LEADING).addGap(0, 241, Short.MAX_VALUE)
                    .addGroup(gl_panel_4.createSequentialGroup()
                            .addComponent(panelTV, GroupLayout.PREFERRED_SIZE, 241, GroupLayout.PREFERRED_SIZE)
                            .addContainerGap(306, Short.MAX_VALUE)));
    panel_4.setLayout(gl_panel_4);
    GroupLayout gl_panelXV = new GroupLayout(panelXV);
    gl_panelXV.setHorizontalGroup(gl_panelXV.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelXV.createSequentialGroup().addContainerGap()
                    .addComponent(panel_2, GroupLayout.PREFERRED_SIZE, 263, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel_3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                            GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel_4, GroupLayout.PREFERRED_SIZE, 272, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(11, Short.MAX_VALUE)));
    gl_panelXV.setVerticalGroup(gl_panelXV.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelXV.createSequentialGroup().addContainerGap()
                    .addGroup(gl_panelXV.createParallelGroup(Alignment.LEADING)
                            .addComponent(panel_4, GroupLayout.PREFERRED_SIZE, 241, GroupLayout.PREFERRED_SIZE)
                            .addGroup(gl_panelXV.createParallelGroup(Alignment.TRAILING, false)
                                    .addComponent(panel_3, Alignment.LEADING, 0, 0, Short.MAX_VALUE)
                                    .addComponent(panel_2, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 241,
                                            Short.MAX_VALUE)))
                    .addContainerGap(317, Short.MAX_VALUE)));

    panelUV = new JPanelGrafica();
    GroupLayout gl_panel_3 = new GroupLayout(panel_3);
    gl_panel_3.setHorizontalGroup(gl_panel_3.createParallelGroup(Alignment.LEADING).addComponent(panelUV,
            GroupLayout.DEFAULT_SIZE, 272, Short.MAX_VALUE));
    gl_panel_3.setVerticalGroup(gl_panel_3.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panel_3.createSequentialGroup()
                    .addComponent(panelUV, GroupLayout.PREFERRED_SIZE, 241, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(306, Short.MAX_VALUE)));
    panel_3.setLayout(gl_panel_3);

    panelPV = new JPanelGrafica();
    GroupLayout gl_panel_2 = new GroupLayout(panel_2);
    gl_panel_2.setHorizontalGroup(gl_panel_2.createParallelGroup(Alignment.LEADING).addComponent(panelPV,
            GroupLayout.DEFAULT_SIZE, 249, Short.MAX_VALUE));
    gl_panel_2.setVerticalGroup(gl_panel_2.createParallelGroup(Alignment.LEADING).addComponent(panelPV,
            GroupLayout.DEFAULT_SIZE, 225, Short.MAX_VALUE));
    panel_2.setLayout(gl_panel_2);
    panelXV.setLayout(gl_panelXV);

    JPanel panelXT = new JPanel();
    panelXT.setBackground(Color.WHITE);
    tabbedPane.addTab("Grficas T", null, panelXT, null);

    JPanel panel_9 = new JPanel();

    panelPT = new JPanelGrafica();
    GroupLayout gl_panel_9 = new GroupLayout(panel_9);
    gl_panel_9.setHorizontalGroup(
            gl_panel_9.createParallelGroup(Alignment.LEADING).addGap(0, 263, Short.MAX_VALUE)
                    .addComponent(panelPT, GroupLayout.DEFAULT_SIZE, 263, Short.MAX_VALUE));
    gl_panel_9
            .setVerticalGroup(gl_panel_9.createParallelGroup(Alignment.LEADING).addGap(0, 241, Short.MAX_VALUE)
                    .addComponent(panelPT, GroupLayout.DEFAULT_SIZE, 241, Short.MAX_VALUE));
    panel_9.setLayout(gl_panel_9);

    JPanel panel_10 = new JPanel();

    panelST = new JPanelGrafica();
    GroupLayout gl_panel_10 = new GroupLayout(panel_10);
    gl_panel_10.setHorizontalGroup(
            gl_panel_10.createParallelGroup(Alignment.LEADING).addGap(0, 272, Short.MAX_VALUE)
                    .addComponent(panelST, GroupLayout.DEFAULT_SIZE, 272, Short.MAX_VALUE));
    gl_panel_10
            .setVerticalGroup(gl_panel_10.createParallelGroup(Alignment.LEADING).addGap(0, 241, Short.MAX_VALUE)
                    .addGroup(gl_panel_10.createSequentialGroup()
                            .addComponent(panelST, GroupLayout.PREFERRED_SIZE, 241, GroupLayout.PREFERRED_SIZE)
                            .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
    panel_10.setLayout(gl_panel_10);

    JPanel panel_11 = new JPanel();

    panelUT = new JPanelGrafica();
    GroupLayout gl_panel_11 = new GroupLayout(panel_11);
    gl_panel_11.setHorizontalGroup(
            gl_panel_11.createParallelGroup(Alignment.LEADING).addGap(0, 272, Short.MAX_VALUE)
                    .addComponent(panelUT, GroupLayout.DEFAULT_SIZE, 272, Short.MAX_VALUE));
    gl_panel_11
            .setVerticalGroup(gl_panel_11.createParallelGroup(Alignment.LEADING).addGap(0, 241, Short.MAX_VALUE)
                    .addGroup(gl_panel_11.createSequentialGroup()
                            .addComponent(panelUT, GroupLayout.PREFERRED_SIZE, 241, GroupLayout.PREFERRED_SIZE)
                            .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
    panel_11.setLayout(gl_panel_11);
    GroupLayout gl_panelXT = new GroupLayout(panelXT);
    gl_panelXT.setHorizontalGroup(gl_panelXT.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelXT.createSequentialGroup().addContainerGap()
                    .addComponent(panel_9, GroupLayout.PREFERRED_SIZE, 263, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel_10, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                            GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel_11, GroupLayout.PREFERRED_SIZE, 272, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(11, Short.MAX_VALUE)));
    gl_panelXT.setVerticalGroup(gl_panelXT.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelXT.createSequentialGroup().addContainerGap()
                    .addGroup(gl_panelXT.createParallelGroup(Alignment.LEADING)
                            .addComponent(panel_11, GroupLayout.PREFERRED_SIZE, 241, GroupLayout.PREFERRED_SIZE)
                            .addGroup(gl_panelXT.createParallelGroup(Alignment.TRAILING, false)
                                    .addComponent(panel_10, Alignment.LEADING, 0, 0, Short.MAX_VALUE)
                                    .addComponent(panel_9, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 241,
                                            Short.MAX_VALUE)))
                    .addContainerGap(317, Short.MAX_VALUE)));
    panelXT.setLayout(gl_panelXT);
    panel_visualizar.setLayout(gl_panel_visualizar);

    getContentPane().setLayout(groupLayout);
}

From source file:de.dmarcini.submatix.pclogger.gui.MainCommGUI.java

/**
 * Initialize the contents of the frame.
 * /*from  ww  w . j a  v  a  2 s . c  o  m*/
 * @throws ClassNotFoundException
 * @throws SQLException
 */
private void initializeGUI() throws SQLException, ClassNotFoundException {
    frmMainWindow = new JFrame();
    frmMainWindow.setFont(new Font("Arial", Font.PLAIN, 12));
    frmMainWindow.setSize(new Dimension(810, 600));
    frmMainWindow.setResizable(false);
    frmMainWindow.setIconImage(Toolkit.getDefaultToolkit()
            .getImage(MainCommGUI.class.getResource("/de/dmarcini/submatix/pclogger/res/112.png")));
    frmMainWindow.setTitle(LangStrings.getString("MainCommGUI.frmMainWindow.title")); //$NON-NLS-1$
    frmMainWindow.setBounds(100, 100, 800, 600);
    frmMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmMainWindow.getContentPane().setLayout(new BorderLayout(0, 0));
    frmMainWindow.addWindowListener(new MainWindowListener());
    statusTextField = new JTextField();
    statusTextField.setEditable(false);
    statusTextField.setText("-");
    frmMainWindow.getContentPane().add(statusTextField, BorderLayout.SOUTH);
    statusTextField.setColumns(10);
    tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    frmMainWindow.getContentPane().add(tabbedPane, BorderLayout.CENTER);
    tabbedPane.addMouseMotionListener(this);
    // Connection Panel
    connectionPanel = new spx42ConnectPanel(databaseUtil);
    tabbedPane.addTab("CONNECTION", null, connectionPanel, null);
    tabbedPane.setEnabledAt(programTabs.TAB_CONNECT.ordinal(), true);
    // config Panel
    configPanel = new spx42ConfigPanel();
    tabbedPane.addTab("CONFIG", null, configPanel, null);
    tabbedPane.setEnabledAt(programTabs.TAB_CONFIG.ordinal(), true);
    // GASPANEL
    gasConfigPanel = new spx42GaslistEditPanel(databaseUtil);
    tabbedPane.addTab("GAS", null, gasConfigPanel, null);
    tabbedPane.setEnabledAt(programTabs.TAB_GASLIST.ordinal(), true);
    // Loglisten Panel
    logListPanel = new spx42LoglistPanel(this, databaseUtil);
    tabbedPane.addTab("LOG", null, logListPanel, null);
    tabbedPane.setEnabledAt(programTabs.TAB_LOGREAD.ordinal(), true);
    // Grafik Panel
    logGraphPanel = new spx42LogGraphPanel(databaseUtil);
    tabbedPane.addTab("GRAPH", null, logGraphPanel, null);
    tabbedPane.setEnabledAt(programTabs.TAB_LOGGRAPH.ordinal(), true);
    // import/export Panel
    fileManagerPanel = new spx42FileManagerPanel(this, databaseUtil);
    tabbedPane.addTab("EXPORT", null, fileManagerPanel, null);
    tabbedPane.setEnabledAt(programTabs.TAB_FILEMANAGER.ordinal(), true);
    // MEN
    JMenuBar menuBar = new JMenuBar();
    frmMainWindow.setJMenuBar(menuBar);
    mnFile = new JMenu(LangStrings.getString("MainCommGUI.mnFile.text")); //$NON-NLS-1$
    menuBar.add(mnFile);
    mntmExit = new JMenuItem(LangStrings.getString("MainCommGUI.mntmExit.text")); //$NON-NLS-1$
    mntmExit.setIcon(
            new ImageIcon(MainCommGUI.class.getResource("/de/dmarcini/submatix/pclogger/res/176.png")));
    mntmExit.setActionCommand("exit");
    mntmExit.addActionListener(this);
    mntmExit.addMouseMotionListener(this);
    mntmExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
    mnFile.add(mntmExit);
    mnLanguages = new JMenu(LangStrings.getString("MainCommGUI.mnLanguages.text")); //$NON-NLS-1$
    mnLanguages.addMouseMotionListener(this);
    menuBar.add(mnLanguages);
    mnOptions = new JMenu(LangStrings.getString("MainCommGUI.mnOptions.text")); //$NON-NLS-1$
    mnOptions.addMouseMotionListener(this);
    menuBar.add(mnOptions);
    mntmOptions = new JMenuItem(LangStrings.getString("MainCommGUI.mntmOptions.text")); //$NON-NLS-1$
    mntmOptions.addMouseMotionListener(this);
    mntmOptions.addActionListener(this);
    mntmOptions.setActionCommand("set_propertys");
    mnOptions.add(mntmOptions);
    mnHelp = new JMenu(LangStrings.getString("MainCommGUI.mnHelp.text")); //$NON-NLS-1$
    mnHelp.addMouseMotionListener(this);
    menuBar.add(mnHelp);
    mntmHelp = new JMenuItem(LangStrings.getString("MainCommGUI.mntmHelp.text")); //$NON-NLS-1$
    mntmHelp.addActionListener(this);
    mntmHelp.setActionCommand("help");
    mntmHelp.addMouseMotionListener(this);
    mnHelp.add(mntmHelp);
    mntmInfo = new JMenuItem(LangStrings.getString("MainCommGUI.mntmInfo.text")); //$NON-NLS-1$
    mntmInfo.addActionListener(this);
    mntmInfo.setActionCommand("info");
    mntmInfo.addMouseMotionListener(this);
    mntmInfo.setIcon(
            new ImageIcon(MainCommGUI.class.getResource("/javax/swing/plaf/metal/icons/ocean/expanded.gif")));
    mntmInfo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, InputEvent.CTRL_MASK));
    mnHelp.add(mntmInfo);
}

From source file:com.juanhg.angularmdisk.AngularMDiskApplet.java

private void autogeneratedCode() {
    JPanel panel_control = new JPanel();
    panel_control.setBorder(new CompoundBorder(new EtchedBorder(EtchedBorder.RAISED, null, null),
            new BevelBorder(BevelBorder.RAISED, null, null, null, null)));

    JPanel panelInputs = new JPanel();
    panelInputs.setToolTipText("");
    panelInputs.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));

    JPanel panelTiempo = new JPanel();
    panelTiempo.setToolTipText("");
    panelTiempo.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));

    btnPhase1 = new JButton("Lanzar Insecto");
    btnPhase1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            btnPhase1Event();//from  w w  w .  jav  a2 s .  com
        }
    });
    btnPhase1.setEnabled(false);

    JPanel panelOutputs = new JPanel();
    panelOutputs.setToolTipText("");
    panelOutputs.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));

    JPanel panelTitleOutputs = new JPanel();
    panelTitleOutputs.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));

    JLabel labelOutputData = new JLabel("Datos de la Simulaci\u00F3n");
    labelOutputData.setFont(new Font("Tahoma", Font.PLAIN, 14));
    panelTitleOutputs.add(labelOutputData);

    lblDiskW = new JLabel("Velocidad Disco:");
    lblDiskW.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblDiskWValue = new JLabel();
    lblDiskWValue.setText("0");
    lblDiskWValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblCriticRadius = new JLabel("Radio Cr\u00EDtico:");
    lblCriticRadius.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblCriticRadiusValue = new JLabel();
    lblCriticRadiusValue.setText("0");
    lblCriticRadiusValue.setFont(new Font("Tahoma", Font.PLAIN, 14));
    GroupLayout gl_panelOutputs = new GroupLayout(panelOutputs);
    gl_panelOutputs.setHorizontalGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING)
            .addComponent(panelTitleOutputs, GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE)
            .addGroup(gl_panelOutputs.createSequentialGroup().addContainerGap()
                    .addGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING)
                            .addGroup(gl_panelOutputs.createSequentialGroup()
                                    .addComponent(lblCriticRadius, GroupLayout.PREFERRED_SIZE, 119,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addGap(6))
                            .addGroup(gl_panelOutputs.createSequentialGroup()
                                    .addComponent(lblDiskW, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE,
                                            Short.MAX_VALUE)
                                    .addGap(26)))
                    .addGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING)
                            .addComponent(lblDiskWValue, GroupLayout.PREFERRED_SIZE, 147,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(lblCriticRadiusValue, GroupLayout.PREFERRED_SIZE, 147,
                                    GroupLayout.PREFERRED_SIZE))
                    .addContainerGap(112, Short.MAX_VALUE)));
    gl_panelOutputs
            .setVerticalGroup(gl_panelOutputs.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_panelOutputs.createSequentialGroup()
                            .addComponent(panelTitleOutputs, GroupLayout.PREFERRED_SIZE,
                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(ComponentPlacement.UNRELATED)
                            .addGroup(gl_panelOutputs.createParallelGroup(Alignment.BASELINE)
                                    .addComponent(lblDiskW).addComponent(lblDiskWValue))
                            .addPreferredGap(ComponentPlacement.RELATED)
                            .addGroup(gl_panelOutputs.createParallelGroup(Alignment.BASELINE)
                                    .addComponent(lblCriticRadius, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(lblCriticRadiusValue, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE))
                            .addGap(121)));
    panelOutputs.setLayout(gl_panelOutputs);

    panel_1 = new JPanel();
    panel_1.setBorder(new LineBorder(new Color(0, 0, 0)));
    GroupLayout gl_panel_control = new GroupLayout(panel_control);
    gl_panel_control.setHorizontalGroup(gl_panel_control.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panel_control.createSequentialGroup().addContainerGap().addGroup(gl_panel_control
                    .createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_panel_control.createSequentialGroup()
                            .addGroup(gl_panel_control.createParallelGroup(Alignment.TRAILING)
                                    .addComponent(panelInputs, GroupLayout.PREFERRED_SIZE, 396,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(panelOutputs, Alignment.LEADING, GroupLayout.DEFAULT_SIZE,
                                            396, Short.MAX_VALUE)
                                    .addComponent(panelTiempo, GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE))
                            .addGap(18))
                    .addGroup(gl_panel_control.createSequentialGroup()
                            .addComponent(panel_1, GroupLayout.PREFERRED_SIZE, 397, GroupLayout.PREFERRED_SIZE)
                            .addContainerGap(17, Short.MAX_VALUE)))));
    gl_panel_control.setVerticalGroup(gl_panel_control.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panel_control.createSequentialGroup().addContainerGap()
                    .addComponent(panelInputs, GroupLayout.PREFERRED_SIZE, 202, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panelOutputs, GroupLayout.PREFERRED_SIZE, 103, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panelTiempo, GroupLayout.PREFERRED_SIZE, 210, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED, 15, Short.MAX_VALUE).addComponent(panel_1,
                            GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap()));

    JLabel lblNewLabel = new JLabel("GNU GENERAL PUBLIC LICENSE");
    panel_1.add(lblNewLabel);

    rdbtnCam1 = new JRadioButton("C\u00E1mara Fija");
    rdbtnCam1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            rdbtnCam1Event();
        }
    });
    rdbtnCam1.setSelected(true);

    rdbtnCam2 = new JRadioButton("C\u00E1mara M\u00F3vil");
    rdbtnCam2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            rdbtnCam2Event();
        }
    });

    btnLaunchSimulation = new JButton("Iniciar");
    btnLaunchSimulation.setFont(new Font("Tahoma", Font.PLAIN, 16));
    btnLaunchSimulation.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            btnLaunchSimulationEvent(event);
        }
    });

    btnPauseContinue = new JButton("Pausar");
    btnPauseContinue.setFont(new Font("Tahoma", Font.PLAIN, 16));
    btnPauseContinue.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            btnPauseContinueEvent(event);
        }
    });

    panel = new JPanel();
    panel.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));

    label = new JLabel("Datos de la Simulaci\u00F3n");
    label.setFont(new Font("Tahoma", Font.PLAIN, 14));
    panel.add(label);
    GroupLayout gl_panelTiempo = new GroupLayout(panelTiempo);
    gl_panelTiempo.setHorizontalGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelTiempo.createSequentialGroup().addContainerGap()
                    .addGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING, false)
                            .addComponent(btnPhase1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE,
                                    Short.MAX_VALUE)
                            .addComponent(btnLaunchSimulation, GroupLayout.DEFAULT_SIZE, 176, Short.MAX_VALUE))
                    .addGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING).addGroup(gl_panelTiempo
                            .createSequentialGroup().addGap(52)
                            .addGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING)
                                    .addComponent(rdbtnCam2).addComponent(rdbtnCam1, GroupLayout.PREFERRED_SIZE,
                                            113, GroupLayout.PREFERRED_SIZE)))
                            .addGroup(gl_panelTiempo.createSequentialGroup().addGap(21).addComponent(
                                    btnPauseContinue, GroupLayout.PREFERRED_SIZE, 168,
                                    GroupLayout.PREFERRED_SIZE)))
                    .addContainerGap(47, Short.MAX_VALUE))
            .addComponent(panel, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE));
    gl_panelTiempo.setVerticalGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelTiempo.createSequentialGroup()
                    .addComponent(panel, GroupLayout.PREFERRED_SIZE, 31, GroupLayout.PREFERRED_SIZE).addGap(22)
                    .addGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING)
                            .addGroup(gl_panelTiempo.createSequentialGroup().addComponent(rdbtnCam1)
                                    .addPreferredGap(ComponentPlacement.RELATED).addComponent(rdbtnCam2))
                            .addComponent(btnPhase1, GroupLayout.PREFERRED_SIZE, 58,
                                    GroupLayout.PREFERRED_SIZE))
                    .addGap(18)
                    .addGroup(gl_panelTiempo.createParallelGroup(Alignment.LEADING)
                            .addComponent(btnPauseContinue, GroupLayout.PREFERRED_SIZE, 62,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(btnLaunchSimulation, GroupLayout.PREFERRED_SIZE, 62,
                                    GroupLayout.PREFERRED_SIZE))));
    panelTiempo.setLayout(gl_panelTiempo);

    JLabel LabelBugMass = new JLabel("Masa del Insecto");
    LabelBugMass.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JLabel labelFallRadio = new JLabel("Radio de Ca\u00EDda");
    labelFallRadio.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JLabel labelBugVelocity = new JLabel("Velocidad del Insecto");
    labelBugVelocity.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JLabel labelDiskVelocity = new JLabel("Velocidad del Disco");
    labelDiskVelocity.setFont(new Font("Tahoma", Font.PLAIN, 14));

    JPanel panelTitle = new JPanel();
    panelTitle.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));

    lblFallRadiusValue = new JLabel("10");
    lblFallRadiusValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblBugVelocityValue = new JLabel("1");
    lblBugVelocityValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblVelocityValue = new JLabel("0.5");
    lblVelocityValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblInitMassValue = new JLabel("30");
    lblInitMassValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    sliderBugInitMass = new JSlider();
    sliderBugInitMass.setValue(30);
    sliderBugInitMass.setMinimum(20);
    sliderBugInitMass.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent event) {
            sliderBugInitMassEvent();
        }
    });
    sliderBugInitMass.setMaximum(70);

    sliderFallRadius = new JSlider();
    sliderFallRadius.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            sliderFallRadiusEvent();
        }
    });
    sliderFallRadius.setValue(10);
    sliderFallRadius.setMinorTickSpacing(1);
    sliderFallRadius.setMaximum(20);

    sliderBugVelocity = new JSlider();
    sliderBugVelocity.setValue(10);
    sliderBugVelocity.setMaximum(20);
    sliderBugVelocity.setMinimum(5);
    sliderBugVelocity.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            sliderBugVelocityEvent();
        }
    });
    sliderBugVelocity.setMinorTickSpacing(1);

    sliderDiskVelocity = new JSlider();
    sliderDiskVelocity.setMaximum(10);
    sliderDiskVelocity.setMinimum(1);
    sliderDiskVelocity.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            sliderDiskVelocityEvent();
        }
    });
    sliderDiskVelocity.setValue(5);
    sliderDiskVelocity.setMinorTickSpacing(1);

    JLabel lblCoeficienteDeRozamiento = new JLabel("Coef de Rozamiento");
    lblCoeficienteDeRozamiento.setFont(new Font("Tahoma", Font.PLAIN, 14));

    lblFrictionValue = new JLabel("0.25");
    lblFrictionValue.setFont(new Font("Tahoma", Font.PLAIN, 14));

    sliderFriction = new JSlider();
    sliderFriction.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent arg0) {
            sliderFrictionEvent();
        }
    });
    sliderFriction.setValue(25);
    sliderFriction.setMinorTickSpacing(1);
    sliderFriction.setMinimum(1);
    sliderFriction.setMaximum(90);

    GroupLayout gl_panelInputs = new GroupLayout(panelInputs);
    gl_panelInputs.setHorizontalGroup(gl_panelInputs.createParallelGroup(Alignment.TRAILING)
            .addGroup(gl_panelInputs.createSequentialGroup().addContainerGap()
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.TRAILING, false)
                            .addComponent(labelBugVelocity, Alignment.LEADING, GroupLayout.DEFAULT_SIZE,
                                    GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(LabelBugMass, Alignment.LEADING, GroupLayout.DEFAULT_SIZE,
                                    GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(labelFallRadio, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 120,
                                    Short.MAX_VALUE))
                    .addGap(18)
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                            .addComponent(lblInitMassValue, GroupLayout.PREFERRED_SIZE, 42,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(lblFallRadiusValue, GroupLayout.PREFERRED_SIZE, 56,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(lblBugVelocityValue, GroupLayout.PREFERRED_SIZE, 56,
                                    GroupLayout.PREFERRED_SIZE))
                    .addGap(18)
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                            .addComponent(sliderFallRadius, GroupLayout.PREFERRED_SIZE, 146,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(sliderBugInitMass, GroupLayout.PREFERRED_SIZE, 146,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(sliderBugVelocity, GroupLayout.PREFERRED_SIZE, 146,
                                    GroupLayout.PREFERRED_SIZE)
                            .addComponent(sliderDiskVelocity, GroupLayout.PREFERRED_SIZE, 146,
                                    GroupLayout.PREFERRED_SIZE))
                    .addGap(26))
            .addGroup(gl_panelInputs.createSequentialGroup().addContainerGap()
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.TRAILING)
                            .addComponent(lblCoeficienteDeRozamiento, Alignment.LEADING,
                                    GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE)
                            .addComponent(labelDiskVelocity, GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE))
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING, false)
                            .addGroup(Alignment.TRAILING,
                                    gl_panelInputs.createSequentialGroup()
                                            .addComponent(lblVelocityValue, GroupLayout.PREFERRED_SIZE, 43,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addGap(204))
                            .addGroup(Alignment.TRAILING,
                                    gl_panelInputs.createSequentialGroup()
                                            .addComponent(lblFrictionValue, GroupLayout.PREFERRED_SIZE, 56,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addPreferredGap(ComponentPlacement.RELATED,
                                                    GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                            .addComponent(sliderFriction, GroupLayout.PREFERRED_SIZE, 146,
                                                    GroupLayout.PREFERRED_SIZE)
                                            .addGap(26))))
            .addComponent(panelTitle, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE));
    gl_panelInputs.setVerticalGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_panelInputs.createSequentialGroup()
                    .addComponent(panelTitle, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                            GroupLayout.PREFERRED_SIZE)
                    .addGap(8)
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                            .addGroup(gl_panelInputs.createParallelGroup(Alignment.BASELINE)
                                    .addComponent(LabelBugMass).addComponent(lblInitMassValue,
                                            GroupLayout.PREFERRED_SIZE, 17, GroupLayout.PREFERRED_SIZE))
                            .addComponent(sliderBugInitMass, GroupLayout.PREFERRED_SIZE,
                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                            .addGroup(gl_panelInputs.createParallelGroup(Alignment.BASELINE)
                                    .addComponent(labelFallRadio).addComponent(lblFallRadiusValue,
                                            GroupLayout.PREFERRED_SIZE, 17, GroupLayout.PREFERRED_SIZE))
                            .addComponent(sliderFallRadius, GroupLayout.PREFERRED_SIZE,
                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                    .addGap(11)
                    .addGroup(
                            gl_panelInputs.createParallelGroup(Alignment.LEADING).addComponent(labelBugVelocity)
                                    .addComponent(lblBugVelocityValue, GroupLayout.PREFERRED_SIZE, 17,
                                            GroupLayout.PREFERRED_SIZE)
                                    .addComponent(sliderBugVelocity, GroupLayout.PREFERRED_SIZE,
                                            GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(ComponentPlacement.UNRELATED)
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                            .addGroup(gl_panelInputs.createParallelGroup(Alignment.BASELINE)
                                    .addComponent(labelDiskVelocity).addComponent(lblVelocityValue,
                                            GroupLayout.PREFERRED_SIZE, 17, GroupLayout.PREFERRED_SIZE))
                            .addComponent(sliderDiskVelocity, GroupLayout.PREFERRED_SIZE,
                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.LEADING)
                            .addGroup(gl_panelInputs.createSequentialGroup().addGap(12)
                                    .addGroup(gl_panelInputs.createParallelGroup(Alignment.BASELINE)
                                            .addComponent(lblCoeficienteDeRozamiento,
                                                    GroupLayout.PREFERRED_SIZE, 17, GroupLayout.PREFERRED_SIZE)
                                            .addComponent(lblFrictionValue, GroupLayout.PREFERRED_SIZE, 17,
                                                    GroupLayout.PREFERRED_SIZE)))
                            .addGroup(gl_panelInputs.createSequentialGroup()
                                    .addPreferredGap(ComponentPlacement.UNRELATED).addComponent(sliderFriction,
                                            GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                                            GroupLayout.PREFERRED_SIZE)))
                    .addGap(47)));

    JLabel lblDatosDeEntrada = new JLabel("Datos de Entrada");
    lblDatosDeEntrada.setFont(new Font("Tahoma", Font.PLAIN, 14));
    panelTitle.add(lblDatosDeEntrada);
    panelInputs.setLayout(gl_panelInputs);
    panel_control.setLayout(gl_panel_control);

    JPanel panel_visualizar = new JPanel();

    GroupLayout groupLayout = new GroupLayout(getContentPane());
    groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.LEADING)
            .addGroup(groupLayout.createSequentialGroup().addContainerGap()
                    .addComponent(panel_control, GroupLayout.PREFERRED_SIZE, 432, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel_visualizar, GroupLayout.PREFERRED_SIZE, 560, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(32, Short.MAX_VALUE)));
    groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
            .addGroup(groupLayout.createSequentialGroup().addContainerGap()
                    .addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
                            .addComponent(panel_visualizar, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 598,
                                    Short.MAX_VALUE)
                            .addComponent(panel_control, Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 598,
                                    Short.MAX_VALUE))
                    .addContainerGap()));
    GridBagLayout gbl_panel_visualizar = new GridBagLayout();
    gbl_panel_visualizar.columnWidths = new int[] { 0, 0 };
    gbl_panel_visualizar.rowHeights = new int[] { 0, 0, 0 };
    gbl_panel_visualizar.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
    gbl_panel_visualizar.rowWeights = new double[] { 1.0, 1.0, Double.MIN_VALUE };
    panel_visualizar.setLayout(gbl_panel_visualizar);

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    GridBagConstraints gbc_tabbedPane = new GridBagConstraints();
    gbc_tabbedPane.gridheight = 2;
    gbc_tabbedPane.fill = GridBagConstraints.BOTH;
    gbc_tabbedPane.gridx = 0;
    gbc_tabbedPane.gridy = 0;
    panel_visualizar.add(tabbedPane, gbc_tabbedPane);

    panelSimulation = new JPanelGrafica();
    tabbedPane.addTab("Simulacin", null, panelSimulation, null);
    panelSimulation.setBackground(Color.WHITE);

    getContentPane().setLayout(groupLayout);
}

From source file:org.fhaes.jsea.JSEAFrame.java

/**
 * Setup the GUI components/*  ww w .j av  a  2s  .c  o  m*/
 */
private void setupGui() {

    setTitle("jSEA - Superposed Epoch Analysis");

    getContentPane().setLayout(new MigLayout("", "[1200px,grow,fill]", "[][600px,grow,fill]"));

    initActions();
    setupMenu();
    setupToolbar();

    this.setIconImage(Builder.getApplicationIcon());
    {
        JSplitPane splitPane = new JSplitPane();
        splitPane.setOneTouchExpandable(true);
        getContentPane().add(splitPane, "cell 0 1,alignx left,aligny top");
        splitPane.setLeftComponent(contentPanel);
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPanel.setLayout(new MigLayout("", "[grow,fill]", "[78.00][][][grow][]"));
        {
            JPanel panel = new JPanel();
            panel.setBorder(
                    new TitledBorder(null, "Input Files", TitledBorder.LEADING, TitledBorder.TOP, null, null));
            contentPanel.add(panel, "cell 0 0,grow");
            panel.setLayout(new MigLayout("", "[][][grow][]", "[][]"));
            {
                JLabel lblContinuousTimeSeries = new JLabel("Continuous time series file:");
                panel.add(lblContinuousTimeSeries, "cell 0 0,alignx trailing");
            }
            {
                HelpTipButton label = new HelpTipButton(
                        "Continuous time series data files should be two column comma seperated (CSV) text files.  Column one should contains the years (in sequence), and column two should contain the data values.  If there are header lines or comments in the file, these lines should beginning with a *");
                panel.add(label, "cell 1 0,alignx trailing");
            }
            {
                txtTimeSeriesFile = new JTextField();
                txtwrapper = new TextComponentWrapper(txtTimeSeriesFile,
                        PrefKey.JSEA_CONTINUOUS_TIME_SERIES_FILE, "");
                txtTimeSeriesFile.setEditable(true);
                panel.add(txtTimeSeriesFile, "cell 2 0,growx");
                txtTimeSeriesFile.setColumns(10);
            }
            {
                btnTimeSeriesFile = new JButton();
                btnTimeSeriesFile.setIcon(Builder.getImageIcon("fileopen16.png"));
                btnTimeSeriesFile.setActionCommand("TimeSeriesFileBrowse");
                btnTimeSeriesFile.addActionListener(this);
                btnTimeSeriesFile.setPreferredSize(new Dimension(25, 25));
                btnTimeSeriesFile.setMaximumSize(new Dimension(25, 25));
                btnTimeSeriesFile.putClientProperty("JButton.buttonType", "segmentedTextured");
                btnTimeSeriesFile.putClientProperty("JButton.segmentPosition", "middle");

                panel.add(btnTimeSeriesFile, "cell 3 0");
            }
            {
                JLabel lblEventListFile = new JLabel("Event list file:");
                panel.add(lblEventListFile, "cell 0 1,alignx trailing");
            }
            {
                HelpTipButton helpTipButton = new HelpTipButton(
                        "Event data files should be a text file with a single column of integer year values.  If there are any header or comment lines, these should begin with a *");
                panel.add(helpTipButton, "cell 1 1,alignx trailing");
            }
            {
                txtEventListFile = new JTextField();
                new TextComponentWrapper(txtEventListFile, PrefKey.JSEA_EVENT_LIST_FILE, "");
                txtEventListFile.setEditable(false);
                panel.add(txtEventListFile, "cell 2 1,growx");
                txtEventListFile.setColumns(10);
            }
            {
                btnEventListFile = new JButton();
                btnEventListFile.setIcon(Builder.getImageIcon("fileopen16.png"));
                btnEventListFile.setActionCommand("EventListFileBrowse");
                btnEventListFile.addActionListener(this);
                btnEventListFile.setPreferredSize(new Dimension(25, 25));
                btnEventListFile.setMaximumSize(new Dimension(25, 25));
                btnEventListFile.putClientProperty("JButton.buttonType", "segmentedTextured");
                btnEventListFile.putClientProperty("JButton.segmentPosition", "middle");
                panel.add(btnEventListFile, "cell 3 1");
            }
        }
        {
            JPanel panel = new JPanel();
            panel.setBorder(new TitledBorder(null, "Window, Simulation and Statistics", TitledBorder.LEADING,
                    TitledBorder.TOP, null, null));
            contentPanel.add(panel, "cell 0 1,grow");
            panel.setLayout(new MigLayout("", "[right][][fill][10px:10px:10px][right][][90.00,grow,fill]",
                    "[grow][][][]"));
            {
                JLabel lblYears = new JLabel("Years to analyse:");
                panel.add(lblYears, "cell 0 0");
            }
            {
                HelpTipButton helpTipButton = new HelpTipButton(
                        "Specify which years from the dataset to analyse.");
                panel.add(helpTipButton, "cell 1 0");
            }
            {
                JPanel panel_1 = new JPanel();
                panel.add(panel_1, "cell 2 0 5 1,grow");
                panel_1.setLayout(new MigLayout("fill, insets 0", "[80px:80px][][80px:80px,fill][grow]", "[]"));
                {
                    spnFirstYear = new JSpinner();
                    spnFirstYear.setEnabled(false);
                    panel_1.add(spnFirstYear, "cell 0 0,growx");
                    spnFirstYear.setModel(new SpinnerNumberModel(new Integer(0), null, null, new Integer(1)));
                    spnFirstYear.setEditor(new JSpinner.NumberEditor(spnFirstYear, "#"));
                    new SpinnerWrapper(spnFirstYear, PrefKey.JSEA_FIRST_YEAR, 0);
                }
                {
                    JLabel lblTo = new JLabel("-");
                    panel_1.add(lblTo, "cell 1 0");
                }
                {
                    spnLastYear = new JSpinner();
                    spnLastYear.setEnabled(false);
                    panel_1.add(spnLastYear, "cell 2 0");
                    spnLastYear.setModel(new SpinnerNumberModel(new Integer(2020), null, null, new Integer(1)));
                    spnLastYear.setEditor(new JSpinner.NumberEditor(spnLastYear, "#"));
                    new SpinnerWrapper(spnLastYear, PrefKey.JSEA_LAST_YEAR, 2020);
                }
                {
                    chkAllYears = new JCheckBox("all years in series");
                    chkAllYears.setSelected(true);
                    chkAllYears.setActionCommand("AllYearsCheckbox");
                    chkAllYears.addActionListener(this);
                    panel_1.add(chkAllYears, "cell 3 0");
                }
            }
            {
                JLabel lblLagsPriorTo = new JLabel("Lags prior to event:");
                panel.add(lblLagsPriorTo, "cell 0 1");
            }
            {
                HelpTipButton helpTipButton = new HelpTipButton("");
                panel.add(helpTipButton, "cell 1 1");
            }
            {
                spnLagsPrior = new JSpinner();
                new SpinnerWrapper(spnLagsPrior, PrefKey.JSEA_LAGS_PRIOR_TO_EVENT, 6);
                panel.add(spnLagsPrior, "cell 2 1,growx");
                // spnLagsPrior.setModel(new SpinnerNumberModel(6, 1, 100, 1));
                spnLagsPrior.addChangeListener(new ChangeListener() {

                    @Override
                    public void stateChanged(ChangeEvent e) {

                        segmentationPanel.table.tableModel.clearSegments();
                        validateForm();
                    }
                });
            }
            {
                JLabel lblSimulationsToRun = new JLabel("Simulations:");
                panel.add(lblSimulationsToRun, "cell 4 1");
            }
            {
                HelpTipButton helpTipButton = new HelpTipButton(
                        "Number of simulations to run.  Increasing the number of simulations increases the analysis time.");
                panel.add(helpTipButton, "cell 5 1");
            }
            {
                spnSimulationsToRun = new JSpinner();
                new SpinnerWrapper(spnSimulationsToRun, PrefKey.JSEA_SIMULATION_COUNT, 1000);
                panel.add(spnSimulationsToRun, "cell 6 1");
                spnSimulationsToRun.setModel(new SpinnerNumberModel(1000, 1, 10096, 1));
            }
            {
                JLabel lblLagsFollowingThe = new JLabel("Lags following the event:");
                panel.add(lblLagsFollowingThe, "cell 0 2");
            }
            {
                HelpTipButton helpTipButton = new HelpTipButton("");
                panel.add(helpTipButton, "cell 1 2");
            }
            {
                spnLagsAfter = new JSpinner();
                new SpinnerWrapper(spnLagsAfter, PrefKey.JSEA_LAGS_AFTER_EVENT, 4);
                panel.add(spnLagsAfter, "cell 2 2,growx");
                spnLagsAfter.addChangeListener(new ChangeListener() {

                    @Override
                    public void stateChanged(ChangeEvent e) {

                        segmentationPanel.table.tableModel.clearSegments();
                        validateForm();
                    }
                });
            }
            {
                JLabel lblSeedNumber = new JLabel("Seed number:");
                panel.add(lblSeedNumber, "cell 4 2");
            }
            {
                HelpTipButton helpTipButton = new HelpTipButton(
                        "The analysis requires a pseudo-random component which is seeded with the seed number (a large integer value).  Running analyses with the same seed number enables produces the same results.  You can leave the seed as the default number unless you specifically want to generate results from a different randomised pool.");
                panel.add(helpTipButton, "cell 5 2");
            }
            {
                spnSeedNumber = new JSpinner();
                new SpinnerWrapper(spnSeedNumber, PrefKey.JSEA_SEED_NUMBER, 30188);
                panel.add(spnSeedNumber, "cell 6 2");
                spnSeedNumber.setModel(new SpinnerNumberModel(30188, 10000, 1000000, 1));
            }
            {
                JLabel lblIncludeIncompleteWindow = new JLabel("Include incomplete epoch:");
                panel.add(lblIncludeIncompleteWindow, "cell 0 3");
            }
            {
                HelpTipButton helpTipButton = new HelpTipButton("");
                panel.add(helpTipButton, "cell 1 3");
            }
            {
                chkIncludeIncompleteWindow = new JCheckBox("");
                new CheckBoxWrapper(chkIncludeIncompleteWindow, PrefKey.JSEA_INCLUDE_INCOMPLETE_WINDOW, false);

                panel.add(chkIncludeIncompleteWindow, "cell 2 3");
            }
            {
                JLabel lblPvalue = new JLabel("p-value:");
                panel.add(lblPvalue, "cell 4 3");
            }
            {
                HelpTipButton helpTipButton = new HelpTipButton(
                        "The cutoff value to use for statistical significance");
                panel.add(helpTipButton, "cell 5 3,alignx trailing");
            }
            {
                cbxPValue = new JComboBox();
                panel.add(cbxPValue, "cell 6 3");
                cbxPValue.setModel(new DefaultComboBoxModel(new Double[] { 0.05, 0.01, 0.001 }));
            }
        }
        {
            JPanel panel = new JPanel();
            panel.setBorder(new TitledBorder(null, "Chart Options", TitledBorder.LEADING, TitledBorder.TOP,
                    null, null));
            contentPanel.add(panel, "cell 0 2,grow");

            panel.setLayout(new MigLayout("", "[right][][grow]", "[][]"));
            {
                JLabel lblTitleOfChart = new JLabel("Title of chart:");
                panel.add(lblTitleOfChart, "cell 0 0,alignx trailing");
            }
            {
                HelpTipButton helpTipButton = new HelpTipButton(
                        "Title to use on the chart.  The placeholder {segment} is replaced with the years of the segment being plotted.");
                panel.add(helpTipButton, "cell 1 0,alignx trailing");
            }
            {
                txtChartTitle = new JTextField();
                txtChartTitle.setToolTipText("<html>Title to be displayed on the<br/>" + "chart output");
                new TextComponentWrapper(txtChartTitle, PrefKey.JSEA_CHART_TITLE, "Chart title {segment}");
                panel.add(txtChartTitle, "cell 2 0,growx,aligny top");
                txtChartTitle.setColumns(10);
            }
            {
                JLabel lblYaxisLabel = new JLabel("Continuous series (y-axis) label");
                panel.add(lblYaxisLabel, "cell 0 1,alignx trailing");
            }
            {
                txtYAxisLabel = new JTextField();
                txtYAxisLabel
                        .setToolTipText("<html>Label to be displayed on the<br/> " + "continuous series axis");
                new TextComponentWrapper(txtYAxisLabel, PrefKey.JSEA_YAXIS_LABEL, "Y Axis");
                panel.add(txtYAxisLabel, "cell 2 1,growx");
                txtYAxisLabel.setColumns(10);
            }
        }
        {
            // Segmentation implementation used from FHSampleSize
            segmentationPanel = new SegmentationPanel();
            segmentationPanel.chkSegmentation.setText("Process subset or segments of events?");
            segmentationPanel.chkSegmentation.setActionCommand("SegmentationMode");
            segmentationPanel.chkSegmentation.addActionListener(this);
            contentPanel.add(segmentationPanel, "cell 0 3,grow");
        }
        {
            tabbedPane = new JTabbedPane(JTabbedPane.BOTTOM);
            splitPane.setRightComponent(tabbedPane);
            {
                summaryPanel = new JPanel();
                tabbedPane.addTab("Summary ", Builder.getImageIcon("info.png"), summaryPanel, null);
                summaryPanel.setLayout(new BorderLayout(0, 0));
                {
                    scrollPane = new JScrollPane();
                    summaryPanel.add(scrollPane);
                    {
                        txtSummary = new JTextArea();
                        txtSummary.setEditable(false);
                        scrollPane.setViewportView(txtSummary);
                        JMenuItem mntmCopy = new JMenuItem(actionCopy);
                        JPopupMenu popup = new JPopupMenu();
                        addPopup(scrollPane, popup);
                        popup.add(mntmCopy);
                    }
                }
            }
            {
                dataPanel = new JPanel();
                tabbedPane.addTab("Data ", Builder.getImageIcon("table.png"), dataPanel, null);
                dataPanel.setLayout(new MigLayout("", "[grow,fill]", "[grow]"));
                {
                    JSplitPane splitPaneDataTables = new JSplitPane();
                    splitPaneDataTables.setResizeWeight(0.5);
                    splitPaneDataTables.setOneTouchExpandable(true);
                    splitPaneDataTables.setOrientation(JSplitPane.VERTICAL_SPLIT);
                    dataPanel.add(splitPaneDataTables, "cell 0 0,grow");
                    {
                        JPanel panel = new JPanel();
                        splitPaneDataTables.setLeftComponent(panel);
                        panel.setBorder(new TitledBorder(null, "Actual key events", TitledBorder.LEADING,
                                TitledBorder.TOP, null, null));
                        panel.setLayout(new MigLayout("", "[227.00px,grow,fill]", "[68.00px,grow,fill]"));
                        {
                            JScrollPane scrollPane = new JScrollPane();
                            panel.add(scrollPane, "cell 0 0,grow");
                            {
                                tblActual = new JXTable();
                                adapterActualTable = new JTableSpreadsheetByRowAdapter(tblActual);
                                scrollPane.setViewportView(tblActual);
                                tblActual.setSortable(false);
                                JMenuItem mntmCopy = new JMenuItem(actionCopy);
                                JPopupMenu popup = new JPopupMenu();
                                addPopup(tblActual, popup);
                                popup.add(mntmCopy);
                            }
                        }
                    }
                    {
                        JPanel panel = new JPanel();
                        splitPaneDataTables.setRightComponent(panel);
                        panel.setBorder(new TitledBorder(null, "Simulation results", TitledBorder.LEADING,
                                TitledBorder.TOP, null, null));
                        panel.setLayout(new MigLayout("", "[grow,fill]", "[grow,fill]"));
                        {
                            JScrollPane scrollPane = new JScrollPane();
                            panel.add(scrollPane, "cell 0 0,grow");
                            {
                                tblSimulation = new JXTable();
                                adapterSimulationTable = new JTableSpreadsheetByRowAdapter(tblSimulation);
                                scrollPane.setViewportView(tblSimulation);
                                tblSimulation.setSortable(false);
                                JMenuItem mntmCopy = new JMenuItem(actionCopy);
                                JPopupMenu popup = new JPopupMenu();
                                addPopup(tblSimulation, popup);
                                popup.add(mntmCopy);
                            }
                        }
                    }
                    splitPaneDataTables.setDividerLocation(0.5f);
                }
            }
            {
                chartPanel = new JPanel();
                tabbedPane.addTab("Chart ", Builder.getImageIcon("barchart.png"), chartPanel, null);
                chartPanel.setLayout(new MigLayout("", "[][grow]", "[][grow]"));
                {
                    segmentComboBox = new JComboBox();
                    segmentComboBox.addItemListener(new ItemListener() {

                        @Override
                        public void itemStateChanged(ItemEvent arg0) {

                            if (segmentComboBox.getItemCount() > 0) {
                                barChart = new JSEABarChart(
                                        jsea.getChartList().get(segmentComboBox.getSelectedIndex()));
                                barChart.setMaximumDrawHeight(MAX_DRAW_HEIGHT);
                                barChart.setMaximumDrawWidth(MAX_DRAW_WIDTH);
                                chartPanel.removeAll();
                                chartPanel.add(plotSegmentLabel, "cell 0 0,alignx center,aligny center");
                                chartPanel.add(segmentComboBox, "cell 1 0,growx,aligny center");
                                chartPanel.add(barChart, "cell 0 1 2 1,grow");
                                chartPanel.revalidate();
                                chartPanel.repaint();
                            }
                        }
                    });
                    {
                        plotSegmentLabel = new JLabel("Plot Segment: ");
                        chartPanel.add(plotSegmentLabel, "cell 0 0,alignx center,aligny center");
                    }
                    chartPanel.add(segmentComboBox, "cell 1 0,growx,aligny center");
                }
            }
        }
    }

    pack();
    validateForm();
    setAnalysisAvailable(false);
    setExtendedState(this.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}

From source file:org.coronastreet.gpxconverter.AccountManager.java

public AccountManager(MainWindow window) {
    setTitle("Account Settings");
    setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    setBounds(100, 100, 450, 199);//  w  w  w .  jav  a 2s.  c o m
    frmAccounts = new JPanel();
    frmAccounts.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(frmAccounts);
    frmAccounts.setLayout(null);

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    tabbedPane.setBounds(5, 5, 424, 118);
    frmAccounts.add(tabbedPane);

    JPanel stravaPanel = new JPanel();
    stravaPanel.setLayout(null);

    tabbedPane.addTab("Strava", stravaPanel);

    strava_username = new JTextField();
    strava_username.setBounds(79, 11, 235, 20);
    stravaPanel.add(strava_username);
    strava_username.setColumns(10);

    JLabel lblUsername = new JLabel("Username:");
    lblUsername.setBounds(10, 14, 69, 14);
    stravaPanel.add(lblUsername);

    JLabel lblPassword = new JLabel("Password:");
    lblPassword.setBounds(10, 45, 69, 14);
    stravaPanel.add(lblPassword);

    strava_password = new JPasswordField();
    strava_password.setColumns(10);
    strava_password.setBounds(79, 42, 235, 20);
    stravaPanel.add(strava_password);

    JPanel rwgpsPanel = new JPanel();
    rwgpsPanel.setLayout(null);
    tabbedPane.addTab("RideWithGPS", rwgpsPanel);

    JLabel label = new JLabel("Username:");
    label.setBounds(10, 14, 69, 14);
    rwgpsPanel.add(label);

    rwgps_username = new JTextField();
    rwgps_username.setColumns(10);
    rwgps_username.setBounds(79, 11, 235, 20);
    rwgpsPanel.add(rwgps_username);

    rwgps_password = new JPasswordField();
    rwgps_password.setColumns(10);
    rwgps_password.setBounds(79, 42, 235, 20);
    rwgpsPanel.add(rwgps_password);

    JLabel label_1 = new JLabel("Password:");
    label_1.setBounds(10, 45, 69, 14);
    rwgpsPanel.add(label_1);

    JPanel garminPanel = new JPanel();
    garminPanel.setLayout(null);
    tabbedPane.addTab("Garmin Connect", garminPanel);

    JLabel label_2 = new JLabel("Username:");
    label_2.setBounds(10, 14, 69, 14);
    garminPanel.add(label_2);

    garmin_username = new JTextField();
    garmin_username.setColumns(10);
    garmin_username.setBounds(79, 11, 235, 20);
    garminPanel.add(garmin_username);

    garmin_password = new JPasswordField();
    garmin_password.setColumns(10);
    garmin_password.setBounds(79, 42, 235, 20);
    garminPanel.add(garmin_password);

    JLabel label_3 = new JLabel("Password:");
    label_3.setBounds(10, 45, 69, 14);
    garminPanel.add(label_3);

    loadAccountPrefs();

    JButton btnSave = new JButton("SAVE");
    btnSave.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            saveAccountInfo();
        }
    });
    btnSave.setBounds(106, 127, 89, 23);
    frmAccounts.add(btnSave);

    JButton btnCancel = new JButton("CANCEL");
    btnCancel.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            cancel();
        }
    });
    btnCancel.setBounds(242, 127, 89, 23);
    frmAccounts.add(btnCancel);

}

From source file:org.executequery.gui.browser.ConnectionPanel.java

private void init() {

    // ---------------------------------
    // create the basic props panel

    // initialise the fields
    nameField = createTextField();//from  ww w.ja v  a2 s  .c  o m
    passwordField = createPasswordField();
    hostField = createTextField();
    portField = createNumberTextField();
    sourceField = createMatchedWidthTextField();
    userField = createTextField();
    urlField = createMatchedWidthTextField();

    nameField.addFocusListener(new ConnectionNameFieldListener(this));

    savePwdCheck = ActionUtilities.createCheckBox("Store Password", "setStorePassword");
    encryptPwdCheck = ActionUtilities.createCheckBox("Encrypt Password", "setEncryptPassword");

    savePwdCheck.addActionListener(this);
    encryptPwdCheck.addActionListener(this);

    // retrieve the drivers
    buildDriversList();

    // ---------------------------------
    // add the basic connection fields

    TextFieldPanel mainPanel = new TextFieldPanel(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.insets = new Insets(10, 10, 10, 10);
    gbc.gridy = 0;
    gbc.gridx = 0;

    statusLabel = new DefaultFieldLabel();
    addLabelFieldPair(mainPanel, "Status:", statusLabel, "Current connection status", gbc);

    gbc.insets.bottom = 5;
    addLabelFieldPair(mainPanel, "Connection Name:", nameField, "A friendly name for this connection", gbc);

    addLabelFieldPair(mainPanel, "User Name:", userField, "Login user name", gbc);

    addLabelFieldPair(mainPanel, "Password:", passwordField, "Login password", gbc);

    JButton showPassword = new LinkButton("Show Password");
    showPassword.setActionCommand("showPassword");
    showPassword.addActionListener(this);

    JPanel passwordOptionsPanel = new JPanel(new GridBagLayout());
    addComponents(passwordOptionsPanel,
            new ComponentToolTipPair[] {
                    new ComponentToolTipPair(savePwdCheck,
                            "Store the password with the connection information"),
                    new ComponentToolTipPair(encryptPwdCheck, "Encrypt the password when saving"),
                    new ComponentToolTipPair(showPassword, "Show the password in plain text") });

    gbc.gridy++;
    gbc.gridx = 1;
    gbc.weightx = 1.0;
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    mainPanel.add(passwordOptionsPanel, gbc);

    addLabelFieldPair(mainPanel, "Host Name:", hostField, "Server host name or IP address", gbc);

    addLabelFieldPair(mainPanel, "Port:", portField, "Database port number", gbc);

    addLabelFieldPair(mainPanel, "Data Source:", sourceField, "Data source name", gbc);

    addLabelFieldPair(mainPanel, "JDBC URL:", urlField, "The full JDBC URL for this connection (optional)",
            gbc);

    addDriverFields(mainPanel, gbc);

    connectButton = createButton("Connect", CONNECT_ACTION_COMMAND, 'T');
    disconnectButton = createButton("Disconnect", "disconnect", 'D');

    JPanel buttons = new JPanel(new GridBagLayout());
    gbc.gridy++;
    gbc.gridx = 0;
    gbc.insets.top = 5;
    gbc.insets.left = 0;
    gbc.insets.right = 10;
    gbc.gridwidth = 1;
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    gbc.anchor = GridBagConstraints.NORTHEAST;
    gbc.fill = GridBagConstraints.NONE;
    buttons.add(connectButton, gbc);
    gbc.gridx++;
    gbc.weightx = 0;
    buttons.add(disconnectButton, gbc);

    gbc.insets.right = 0;
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    mainPanel.add(buttons, gbc);

    // ---------------------------------
    // create the advanced panel

    model = new JdbcPropertiesTableModel();
    JTable table = new DefaultTable(model);
    table.getTableHeader().setReorderingAllowed(false);

    TableColumnModel tcm = table.getColumnModel();

    TableColumn column = tcm.getColumn(2);
    column.setCellRenderer(new DeleteButtonRenderer());
    column.setCellEditor(new DeleteButtonEditor(table, new JCheckBox()));
    column.setMaxWidth(24);
    column.setMinWidth(24);

    JScrollPane scroller = new JScrollPane(table);

    // advanced jdbc properties
    JPanel advPropsPanel = new JPanel(new GridBagLayout());
    advPropsPanel.setBorder(BorderFactory.createTitledBorder("JDBC Properties"));
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.gridwidth = 1;
    gbc.insets.top = 0;
    gbc.insets.left = 10;
    gbc.insets.right = 10;
    gbc.weighty = 0;
    gbc.weightx = 1.0;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.anchor = GridBagConstraints.NORTHWEST;
    advPropsPanel.add(new DefaultFieldLabel("Enter any key/value pair properties for this connection"), gbc);
    gbc.gridy++;
    advPropsPanel.add(
            new DefaultFieldLabel("Refer to the relevant JDBC driver documentation for possible entries"), gbc);
    gbc.gridy++;
    gbc.insets.bottom = 10;
    gbc.weighty = 1.0;
    gbc.fill = GridBagConstraints.BOTH;
    advPropsPanel.add(scroller, gbc);

    // transaction isolation
    txApplyButton = WidgetFactory.createInlineFieldButton("Apply", "transactionLevelChanged");
    txApplyButton.setToolTipText("Apply this level to all open connections of this type");
    txApplyButton.setEnabled(false);
    txApplyButton.addActionListener(this);

    // add a dummy select value to the tx levels
    String[] txLevels = new String[Constants.TRANSACTION_LEVELS.length + 1];
    txLevels[0] = "Database Default";
    for (int i = 1; i < txLevels.length; i++) {
        txLevels[i] = Constants.TRANSACTION_LEVELS[i - 1];
    }
    txCombo = WidgetFactory.createComboBox(txLevels);

    JPanel advTxPanel = new JPanel(new GridBagLayout());
    advTxPanel.setBorder(BorderFactory.createTitledBorder("Transaction Isolation"));
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.insets.top = 0;
    gbc.insets.left = 10;
    gbc.insets.right = 10;
    gbc.insets.bottom = 5;
    gbc.weighty = 0;
    gbc.weightx = 1.0;
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.anchor = GridBagConstraints.NORTHWEST;
    advTxPanel.add(new DefaultFieldLabel("Default transaction isolation level for this connection"), gbc);
    gbc.gridy++;
    gbc.insets.bottom = 10;
    advTxPanel.add(
            new DefaultFieldLabel(
                    "Note: the selected isolation level " + "will apply to ALL open connections of this type."),
            gbc);
    gbc.gridy++;
    gbc.gridx = 0;
    gbc.gridwidth = 1;
    gbc.insets.top = 0;
    gbc.insets.left = 10;
    gbc.weightx = 0;
    advTxPanel.add(new DefaultFieldLabel("Isolation Level:"), gbc);
    gbc.gridx = 1;
    gbc.insets.left = 5;
    gbc.weightx = 1.0;
    gbc.insets.right = 5;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    advTxPanel.add(txCombo, gbc);
    gbc.gridx = 2;
    gbc.weightx = 0;
    gbc.insets.left = 0;
    gbc.insets.right = 10;
    advTxPanel.add(txApplyButton, gbc);

    JPanel advancedPanel = new JPanel(new BorderLayout());
    advancedPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    advancedPanel.add(advPropsPanel, BorderLayout.CENTER);
    advancedPanel.add(advTxPanel, BorderLayout.SOUTH);

    JScrollPane scrollPane = new JScrollPane(mainPanel);
    scrollPane.setBorder(null);

    sshTunnelConnectionPanel = new SSHTunnelConnectionPanel();

    tabPane = new JTabbedPane(JTabbedPane.BOTTOM);
    tabPane.addTab("Basic", scrollPane);
    tabPane.addTab("Advanced", advancedPanel);
    tabPane.addTab("SSH Tunnel", sshTunnelConnectionPanel);

    tabPane.addChangeListener(this);

    add(tabPane, BorderLayout.CENTER);

    EventMediator.registerListener(this);
}

From source file:org.jtrfp.trcl.gui.ConfigWindow.java

public ConfigWindow() {
    setTitle("Settings");
    setSize(340, 540);//from   w  w w. j ava2s .c o m
    if (config == null)
        config = new TRConfiguration();
    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    getContentPane().add(tabbedPane, BorderLayout.CENTER);

    JPanel generalTab = new JPanel();
    tabbedPane.addTab("General",
            new ImageIcon(ConfigWindow.class
                    .getResource("/org/freedesktop/tango/22x22/mimetypes/application-x-executable.png")),
            generalTab, null);
    GridBagLayout gbl_generalTab = new GridBagLayout();
    gbl_generalTab.columnWidths = new int[] { 0, 0 };
    gbl_generalTab.rowHeights = new int[] { 0, 188, 222, 0 };
    gbl_generalTab.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
    gbl_generalTab.rowWeights = new double[] { 0.0, 1.0, 0.0, Double.MIN_VALUE };
    generalTab.setLayout(gbl_generalTab);

    JPanel settingsLoadSavePanel = new JPanel();
    GridBagConstraints gbc_settingsLoadSavePanel = new GridBagConstraints();
    gbc_settingsLoadSavePanel.insets = new Insets(0, 0, 5, 0);
    gbc_settingsLoadSavePanel.anchor = GridBagConstraints.WEST;
    gbc_settingsLoadSavePanel.gridx = 0;
    gbc_settingsLoadSavePanel.gridy = 0;
    generalTab.add(settingsLoadSavePanel, gbc_settingsLoadSavePanel);
    settingsLoadSavePanel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null),
            "Overall Settings", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    FlowLayout flowLayout_1 = (FlowLayout) settingsLoadSavePanel.getLayout();
    flowLayout_1.setAlignment(FlowLayout.LEFT);

    JButton btnSave = new JButton("Export...");
    btnSave.setToolTipText("Export these settings to an external file");
    settingsLoadSavePanel.add(btnSave);
    btnSave.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            exportSettings();
        }
    });

    JButton btnLoad = new JButton("Import...");
    btnLoad.setToolTipText("Import an external settings file");
    settingsLoadSavePanel.add(btnLoad);
    btnLoad.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            importSettings();
        }
    });

    JButton btnConfigReset = new JButton("Reset");
    btnConfigReset.setToolTipText("Reset all settings to defaults");
    settingsLoadSavePanel.add(btnConfigReset);
    btnConfigReset.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            defaultSettings();
        }
    });

    JPanel registeredPODsPanel = new JPanel();
    registeredPODsPanel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null),
            "Registered PODs", TitledBorder.LEFT, TitledBorder.TOP, null, null));
    GridBagConstraints gbc_registeredPODsPanel = new GridBagConstraints();
    gbc_registeredPODsPanel.insets = new Insets(0, 0, 5, 0);
    gbc_registeredPODsPanel.fill = GridBagConstraints.BOTH;
    gbc_registeredPODsPanel.gridx = 0;
    gbc_registeredPODsPanel.gridy = 1;
    generalTab.add(registeredPODsPanel, gbc_registeredPODsPanel);
    GridBagLayout gbl_registeredPODsPanel = new GridBagLayout();
    gbl_registeredPODsPanel.columnWidths = new int[] { 272, 0 };
    gbl_registeredPODsPanel.rowHeights = new int[] { 76, 0, 0 };
    gbl_registeredPODsPanel.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
    gbl_registeredPODsPanel.rowWeights = new double[] { 1.0, 1.0, Double.MIN_VALUE };
    registeredPODsPanel.setLayout(gbl_registeredPODsPanel);

    JPanel podListPanel = new JPanel();
    GridBagConstraints gbc_podListPanel = new GridBagConstraints();
    gbc_podListPanel.insets = new Insets(0, 0, 5, 0);
    gbc_podListPanel.fill = GridBagConstraints.BOTH;
    gbc_podListPanel.gridx = 0;
    gbc_podListPanel.gridy = 0;
    registeredPODsPanel.add(podListPanel, gbc_podListPanel);
    podListPanel.setLayout(new BorderLayout(0, 0));

    JScrollPane podListScrollPane = new JScrollPane();
    podListPanel.add(podListScrollPane, BorderLayout.CENTER);

    podList = new JList(podLM);
    podList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    podListScrollPane.setViewportView(podList);

    JPanel podListOpButtonPanel = new JPanel();
    podListOpButtonPanel.setBorder(null);
    GridBagConstraints gbc_podListOpButtonPanel = new GridBagConstraints();
    gbc_podListOpButtonPanel.anchor = GridBagConstraints.NORTH;
    gbc_podListOpButtonPanel.gridx = 0;
    gbc_podListOpButtonPanel.gridy = 1;
    registeredPODsPanel.add(podListOpButtonPanel, gbc_podListOpButtonPanel);
    FlowLayout flowLayout = (FlowLayout) podListOpButtonPanel.getLayout();
    flowLayout.setAlignment(FlowLayout.LEFT);

    JButton addPodButton = new JButton("Add...");
    addPodButton.setIcon(
            new ImageIcon(ConfigWindow.class.getResource("/org/freedesktop/tango/16x16/actions/list-add.png")));
    addPodButton.setToolTipText("Add a POD to the registry to be considered when running a game.");
    podListOpButtonPanel.add(addPodButton);
    addPodButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            addPOD();
        }
    });

    JButton removePodButton = new JButton("Remove");
    removePodButton.setIcon(new ImageIcon(
            ConfigWindow.class.getResource("/org/freedesktop/tango/16x16/actions/list-remove.png")));
    removePodButton.setToolTipText("Remove a POD file from being considered when playing a game");
    podListOpButtonPanel.add(removePodButton);
    removePodButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            podLM.removeElement(podList.getSelectedValue());
        }
    });

    JButton podEditButton = new JButton("Edit...");
    podEditButton.setIcon(null);
    podEditButton.setToolTipText("Edit the selected POD path");
    podListOpButtonPanel.add(podEditButton);
    podEditButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            editPODPath();
        }
    });

    JPanel missionPanel = new JPanel();
    GridBagConstraints gbc_missionPanel = new GridBagConstraints();
    gbc_missionPanel.fill = GridBagConstraints.BOTH;
    gbc_missionPanel.gridx = 0;
    gbc_missionPanel.gridy = 2;
    generalTab.add(missionPanel, gbc_missionPanel);
    missionPanel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Missions",
            TitledBorder.LEADING, TitledBorder.TOP, null, null));
    GridBagLayout gbl_missionPanel = new GridBagLayout();
    gbl_missionPanel.columnWidths = new int[] { 0, 0 };
    gbl_missionPanel.rowHeights = new int[] { 0, 0, 0 };
    gbl_missionPanel.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
    gbl_missionPanel.rowWeights = new double[] { 1.0, 0.0, Double.MIN_VALUE };
    missionPanel.setLayout(gbl_missionPanel);

    JScrollPane scrollPane = new JScrollPane();
    GridBagConstraints gbc_scrollPane = new GridBagConstraints();
    gbc_scrollPane.insets = new Insets(0, 0, 5, 0);
    gbc_scrollPane.fill = GridBagConstraints.BOTH;
    gbc_scrollPane.gridx = 0;
    gbc_scrollPane.gridy = 0;
    missionPanel.add(scrollPane, gbc_scrollPane);

    missionList = new JList(missionLM);
    missionList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    scrollPane.setViewportView(missionList);

    JPanel missionListOpButtonPanel = new JPanel();
    GridBagConstraints gbc_missionListOpButtonPanel = new GridBagConstraints();
    gbc_missionListOpButtonPanel.anchor = GridBagConstraints.NORTH;
    gbc_missionListOpButtonPanel.gridx = 0;
    gbc_missionListOpButtonPanel.gridy = 1;
    missionPanel.add(missionListOpButtonPanel, gbc_missionListOpButtonPanel);

    JButton addVOXButton = new JButton("Add...");
    addVOXButton.setIcon(
            new ImageIcon(ConfigWindow.class.getResource("/org/freedesktop/tango/16x16/actions/list-add.png")));
    addVOXButton.setToolTipText("Add an external VOX file as a mission");
    missionListOpButtonPanel.add(addVOXButton);
    addVOXButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            addVOX();
        }
    });

    final JButton removeVOXButton = new JButton("Remove");
    removeVOXButton.setIcon(new ImageIcon(
            ConfigWindow.class.getResource("/org/freedesktop/tango/16x16/actions/list-remove.png")));
    removeVOXButton.setToolTipText("Remove the selected mission");
    missionListOpButtonPanel.add(removeVOXButton);
    removeVOXButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            missionLM.remove(missionList.getSelectedIndex());
        }
    });

    final JButton editVOXButton = new JButton("Edit...");
    editVOXButton.setToolTipText("Edit the selected Mission's VOX path");
    missionListOpButtonPanel.add(editVOXButton);
    editVOXButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            editVOXPath();
        }
    });

    missionList.addListSelectionListener(new ListSelectionListener() {
        @Override
        public void valueChanged(ListSelectionEvent evt) {
            final String val = (String) missionList.getSelectedValue();
            if (val == null)
                missionList.setSelectedIndex(0);
            else if (isBuiltinVOX(val)) {
                removeVOXButton.setEnabled(false);
                editVOXButton.setEnabled(false);
            } else {
                removeVOXButton.setEnabled(true);
                editVOXButton.setEnabled(true);
            }
        }
    });

    JPanel soundTab = new JPanel();
    tabbedPane.addTab("Sound",
            new ImageIcon(
                    ConfigWindow.class.getResource("/org/freedesktop/tango/22x22/devices/audio-card.png")),
            soundTab, null);
    GridBagLayout gbl_soundTab = new GridBagLayout();
    gbl_soundTab.columnWidths = new int[] { 0, 0 };
    gbl_soundTab.rowHeights = new int[] { 65, 51, 70, 132, 0, 0, 0 };
    gbl_soundTab.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
    gbl_soundTab.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE };
    soundTab.setLayout(gbl_soundTab);

    JPanel checkboxPanel = new JPanel();
    GridBagConstraints gbc_checkboxPanel = new GridBagConstraints();
    gbc_checkboxPanel.insets = new Insets(0, 0, 5, 0);
    gbc_checkboxPanel.fill = GridBagConstraints.BOTH;
    gbc_checkboxPanel.gridx = 0;
    gbc_checkboxPanel.gridy = 0;
    soundTab.add(checkboxPanel, gbc_checkboxPanel);

    chckbxLinearInterpolation = new JCheckBox("Linear Filtering");
    chckbxLinearInterpolation.setToolTipText("Use the GPU's TMU to smooth playback of low-rate samples.");
    chckbxLinearInterpolation.setHorizontalAlignment(SwingConstants.LEFT);
    checkboxPanel.add(chckbxLinearInterpolation);

    chckbxLinearInterpolation.addItemListener(new ItemListener() {
        @Override
        public void itemStateChanged(ItemEvent e) {
            needRestart = true;
        }
    });

    chckbxBufferLag = new JCheckBox("Buffer Lag");
    chckbxBufferLag.setToolTipText("Improves efficiency, doubles latency.");
    checkboxPanel.add(chckbxBufferLag);

    JPanel modStereoWidthPanel = new JPanel();
    FlowLayout flowLayout_2 = (FlowLayout) modStereoWidthPanel.getLayout();
    flowLayout_2.setAlignment(FlowLayout.LEFT);
    modStereoWidthPanel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null),
            "MOD Stereo Width", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    GridBagConstraints gbc_modStereoWidthPanel = new GridBagConstraints();
    gbc_modStereoWidthPanel.anchor = GridBagConstraints.NORTH;
    gbc_modStereoWidthPanel.insets = new Insets(0, 0, 5, 0);
    gbc_modStereoWidthPanel.fill = GridBagConstraints.HORIZONTAL;
    gbc_modStereoWidthPanel.gridx = 0;
    gbc_modStereoWidthPanel.gridy = 1;
    soundTab.add(modStereoWidthPanel, gbc_modStereoWidthPanel);

    modStereoWidthSlider = new JSlider();
    modStereoWidthSlider.setPaintTicks(true);
    modStereoWidthSlider.setMinorTickSpacing(25);
    modStereoWidthPanel.add(modStereoWidthSlider);

    final JLabel modStereoWidthLbl = new JLabel("NN%");
    modStereoWidthPanel.add(modStereoWidthLbl);

    JPanel bufferSizePanel = new JPanel();
    FlowLayout flowLayout_3 = (FlowLayout) bufferSizePanel.getLayout();
    flowLayout_3.setAlignment(FlowLayout.LEFT);
    bufferSizePanel.setBorder(
            new TitledBorder(null, "Buffer Size", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    GridBagConstraints gbc_bufferSizePanel = new GridBagConstraints();
    gbc_bufferSizePanel.anchor = GridBagConstraints.NORTH;
    gbc_bufferSizePanel.insets = new Insets(0, 0, 5, 0);
    gbc_bufferSizePanel.fill = GridBagConstraints.HORIZONTAL;
    gbc_bufferSizePanel.gridx = 0;
    gbc_bufferSizePanel.gridy = 2;
    soundTab.add(bufferSizePanel, gbc_bufferSizePanel);

    audioBufferSizeCB = new JComboBox();
    audioBufferSizeCB.setModel(new DefaultComboBoxModel(AudioBufferSize.values()));
    bufferSizePanel.add(audioBufferSizeCB);

    soundOutputSelectorGUI = new SoundOutputSelectorGUI();
    soundOutputSelectorGUI.setBorder(
            new TitledBorder(null, "Output Driver", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    GridBagConstraints gbc_soundOutputSelectorGUI = new GridBagConstraints();
    gbc_soundOutputSelectorGUI.anchor = GridBagConstraints.NORTH;
    gbc_soundOutputSelectorGUI.insets = new Insets(0, 0, 5, 0);
    gbc_soundOutputSelectorGUI.fill = GridBagConstraints.HORIZONTAL;
    gbc_soundOutputSelectorGUI.gridx = 0;
    gbc_soundOutputSelectorGUI.gridy = 3;
    soundTab.add(soundOutputSelectorGUI, gbc_soundOutputSelectorGUI);

    modStereoWidthSlider.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent arg0) {
            modStereoWidthLbl.setText(modStereoWidthSlider.getValue() + "%");
            needRestart = true;
        }
    });

    JPanel okCancelPanel = new JPanel();
    getContentPane().add(okCancelPanel, BorderLayout.SOUTH);
    okCancelPanel.setLayout(new BorderLayout(0, 0));

    JButton btnOk = new JButton("OK");
    btnOk.setToolTipText("Apply these settings and close the window");
    okCancelPanel.add(btnOk, BorderLayout.WEST);
    btnOk.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            applySettings();
            ConfigWindow.this.setVisible(false);
        }
    });

    JButton btnCancel = new JButton("Cancel");
    btnCancel.setToolTipText("Close the window without applying settings");
    okCancelPanel.add(btnCancel, BorderLayout.EAST);

    JLabel lblConfigpath = new JLabel(TRConfiguration.getConfigFilePath().getAbsolutePath());
    lblConfigpath.setIcon(null);
    lblConfigpath.setToolTipText("Default config file path");
    lblConfigpath.setHorizontalAlignment(SwingConstants.CENTER);
    lblConfigpath.setFont(new Font("Dialog", Font.BOLD, 6));
    okCancelPanel.add(lblConfigpath, BorderLayout.CENTER);
    btnCancel.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            ConfigWindow.this.setVisible(false);
        }
    });
}