◦ ◦◦◦ ◦◦◦◦ ◦ ◦ ◦◦◦ ◦◦◦◦ ◦ ◦◦ TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen Praktikum Grundlagen der Programmierung F. Forster, M. Petter Übungen zu WS 2006/2007 Lösungsvorschläge zu Blatt 12 29. Januar 2007 Praktikum Grundlagen der Programmierung Aufgabe 49 Applets: Album (Lösungsvorschlag) a) HTML-Code: album.html <html> <head> <title>Album </title> </head> <body> <h1> Album </h1> <applet codebase="." code=" Album . class " width=500 height=300 alt=" Your browser has to be Java - enabled to see the applet !" > <param name=" urls" value=" mac . jpeg : tux . jpeg: windows . jpeg"/ > </applet> </body> </html> b) Applet-Code: Album.java import import import import import java. applet . Applet ; java. awt .*; java. awt . event .*; java. util .*; java. util . List ; public class Album extends Applet implements ActionListener { int crt = 0; Label label; Button prev , next ; String [] titles ; Image [] imgs ; public void init () { List < String > urls = new LinkedList < String >(); StringTokenizer t = new StringTokenizer( getParameter(" urls"), ":" ); while (t. hasMoreTokens()) urls . add (t. nextToken ()); setBackground( Color . white ); setFont (new Font(" SansSerif " , Font . BOLD , 18)); label = new Label (); add (label); prev = new Button (" Prev" ); prev. setBackground( Color . orange ); prev. addActionListener(this); add ( prev ); next = new Button (" Next" ); next. setBackground( Color . orange ); next. addActionListener(this); add ( next ); Lösung 12/ Seite 2 MediaTracker tracker = new MediaTracker(this); int id = 0; titles = new String [ urls. size ()]; imgs = new Image [ urls . size ()]; for( String url : urls ) { titles [ id ] = url ; imgs [id ] = getImage ( getDocumentBase() , url ); tracker . addImage ( imgs [ id ],id ); id ++; } label. setText ( titles [0]); try { tracker . waitForAll (); } catch ( InterruptedException ex ) {} } public void paint ( Graphics page ) { page. drawImage ( imgs [ crt ] ,100 ,100 ,this); } public void actionPerformed( ActionEvent e) { if(e. getSource ()== next ) crt = ( crt +1)% imgs . length ; else crt = ( crt + imgs . length -1)% imgs . length ; label. setText ( titles [ crt ]); repaint (); } } Test durch Aufrufen der HTML-Datei im WWW-Browser oder mit appletviewer. Lösung 12/ Seite 3 Aufgabe 50 GUI: Puzzle (Lösungsvorschlag) import java. util . Random ; import java. awt .*; import java. awt . event .*; public class Puzzle extends Frame { class Teil extends Button { private int pos ; public Teil(int n, int p) { super("" + n ); setSize (40 ,40); setPos (p ); addActionListener(new ActionListener(){ public void actionPerformed( ActionEvent e) { bewegeZuFreierPosition(); } }); } public void bewegeZuFreierPosition() { if ( ( freieStelle / breite == pos / breite // gleiche Zeile && Math . abs ( freieStelle - pos ) <= 1 ) || ( freieStelle % breite == pos % breite // gleiche Spalte && Math . abs ( freieStelle - pos ) <= breite ) ) { int tmp = freieStelle ; freieStelle = pos ; setPos ( tmp ); } } public void setPos (int p) { pos = p; setLocation (40 + 40 * ( pos % breite ), 40 + 40 * ( pos / breite )); } } static private Random random = new Random ( System . currentTimeMillis()); private Teil [] teile ; private int breite , freieStelle ; public Puzzle (int breite ) { super(" Puzzle " ); this. breite = breite ; freieStelle = breite * breite - 1; setLayout (null); setSize (80 + 40 * breite , 80 + 40 * breite ); teile = new Teil [ breite * breite - 1]; for(int i =1; i < breite * breite ; i ++) { Teil teil = teile [i -1] = new Teil(i ,i -1); add ( teil ); } addWindowListener(new WindowAdapter () { public void windowClosing( WindowEvent e) { System . exit (0); } }); pack (); } public void shuffle () { for (int i = 0; i < 100 * breite ; i ++) { int pos = random . nextInt ( breite * breite -1); teile [ pos ]. bewegeZuFreierPosition(); } } public static void main ( String [] argv ){ int breite = 4; try { breite = Integer . parseInt ( argv [0]); } catch ( Exception e) { } Puzzle p = new Puzzle ( breite ); p. shuffle (); p. setVisible (true); } }