import java.awt.*; import javax.swing.*; import java.awt.event.*; /** * Graphisches Zahlenrate-Programm. * Ermittelt Zufallszahl und lässt Benutzer raten. * Demonstriert folgende Themen: Oberflächen mit AWT, Layout, * Ereignisbehandlung mit AWT-Events, String->Zahl Konvertierung * @author Tom Eicher - http://www.teicher.net */ public class ZahlenratenGUI implements ActionListener, WindowListener { /** Fenster das die Anwendung darstellen wird */ JFrame f; /** Label das das Ergebnis der Benutzerinterkation zeigt */ JLabel ergLabel; /** Feld in das der Benutzer seine Eingabe tippt */ JTextField zahlFeld; JProgressBar prog; /** zum Speichern der Zahlenwerte */ int zahl, versuche=0; /** Programmstart */ public static void main(String args[]) { // try { ZahlenratenGUI z = new ZahlenratenGUI(); // } // catch (Exception qqq) // { // System.out.println("Böser Fehler: "+qqq); // qqq.printStackTrace(); // } } /** Konstruktor der Klasse. Erzeugt Benutzeroberfläche, verbindet Listener mit den Components und ermittelt erste Zufallszahl */ public ZahlenratenGUI() { f=new JFrame("Zahlenraten GUI"); f.addWindowListener(this); f.getContentPane().add(new JLabel("Erraten Sie die Zahl"), BorderLayout.NORTH); JPanel fuss = new JPanel(new BorderLayout()); ergLabel=new JLabel("Erster Versuch. Viel Glück!"); fuss.add(ergLabel, BorderLayout.NORTH); prog=new JProgressBar(0,10); prog.setStringPainted(true); fuss.add(prog, BorderLayout.SOUTH); f.getContentPane().add(fuss, BorderLayout.SOUTH); zahlFeld = new JTextField(30); f.getContentPane().add(zahlFeld, BorderLayout.CENTER); zahlFeld.addActionListener(this); zahl=zufall(); // Zufallszahl ermitteln f.pack(); f.setBounds(20, 20, 250, 200); f.setVisible(true); } /** Interaktion: Wird aufgerufen wenn der Benutzer RETURN drückt. Prüft die Eingabe und schreibt das Ergbnis in das ergLabel. Erhöht die AnzahlVersuche. War die Eingabe richtig, so wird eine neue Zufallszahl ermittelt, und die Anzahl Versuche auf 0 gesetzt. */ public void actionPerformed(ActionEvent ae) { // Ermitteln der Eingabe int e; try { e = Integer.parseInt(zahlFeld.getText()); }catch (Exception fff) { ergLabel.setText("Ungültige Eingabe!"); return; } zahlFeld.setText(""); // Überprüfung versuche++; // Versuchszähler erhöhen prog.setValue(versuche); prog.setString("-"+versuche+"-"); if (e > zahl) { ergLabel.setText("Leider zu groß! (beim "+versuche+". Versuch)"); } else if (e < zahl) { ergLabel.setText("Leider zu klein! (beim "+versuche+". Versuch)"); } else { ergLabel.setText("Bravo! In "+versuche+" Versuchen! Jetzt nochmal!"); zahl=zufall(); // Zufallszahl ermitteln versuche=0; prog.setValue(versuche); prog.setString("-"+versuche+"-"); } } /** Ermittelt eine Zufallszahl von 0 - 99 */ static int zufall() { return (int)(Math.random()*100); } /** Implementiert, um auf das Fenster-Schliessen zu reagieren */ public void windowClosing(WindowEvent e) { System.exit(0); } /** Leer implementiert, da nicht von Interesse */ public void windowOpened(WindowEvent e) { } /** Leer implementiert, da nicht von Interesse */ public void windowClosed(WindowEvent e) { } /** Leer implementiert, da nicht von Interesse */ public void windowIconified(WindowEvent e) { } /** Leer implementiert, da nicht von Interesse */ public void windowDeiconified(WindowEvent e) { } /** Leer implementiert, da nicht von Interesse */ public void windowActivated(WindowEvent e) { } /** Leer implementiert, da nicht von Interesse */ public void windowDeactivated(WindowEvent e) { } }