/* JDialog example with grid layout, combo boxes, showDialog() method wraps show() method and when the dialog's fields have been changed returns true. Mike Barnes 9/20/02 */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.JDialog; import java.util.*; public class AgeDialog extends JDialog implements ActionListener { private JTextField nameTF; private JComboBox dayCB, monthCB; private JButton ok, cancel; private String name, day, month; private boolean okClosed; public AgeDialog (Frame owner, String title, boolean modality) { super(owner, title, modality); setResizable(false); okClosed = false; // create values for combo boxes String[] monthValues = {"January", "Feburary", "March", "April", "March", "June", "July", "August", "September", "October", "November", "December"}; String[] dayValues = new String[31]; for(int i = 0; i < 31; i++) dayValues[i] = new String(Integer.toString(i + 1)); Container dialogPane = getContentPane(); dialogPane.setLayout(new GridLayout(7,1)); JLabel nameLabel = new JLabel("Enter first name:"); JLabel monthLabel = new JLabel("Select a month:"); JLabel dayLabel = new JLabel("Enter an day:"); nameTF = new JTextField(15); dayCB = new JComboBox(dayValues); monthCB = new JComboBox(monthValues); // buttons Box buttonBox = new Box(BoxLayout.X_AXIS); ok = new JButton("OK"); cancel = new JButton("cancel"); // listeners dayCB.addActionListener(this); monthCB.addActionListener(this); ok.addActionListener(this); cancel.addActionListener(this); buttonBox.add(Box.createHorizontalGlue()); buttonBox.add(ok); buttonBox.add(Box.createHorizontalStrut(10)); buttonBox.add(cancel); buttonBox.add(Box.createHorizontalGlue()); dialogPane.add(nameLabel); dialogPane.add(nameTF); dialogPane.add(monthLabel); dialogPane.add(monthCB); dialogPane.add(dayLabel); dialogPane.add(dayCB); dialogPane.add(buttonBox); pack(); } // override show to place dialog in center of owner // show returns true if dialog was changed else false. public boolean showDialog() { // set display properties Window owner = (Window) getParent(); Dimension d = getSize(); Rectangle r = owner.getBounds(); int x = r.x + r.width/2; int y = r.y + r.height/2; setBounds(x, y, d.width, d.height); show(); // call Dialog's show() to display // blocks thread since dialog is modal if (okClosed) { okClosed = false; return true; } // return true, reset okClosed false else return false; } // update values from dialog's UI components public void actionPerformed(ActionEvent e) { Object obj = e.getSource(); if (obj == ok) { okClosed = true; hide(); } else if (obj == cancel) { okClosed = false; hide(); clearAll(); } else if (obj == dayCB) day = (String) (((JComboBox) obj).getSelectedItem()); else month = (String) (((JComboBox) obj).getSelectedItem()); } // accessor methods public String toString() { return (nameTF.getText() + " " + month + " " + day); } public void clearAll() { // reset dialog's values name = month = day = " "; nameTF.setText(name); dayCB.setSelectedIndex(0); monthCB.setSelectedIndex(0); } }