// Dieses Programm soll verschiedene Java-Bedienelemente in einem Fenster // sichtbar machen, und Aktionen ausgeben. // In der Aufgabenstellung steht zwar, dass immer auf den BUTTON geklickt werden soll, // um die anderen Elemente auszulesen, aber es ist interessanter, wenn bei jedem // Element direkt bei dessen Veränderung eine Aktion ausgelöst wird. import java.awt.*; // AWT-Grafikklassen importieren import java.awt.event.*; // AWT-Eventklassen importieren import java.applet.*; // Enthält die Definition der Applet-Klasse // MultiGUI ist abgeleitet von Klasse Applet, und enthält damit // auch Funktionen wie add(), init(), paint(Graphics g)... // ActionListener ist für Buttons, ItemListener für Menüs und Checkboxen zuständig public class MultiGUI extends Applet implements ActionListener,ItemListener { // Bei Applets werden die folgenden Funktionen aufgerufen: // paint(Graphics g) - immer, wenn das Browser-Fenster neu gezeichnet wird // start() - beim Start des Applet // init() - Kurz nach dem Laden des Applet // stop() - Wenn auf eine andere Webseite verzweigt wird, wird das Applet // angehalten. // init(): GUI aufbauen, WENN als Applet gestartet. public void init() { showGUI(); } // main() wird in der Variante "Standalone-Anwendung" verwendet. // Wenn das Programm als Applet läuft (im Browser) wird main() ignoriert. public static void main(String[] args){ Frame frame = new Frame("multiGUI"); // Fenster frame.setSize(800,600); // Applet erzeugen MultiGUI applet = new MultiGUI(); // in applet haben wir nun alle Methoden zur Verfügung // Applet mit Fenster verbinden frame.add(applet); // Wir wollen das Fenster auch schließen können. frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); // Und jetzt sind wir da, wo wir mit Browser auch gewesen wären. :-) applet.init(); // Siehe oben. applet.start(); // Standard-Methode aus Applet, damit es losläuft. frame.setVisible(true); // Fenster sichtbar machen. } public void showGUI(){ // Layout der Elemente: Positionierung pixelgenau per setBounds() setLayout(null); // Freies/manuelles Layout // Zeichensatz für diverse Elemente Font font = new Font("SansSerif", Font.BOLD, 16); // Schrift // Die Bedienelemente Button button = new Button("Klick"); // Ein Knopf-Objekt button.setFont(font); // Schriftart für Knopf setzen. button.setBounds(10,10,80,30); // Position und Größe des Knopfes add(button); // Und den Knopf dem Fenster oder Applet hinzufügen button.addActionListener(this); // Aktuelle Klasse enthält die // ActionListener-Funktionen TextField textfield = new TextField("Textfeld", 20); // Ein Textfeld textfield.setFont(font); textfield.setBounds(100,10, 280, 30); add(textfield); // Mit Applet verknüpfen textfield.addActionListener(this); Choice choice = new Choice(); // Ein Aufklapp-Menü choice.setFont(font); choice.setBounds(10,80,260,60); choice.add("erster Menüeintrag"); choice.add("zweiter Menüeintrag"); choice.add("dritter Menüeintrag"); add(choice); choice.addItemListener(this); CheckboxGroup radio = new CheckboxGroup(); // "Radio"-Checkboxen Checkbox checkbox1 = new Checkbox("Eins", radio, true); Checkbox checkbox2 = new Checkbox("Zwei", radio, true); checkbox1.setFont(font); checkbox2.setFont(font); checkbox1.setBounds(10,150,200,60); checkbox2.setBounds(250,150,200,60); add(checkbox1); add(checkbox2); checkbox1.addItemListener(this); checkbox2.addItemListener(this); Checkbox c1 = new Checkbox("Checkbox 1"); // Unabhängige Checkboxen Checkbox c2 = new Checkbox("Checkbox 2"); c1.setFont(font); c2.setFont(font); c1.setBounds(10,200,200,60); c2.setBounds(250,200,200,60); add(c1); add(c2); c1.addItemListener(this); c2.addItemListener(this); } // Eine eigene Funktion, die an Stelle y des Fensters einen Text zeichnet public void printText(String text, int y) { Graphics g = getGraphics(); g.clearRect(10,y-40,780,80); // Alten Text löschen (Rechteck) g.drawString(text, 10, y); } // Hier kommen die Methoden aus "implements ActionListener". Es gibt // zum Glück nur eine. public void actionPerformed(ActionEvent e) { printText(e.toString(), 350); } // Hier kommen die Methoden aus "implements ItemListener". Es gibt nur eine. public void itemStateChanged(ItemEvent e) { printText(e.toString(), 350); } }