/*
* This file is part of the aidGer project.
*
* Copyright (C) 2010-2013 The aidGer Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.aidger.view;
import static de.aidger.utils.Translation._;
import java.awt.Component;
import java.awt.Frame;
import java.io.File;
import java.net.URL;
import java.util.List;
import javax.swing.ButtonModel;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import de.aidger.controller.ActionNotFoundException;
import de.aidger.controller.ActionRegistry;
import de.aidger.controller.actions.DialogAbortAction;
import de.aidger.controller.actions.SettingsBrowseAction;
import de.aidger.controller.actions.SettingsDatabaseConfigAction;
import de.aidger.controller.actions.SettingsSaveAction;
import de.aidger.model.Runtime;
import de.aidger.utils.Pair;
public class SettingsDialog extends JDialog {
private static final long serialVersionUID = 1L;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JSpinner activitiesSpinner;
private javax.swing.JTextField anonTextField;
private javax.swing.JButton browseButton;
private javax.swing.ButtonGroup calculationGroup;
private javax.swing.JTextField historicTextField;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JRadioButton jRadioButton1;
private javax.swing.JRadioButton jRadioButton2;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JComboBox langComboBox;
private javax.swing.JTextField nameTextField;
private javax.swing.JCheckBox openCheckBox;
private javax.swing.JTextField pdfTextField;
private javax.swing.JTextField pessimisticTextField;
private javax.swing.JComboBox roundingCmb;
private javax.swing.JCheckBox saveCheckBox;
private javax.swing.JTextField toleranceTextField;
// End of variables declaration//GEN-END:variables
/**
* @param owner
*/
public SettingsDialog(Frame owner) {
super(owner, true);
initComponents();
String lang = Runtime.getInstance().getOption("language");
try {
jButton1.setAction(ActionRegistry.getInstance().get(
DialogAbortAction.class.getName()));
jButton2.setAction(ActionRegistry.getInstance().get(
SettingsSaveAction.class.getName()));
browseButton.setAction(ActionRegistry.getInstance().get(
SettingsBrowseAction.class.getName()));
jButton3.setAction(ActionRegistry.getInstance().get(
SettingsDatabaseConfigAction.class.getName()));
} catch (ActionNotFoundException e) {
UI.displayError(e.getMessage());
}
saveCheckBox.setSelected(Boolean.parseBoolean(Runtime.getInstance()
.getOption("auto-save")));
openCheckBox.setSelected(Boolean.parseBoolean(Runtime.getInstance()
.getOption("auto-open")));
nameTextField.setText(Runtime.getInstance().getOption("name"));
pdfTextField.setText(Runtime.getInstance().getOption("pdf-viewer"));
pessimisticTextField.setText(Runtime.getInstance().getOption(
"pessimistic-factor", "1.0"));
historicTextField.setText(Runtime.getInstance().getOption(
"historic-factor", "1.0"));
anonTextField.setText(Runtime.getInstance().getOption("anonymize-time",
"365"));
toleranceTextField.setText(Runtime.getInstance().getOption("tolerance",
"0.0"));
activitiesSpinner.setModel(new javax.swing.SpinnerNumberModel(Integer
.valueOf(Runtime.getInstance().getOption("activities")), null,
null, Integer.valueOf(1)));
String[] precisions = new String[3];
precisions[0] = "1";
precisions[1] = "0.1";
precisions[2] = "0.01";
roundingCmb.setModel(new javax.swing.DefaultComboBoxModel(precisions));
roundingCmb.setSelectedIndex(Integer.parseInt(Runtime.getInstance()
.getOption("rounding", "2")) <= 2 ? Integer.parseInt(Runtime
.getInstance().getOption("rounding", "2")) : -1);
ButtonModel model = Runtime.getInstance().getOption("calc-method")
.equals("1") ? jRadioButton1.getModel() : jRadioButton2.getModel();
calculationGroup.setSelected(model, true);
/* Add all languages to the combobox and select the correct one */
List<Pair<String, String>> langs = Runtime.getInstance().getLanguages();
String[] longLangs = new String[langs.size()];
String[] indexes = new String[langs.size()];
ImageIcon[] icons = new ImageIcon[langs.size()];
int selected = -1;
/*
* Prepare an array of the long names, indexes and icons for usage in
* the combobox.
*/
for (int i = 0; i < langs.size(); ++i) {
indexes[i] = Integer.toString(i);
longLangs[i] = langs.get(i).snd();
if (langs.get(i).fst().equals(lang)) {
selected = i;
}
Object stream;
File f;
if ((stream = getClass().getResource(
"/de/aidger/res/icons/" + langs.get(i).fst() + ".png")) != null) {
icons[i] = new ImageIcon((URL) stream);
} else if ((f = new File(Runtime.getInstance().getConfigPath()
+ "/lang/" + langs.get(i).fst() + ".png")).exists()) {
icons[i] = new ImageIcon(f.getAbsolutePath());
} else {
icons[i] = null;
}
}
ImageComboBoxRenderer renderer = new ImageComboBoxRenderer(icons,
longLangs);
langComboBox.setRenderer(renderer);
langComboBox.setModel(new javax.swing.DefaultComboBoxModel(indexes));
langComboBox.setSelectedIndex(selected);
setLocationRelativeTo(null);
}
/**
* Get the currently selected rounding precision.
*
* @return How many decimal places will be used.
*/
public int getRounding() {
return roundingCmb.getSelectedIndex() <= 2 ? roundingCmb
.getSelectedIndex() : 2;
}
/**
* Get the currently entered username.
*
* @return The username
*/
public String getUsername() {
return nameTextField.getText();
}
/**
* Get the currently entered pdf viewer.
*
* @return The pdf viewer
*/
public String getPDFViewer() {
return pdfTextField.getText();
}
/**
* Get the pessimistic factor currently entered.
*
* @return The pessimistic factor
*/
public String getPessimisticFactor() {
return pessimisticTextField.getText();
}
/**
* Get the historical factor currently entered.
*
* @return The historical factor
*/
public String getHistoricFactor() {
return historicTextField.getText();
}
/**
* Get the time until assistants get anonymized.
*
* @return The anonymization time
*/
public String getAnonymizationTime() {
return anonTextField.getText();
}
/**
* Get the tolerance for controlling currently entered.
*
* @return The tolerance
*/
public String getTolerance() {
return toleranceTextField.getText();
}
/**
* Get the number of activities currently entered
*
* @return The number of activities
*/
public int getNumOfActivities() {
return (Integer) activitiesSpinner.getValue();
}
/**
* Get the selected calculation method
*
* @return 1 is pessimistic, 0 is historical
*/
public int getSelectedMethod() {
return calculationGroup.getSelection().equals(jRadioButton1.getModel()) ? 1
: 0;
}
/**
* Get whether the save checkbox is selected
*
* @return True if the checkbox is selected
*/
public boolean isSaveSelected() {
return saveCheckBox.isSelected();
}
/**
* Get whether the open checkbox is selected
*
* @return True if the checkbox is selected
*/
public boolean isOpenSelected() {
return openCheckBox.isSelected();
}
/**
* Get the index of the selected language.
*
* @return The index of the selected language
*/
public int getSelectedLanguage() {
return langComboBox.getSelectedIndex();
}
/**
* Set the path of the pdf viewer.
*
* @param path
* The new pdf viewer path
*/
public void setPdfPath(String path) {
pdfTextField.setText(path);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
calculationGroup = new javax.swing.ButtonGroup();
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel1 = new javax.swing.JPanel();
langComboBox = new javax.swing.JComboBox();
jLabel4 = new javax.swing.JLabel();
activitiesSpinner = new javax.swing.JSpinner();
jLabel3 = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
nameTextField = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
pdfTextField = new javax.swing.JTextField();
openCheckBox = new javax.swing.JCheckBox();
saveCheckBox = new javax.swing.JCheckBox();
browseButton = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
pessimisticTextField = new javax.swing.JTextField();
historicTextField = new javax.swing.JTextField();
jLabel7 = new javax.swing.JLabel();
anonTextField = new javax.swing.JTextField();
jLabel8 = new javax.swing.JLabel();
toleranceTextField = new javax.swing.JTextField();
jLabel9 = new javax.swing.JLabel();
jRadioButton1 = new javax.swing.JRadioButton();
jRadioButton2 = new javax.swing.JRadioButton();
roundingCmb = new javax.swing.JComboBox();
jLabel10 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jButton3 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle(_("Settings"));
jLabel4.setText(_("Language:"));
jLabel3.setText(_("Amount of activities:"));
jLabel3.setToolTipText(_("The amount of activities shown in detailviews."));
jLabel1.setText(_("Name:"));
jLabel1.setToolTipText(_("The name used in activities."));
nameTextField.setToolTipText(_("The name used in activities."));
jLabel2.setText(_("PDF Viewer:"));
pdfTextField.setEditable(false);
openCheckBox.setText(_("Open reports automatically after exporting"));
saveCheckBox.setText(_("Save Tabs when quitting"));
browseButton.setText(_("Browse"));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(jLabel1)
.addComponent(jLabel4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 126, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(langComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(pdfTextField)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(browseButton))
.addComponent(nameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 266, Short.MAX_VALUE)
.addComponent(activitiesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(openCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
.addContainerGap())
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(saveCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, 124, Short.MAX_VALUE)
.addGap(278, 278, 278))))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(pdfTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2)
.addComponent(browseButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(langComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(activitiesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(openCheckBox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(saveCheckBox)
.addContainerGap(84, Short.MAX_VALUE))
);
jTabbedPane1.addTab(_("General"), jPanel1);
jLabel5.setText(_("Pessimistic Factor:"));
jLabel6.setText(_("Historical Factor:"));
jLabel7.setText(_("Time until anonymization in days:"));
jLabel8.setText(_("Tolerance of Controlling in %:"));
jLabel9.setText(_("Calculation method:"));
calculationGroup.add(jRadioButton1);
jRadioButton1.setText(_("Pessimistic"));
calculationGroup.add(jRadioButton2);
jRadioButton2.setText(_("Historical"));
jLabel10.setText(_("Rounding Precision") + ":");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jLabel7)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 126, Short.MAX_VALUE)
.addComponent(anonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jLabel8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 126, Short.MAX_VALUE)
.addComponent(toleranceTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 126, Short.MAX_VALUE)
.addComponent(pessimisticTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel9)
.addComponent(jLabel6)
.addComponent(jLabel10))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 126, Short.MAX_VALUE)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jRadioButton1)
.addComponent(historicTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jRadioButton2)
.addComponent(roundingCmb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel7)
.addComponent(anonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel8)
.addComponent(toleranceTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(pessimisticTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel5))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(historicTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel6))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel9)
.addComponent(jRadioButton1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jRadioButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(roundingCmb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel10))
.addContainerGap(63, Short.MAX_VALUE))
);
jTabbedPane1.addTab(_("Reports"), jPanel2);
jButton3.setText(_("Open Database Configuration"));
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, 392, Short.MAX_VALUE)
.addContainerGap())
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(94, 94, 94)
.addComponent(jButton3)
.addContainerGap(150, Short.MAX_VALUE))
);
jTabbedPane1.addTab(_("Database"), jPanel3);
jButton2.setText("Speichern");
jButton1.setText("Abbrechen");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(233, Short.MAX_VALUE)
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton1)
.addContainerGap())
.addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 417, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 295, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
class ImageComboBoxRenderer extends JLabel implements ListCellRenderer {
protected ImageIcon[] images;
protected String[] text;
public ImageComboBoxRenderer(ImageIcon[] images, String[] text) {
setOpaque(true);
setHorizontalAlignment(LEFT);
setVerticalAlignment(CENTER);
this.images = images;
this.text = text;
}
/*
* This method finds the image and text corresponding to the selected
* value and returns the label, set up to display the text and image.
*/
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
index = Integer.parseInt((String) value);
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
//Set the icon and text. If icon is null, do nothing.
if (index >= 0) {
setIcon(images[index]);
}
setText(text[index]);
return this;
}
}
}