YesNoDialogpublic class YesNoDialog extends Object
Fields Summary |
---|
protected String | message | protected String | title | protected String | yesLabel | protected String | noLabel | protected String | cancelLabel | protected int | alignment | protected Font | font | protected Color | background | protected Color | foreground | public static final int | LEFT | public static final int | RIGHT | public static final int | CENTER | protected Vector | listenersThis field holds a list of registered ActionListeners.
Vector is internally synchronized to prevent race conditions |
Constructors Summary |
---|
public YesNoDialog()The no-argument bean constructor, with default property values
this("Question", "Your\nMessage\nHere", "Yes", "No", "Cancel", LEFT);
| public YesNoDialog(String title, String message, String yesLabel, String noLabel, String cancelLabel, int alignment)A constructor for programmers using this class "by hand"
this.title = title;
this.message = message;
this.yesLabel = yesLabel;
this.noLabel = noLabel;
this.cancelLabel = cancelLabel;
this.alignment = alignment;
|
Methods Summary |
---|
public void | addAnswerListener(AnswerListener l)Register an action listener to be notified when a button is pressed
listeners.addElement(l);
| public void | display()This method makes the bean display the dialog box
// Create a frame with the specified title. It would be nice to
// use a Dialog, but that needs to be passed a Frame argument, and
// the BDK beanbox tool only seems to work with no-argument methods.
final Frame frame = new Frame(title);
// Specify a LayoutManager for it.
frame.setLayout(new BorderLayout(15, 15));
// Specify font and colors, if any are specified.
if (font != null) frame.setFont(font);
if (background != null) frame.setBackground(background);
if (foreground != null) frame.setForeground(foreground);
// Put the message label in the middle of the window.
frame.add("Center", new MultiLineLabel(message, 20, 20, alignment));
// Create an action listener for use by the buttons of the dialog.
// When a button is pressed, this listener first closes the dialog box.
// Then, it creates an AnswerEvent object that corresponds to the
// button that was pressed, and send that new event to all registered
// listeners, using the fireEvent() method defined above.
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.dispose(); // pop down window
if (listeners != null) { // notify any registered listeners
String cmd = e.getActionCommand();
int type;
if (cmd.equals("yes")) type = AnswerEvent.YES;
else if (cmd.equals("no")) type = AnswerEvent.NO;
else type = AnswerEvent.CANCEL;
fireEvent(new AnswerEvent(YesNoDialog.this, type));
}
}
};
// Create a panel for the dialog buttons and put it at the bottom
// of the dialog. Specify a FlowLayout layout manager for it.
Panel buttonbox = new Panel();
buttonbox.setLayout(new FlowLayout(FlowLayout.CENTER, 25, 15));
frame.add("South", buttonbox);
// Create each specified button, specifying the action listener
// and action command for each, and adding them to the buttonbox
if ((yesLabel != null) && (yesLabel.length() > 0)) {
Button yes = new Button(yesLabel); // Create button.
yes.setActionCommand("yes"); // Set action command.
yes.addActionListener(listener); // Set listener.
buttonbox.add(yes); // Add button to the panel.
}
if ((noLabel != null) && (noLabel.length() > 0)) {
Button no = new Button(noLabel);
no.setActionCommand("no");
no.addActionListener(listener);
buttonbox.add(no);
}
if ((cancelLabel != null) && (cancelLabel.length() > 0)) {
Button cancel = new Button(cancelLabel);
cancel.setActionCommand("cancel");
cancel.addActionListener(listener);
buttonbox.add(cancel);
}
// Finally, set the dialog to its preferred size and display it.
frame.pack();
frame.show();
| public void | fireEvent(AnswerEvent e)Send an event to all registered listeners
// Make a copy of the list and fire the events using that copy.
// This means that listeners can be added or removed from the original
// list in response to this event. We ought to be able to just use an
// enumeration for the vector, but that doesn't copy the list internally.
Vector list = (Vector) listeners.clone();
for(int i = 0; i < list.size(); i++) {
AnswerListener listener = (AnswerListener)list.elementAt(i);
switch(e.getID()) {
case AnswerEvent.YES: listener.yes(e); break;
case AnswerEvent.NO: listener.no(e); break;
case AnswerEvent.CANCEL: listener.cancel(e); break;
}
}
| public int | getAlignment() return alignment;
| public java.awt.Color | getBackground() return background;
| public java.lang.String | getCancelLabel() return cancelLabel;
| public java.awt.Font | getFont() return font;
| public java.awt.Color | getForeground() return foreground;
| public java.lang.String | getMessage()
// Methods to query all of the bean properties.
return message;
| public java.lang.String | getNoLabel() return noLabel;
| public java.lang.String | getTitle() return title;
| public java.lang.String | getYesLabel() return yesLabel;
| public static void | main(java.lang.String[] args)A main method that demonstrates how to use this class, and allows testing
// Create an instance of InfoDialog, with title and message specified:
YesNoDialog d =
new YesNoDialog("YesNoDialog Test",
"There are unsaved files.\n" +
"Do you want to save them before quitting?",
"Yes, save and quit",
"No, quit without saving",
"Cancel; don't quit",
YesNoDialog.CENTER);
// Register an action listener for the dialog. This one just prints
// the results out to the console.
d.addAnswerListener(new AnswerListener() {
public void yes(AnswerEvent e) { System.out.println("Yes"); }
public void no(AnswerEvent e) { System.out.println("No"); }
public void cancel(AnswerEvent e) { System.out.println("Cancel"); }
});
// Now pop the dialog up. It will pop itself down automatically.
d.display();
| public void | removeAnswerListener(AnswerListener l)Remove an Answer listener from our list of interested listeners
listeners.removeElement(l);
| public void | setAlignment(int a) alignment = a;
| public void | setBackground(java.awt.Color bg) background = bg;
| public void | setCancelLabel(java.lang.String l) cancelLabel = l;
| public void | setFont(java.awt.Font f) font = f;
| public void | setForeground(java.awt.Color fg) foreground = fg;
| public void | setMessage(java.lang.String m) message = m;
| public void | setNoLabel(java.lang.String l) noLabel = l;
| public void | setTitle(java.lang.String t) title=t;
| public void | setYesLabel(java.lang.String l) yesLabel = l;
|
|