package jeql.command.gui; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.util.Arrays; import java.util.Collection; import java.util.Vector; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import jeql.util.SwingUtil; public class FlexiDialog extends JDialog { BorderLayout borderLayout1 = new BorderLayout(); JPanel controlPanel = new JPanel(); int rowCount = 0; private ButtonPanel buttonPanel = null; private String buttonSelected; public FlexiDialog(String title) { super((Frame) null, title, true); try { init(); } catch (Exception ex) { ex.printStackTrace(); } } public String getButtonSelected() { return buttonSelected; } public void setVisible(boolean visible) { pack(); pack(); SwingUtil.centerOnScreen(this); super.setVisible(visible); } private void init() throws Exception { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (UnsupportedLookAndFeelException ex) { // eat it } controlPanel.setLayout(new GridBagLayout()); this.setResizable(true); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(controlPanel, BorderLayout.CENTER); } public void setButtons(String[] buttons) { buttonPanel = new ButtonPanel(buttons); buttonPanel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { buttonAction(); } }); this.getContentPane().add(buttonPanel, BorderLayout.SOUTH); } private void buttonAction() { buttonSelected = buttonPanel.getSelectedText(); this.setVisible(false); // TODO: allow Help, About actions } public void addRow( String fieldName, JComponent label, JComponent component, // EnableCheck[] enableChecks, String toolTipText) { if (toolTipText != null) { label.setToolTipText(toolTipText); component.setToolTipText(toolTipText); } /* // fieldNameToLabelMap.put(fieldName, label); // fieldNameToComponentMap.put(fieldName, component); if (enableChecks != null) { addEnableChecks(fieldName, Arrays.asList(enableChecks)); } */ int componentX; int componentWidth; int labelX; int labelWidth; if (component instanceof JCheckBox || component instanceof JRadioButton || component instanceof JLabel || component instanceof JPanel) { componentX = 1; componentWidth = 3; labelX = 4; labelWidth = 1; } else { labelX = 1; labelWidth = 1; componentX = 2; componentWidth = 1; } controlPanel.add( label, new GridBagConstraints( labelX, rowCount, labelWidth, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 5, 10), 0, 0)); //HORIZONTAL especially needed by separator. [Jon Aquino] controlPanel.add( component, new GridBagConstraints( componentX, rowCount, componentWidth, 1, 0, 0.0, GridBagConstraints.WEST, component instanceof JPanel ? GridBagConstraints.HORIZONTAL : GridBagConstraints.NONE, new Insets(0, 0, 5, 0), 0, 0)); rowCount++; } public JTextField addTextField( String fieldName, String initialValue, int approxWidthInChars, // EnableCheck[] enableChecks, String toolTipText) { JTextField textField = new JTextField(initialValue, approxWidthInChars); addRow(fieldName, new JLabel(fieldName), textField, toolTipText); return textField; } public JComboBox addComboBox( String fieldName, String selectedItem, String[] items, String toolTipText) { return addComboBox(fieldName, selectedItem, Arrays.asList(items), toolTipText); } public JComboBox addComboBox( String fieldName, Object selectedItem, Collection items, String toolTipText) { JComboBox comboBox = new JComboBox(new Vector(items)); comboBox.setSelectedItem(selectedItem); addRow(fieldName, new JLabel(fieldName), comboBox, toolTipText); return comboBox; } public static void main(String[] args) { // put up a test dialog FlexiDialog d = new FlexiDialog("Test GUI"); d.addTextField("Test", "aaaa", 10, "xxxxx"); d.addTextField("Test wide label", "blarg", 20, "xxxxx"); d.addComboBox("Test Combo", "two", new String[] { "one", "two", "three"}, "xxxxx"); d.setButtons(new String[] { "Ok", "Exit" }); d.setVisible(true); System.out.println(d.getButtonSelected()); System.exit(0); } }