/*
* Datei: AllgemeinerDialog.java
* Autor(en): Lukas K�nig
* Java-Version: 1.4
* Erstellt (vor): 26.06.2007
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/
package fmg.fmg8.graphVis.fensterDialoge;
import fmg.fmg8.graphVis.MultiLineLabel;
import fmg.fmg8.umgebung2D.Vektor2D;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextComponent;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Iterator;
/**
* Implementierung eines allgemeinen Dialogs.
*
* @author Lukas K�nig
*/
public class AllgemeinerDialog extends Dialog implements ActionListener {
/**
* Die Serial-Version-ID vom 28. April 2007
*/
private static final long serialVersionUID = 2504188077455833733L;
/**
* Das gew�hlte Element.
*/
private String result;
/**
* Die Textbox deren Wert zum Zeitpunkt des Klicks auf einen Button zur�ck-
* gegeben wird.
*/
private TextComponent text;
/**
* Eine Liste.
*/
private java.awt.List liste;
/**
* Zus�tzliche Textbox deren Wert zum Zeitpunkt des Klicks auf einen
* Button zur�ckgegeben wird, falls sie angefordert war.
*/
private TextComponent zusatzText;
/**
* Der Konstruktor.
*
* @param owner Das Vaterfenster.
* @param msg Anzuzeigende Nachricht.
* @param titel Der Titel des Fensters.
* @param buttons Liste von Strings, die von den anzuzeigenden
* Buttons dargestellt werden.
* @param textBox In einer Textbox darzustellender String.
* @param textBoxHeight H�he der Textbox in ZEILEN!
* @param textBoxWidth Breite der Textbox in ZEICHEN!.
* @param einzeilig Ob die Textbox einzeilig ist.
*/
public AllgemeinerDialog(final Frame owner,
final String msg,
final String titel,
final ArrayList<String> buttons,
final String textBox,
final int textBoxHeight,
final int textBoxWidth,
final boolean einzeilig) {
super(owner, titel, true);
final int locationX = 200;
final int locationY = 200;
final int borderX = 4;
final int borderY = 4;
final int lrMargin = 20;
final int tbMargin = 10;
Iterator<String> it;
Button butt;
this.result = "";
this.zusatzText = null;
this.setAlwaysOnTop(true);
//Fenster
this.setLayout(new BorderLayout(borderX, borderY));
this.setResizable(true);
this.setLocation(locationX, locationY);
//Message
if (textBox == null) {
MultiLineLabel lab = new MultiLineLabel(msg);
lab.setLeftRightMargin(lrMargin);
lab.setTopBottomMargin(tbMargin);
this.add(lab, BorderLayout.CENTER);
} else {
if (einzeilig) {
this.text = new TextField(textBox,
textBoxWidth);
this.text.setSelectionStart(0);
this.text.setSelectionEnd(Integer.MAX_VALUE);
} else {
this.text = new TextArea(textBox,
textBoxHeight,
textBoxWidth);
}
this.add(this.text, BorderLayout.CENTER);
}
//Buttons
Panel panel = new Panel();
panel.setLayout(new FlowLayout(FlowLayout.CENTER));
it = buttons.iterator();
while (it.hasNext()) {
butt = new Button(it.next());
butt.addActionListener(this);
panel.add(butt);
}
this.add(panel, BorderLayout.SOUTH);
this.pack();
}
/**
* Erzeugt einen Dialog basierend auf einer Liste.
*
* @param owner Elternfenster.
* @param title Der Titel des Fensters.
* @param message Anzuzeigende Nachricht.
* @param elemente Die Listenelemente.
* @param button1 Ein Button.
* @param button2 Ein Button.
* @param multi Ob Mehrfachselektion m�glich ist.
* @param zusatzTextFeld Ob ein zus�tzliches Textfeld angezeigt werden
* soll (>= 0) oder nicht (< 0). Gleichzeitig die
* Voreinstellung des Textfeldes.
*/
public AllgemeinerDialog(final Frame owner,
final String title,
final String message,
final java.util.List<String> elemente,
final String button1,
final String button2,
final boolean multi,
final int zusatzTextFeld) {
super(owner, title, true);
this.setAlwaysOnTop(true);
if (zusatzTextFeld >= 0) {
this.zusatzText = new TextField();
this.zusatzText.setText("" + zusatzTextFeld);
} else {
this.zusatzText = null;
}
this.result = "";
this.liste = new java.awt.List(elemente.size(), multi);
Button but1 = new Button(button1);
Button but2 = new Button(button2);
MultiLineLabel lab = new MultiLineLabel(message);
this.setLayout(new GridLayout(2, 2));
this.add(this.liste);
if (this.zusatzText == null) {
this.add(lab);
} else {
this.add(this.zusatzText);
this.setTitle(this.getTitle() + " (" + message + ")");
}
lab.setLeftRightMargin(50);
this.add(but1);
this.add(but2);
but1.addActionListener(this);
but2.addActionListener(this);
this.setBounds(100, 100, 500, 150);
Iterator<String> it = elemente.iterator();
while (it.hasNext()) {
this.liste.add(it.next().toString());
}
}
/**
* Der Konstruktor.
*
* @param owner Das Vaterfenster.
* @param msg Anzuzeigende Nachricht.
* @param titel Der Titel des Fensters.
* @param buttons Liste von Strings, die von den anzuzeigenden Buttons
* dargestellt werden.
* @param textBox In einer Textbox darzustellender String.
*/
public AllgemeinerDialog(final Frame owner,
final String msg,
final String titel,
final ArrayList<String> buttons,
final String textBox) {
this(owner,
msg,
titel,
buttons,
textBox,
20,
100,
false);
}
/**
* F�ngt das Klicken auf einen Button ab.
*
* @param event Das ausgel�ste Ereignis.
*/
public void actionPerformed(final ActionEvent event) {
this.result = event.getActionCommand();
this.setVisible(false);
this.dispose();
}
/**
* Gibt die Wahl des Benutzers zur�ck.
*
* @return Das Ergebnis des Benutzers.
*/
public String getResult() {
return this.result;
}
/**
* Gibt den Text der Textbox zum Klickzeitpunkt zur�ck.
*
* @return Text der Textbox zum Klickzeitpunkt.
*/
public String getText() {
return this.text.getText();
}
/**
* Gibt den Text der Zusatztextbox zum Klickzeitpunkt zur�ck.
*
* @return Text der Zusatztextbox zum Klickzeitpunkt.
*/
public String getZusatzText() {
if (this.zusatzText != null) {
return this.zusatzText.getText();
} else {
return null;
}
}
/**
* @return Returns the liste.
*/
public java.awt.List getListe() {
return this.liste;
}
/**
* Sets the position of the window.
*
* @param pos Position vector.
*/
public void setPosition(final Vektor2D pos) {
this.setBounds((int) pos.x, (int) pos.y,
this.getWidth(), this.getHeight());
}
/**
* Sets the size of the window.
*
* @param size Size vector.
*/
public void setSize(final Vektor2D size) {
this.setBounds(this.getX(), this.getY(),
(int) size.x, (int) size.y);
}
}