Universität Augsburg, Institut für Informatik Prof. Dr. Werner Kießling M. Endres, A. Huhn, T. Preisinger Sommersemester 2006 05. Juli. 2006 Lösungsblatt 9 Informatik II Aufgabe 1: Frontend für Delete DeleteGUI.java import java.io.File; import javax.swing.*; public class DeleteGUI { public static void main(String[] args) { File file; if (args.length == 0) { JFileChooser jfc = new JFileChooser(); jfc.setFileSelectionMode(JFileChooser.FILES\_AND\_DIRECTORIES); jfc.showOpenDialog(null); file = jfc.getSelectedFile(); if (file == null) { JOptionPane.showMessageDialog(null, "Keine Datei ausgewählt.", "DeleteGUI", JOptionPane.ERROR\_MESSAGE); } else { String type = file.isDirectory() ? "Verzeichnis" : "Datei"; int confirm = JOptionPane.showConfirmDialog(null, type + " wirklich löschen?", "DeleteGUI", JOptionPane.YES\_NO\_OPTION); if (confirm == JOptionPane.YES\_OPTION) { JOptionPane.showMessageDialog(null, "Lösche ’" + file + "’.", "DeleteGUI", JOptionPane.INFORMATION_MESSAGE); Delete.delete(file); } } } } Aufgabe 2: Stein, Schere, Papier SteinScherePapier.java import java.util.Random; import javax.swing.JOptionPane; public class SteinScherePapier { public static void main(String[] args) { String[] values = { "Stein", "Schere", "Papier" }; Object selectedValue = values[0]; String message = new String(); int machineSelection, userWins = 0, computerWins = 0, equal = 0; Random rnd = new Random(); // Zufallsgenerator initialisieren boolean userWasWinner = false; while (selectedValue != null) { machineSelection = rnd.nextInt(3); // Computer-Auswahl message += "Bitte neue Auswahl treffen!"; selectedValue = JOptionPane.showInputDialog(null, message, "Stein, Schere, Papier", JOptionPane.INFORMATION_MESSAGE, null, values, values[0]); 1 if (selectedValue != null) { // Gleiche Auswahl behandeln if (selectedValue.equals(values[machineSelection])) { equal++; message = "Gleiche Auswahl (" + selectedValue + "). "; continue; } switch (machineSelection) { case 0: // Computer wählt "Stein" if (selectedValue.equals("Schere")) userWasWinner = false; else userWasWinner = true; // Benutzer wählt Papier break; case 1: // Computer wählt "Schere" if (selectedValue.equals("Papier")) userWasWinner = false; else userWasWinner = true; // Benutzer wählt Stein break; case 2: // Computer wählt "Papier" if (selectedValue.equals("Stein")) userWasWinner = false; else userWasWinner = true; // Benutzer wählt Schere break; } if (userWasWinner) { userWins++; message = "Benutzer gewinnt:\n" + selectedValue + " gewinnt gegen " + values[machineSelection] + "! "; } else { computerWins++; message = "Computer gewinnt:\n" + values[machineSelection] + " gewinnt gegen " + selectedValue + "! "; } } } // Endergebnis anzeigen String cWins = computerWins == 1 ? " Sieg " : " Siege "; String uWins = userWins == 1 ? " Sieg " : " Siege "; JOptionPane.showMessageDialog(null, equal + " Unentschieden\n" + computerWins + cWins + "des Computers\n" + userWins + uWins + "des Benutzers", "Ergebnis", JOptionPane.INFORMATION_MESSAGE); } } Aufgabe 3: Events EventFrame.java import java.awt.Color; import java.awt.event.*; import javax.swing.JFrame; public class EventFrame extends JFrame { public static void main(String[] args) { EventFrame ef = new EventFrame(); // Erst Frame-Einstellungen setzen, dann Listener hinzufügen ef.getContentPane().setBackground(Color.RED); ef.setSize(550, 300); ef.setLocationRelativeTo(null); ef.setVisible(true); 2 MyMouseListener mml = new MyMouseListener(ef); ef.addMouseListener(mml); ef.addMouseMotionListener(mml); ef.addComponentListener(new MyComponentListener(ef)); ef.addKeyListener(new MyKeyListener(ef)); ef.requestFocus(); ef.addWindowListener(new MyWindowListener(ef)); } } class MyWindowListener extends WindowAdapter { private JFrame frame; public MyWindowListener(JFrame f) { frame = f; } public void windowClosing(WindowEvent e) { frame.dispose(); } } class MyMouseListener extends MouseAdapter implements MouseMotionListener { private JFrame frame; // Startpunkt beim Ziehen mit gedrückter Maustaste (Dragging). private int dragStartX, dragStartY; public MyMouseListener(JFrame f) { frame = f; } public void mouseClicked(MouseEvent e) { int clickCount = e.getClickCount(); String msg; if (clickCount == 1) { msg = "Klick"; } else if (clickCount == 2) { msg = "Doppelklick"; } else { msg = clickCount + "-fach-Klick"; } frame.setTitle(msg + " an Position " + e.getX() + "/" + e.getY()); } public void mouseEntered(MouseEvent e) { frame.setTitle("Maus im Fenster"); } public void mouseExited(MouseEvent e) { frame.setTitle("Maus nicht im Fenster"); } public void mousePressed(MouseEvent e) { // Position merken, falls Dragging beginnt. dragStartX = e.getX(); dragStartY = e.getY(); } // Methoden aus MouseMotionListener public void mouseDragged(MouseEvent e) { frame.setTitle("Ziehe Maus von Position " + dragStartX + "/" + dragStartY + " zu " + e.getX() + "/" + e.getY()); } public void mouseMoved(MouseEvent e) {;} } 3 class MyComponentListener extends ComponentAdapter { private JFrame frame; public MyComponentListener(JFrame f) { frame = f; } public void componentMoved(ComponentEvent e) { frame.setTitle("Komponente wurde bewegt an Position " + frame.getX() + "/" + frame.getY() + "."); } public void componentResized(ComponentEvent e) { frame.setTitle("Komponentengröße wurde verändert. Neue Größe: " + frame.getX() + "/" + frame.getY() + "."); } } class MyKeyListener extends KeyAdapter { private JFrame frame; public MyKeyListener(JFrame f) { frame = f; } public void keyReleased(KeyEvent e) { frame.setTitle("Taste ’" + KeyEvent.getKeyText(e.getKeyCode()) + "’ gedrückt."); } } 4