FAKULTÄT FÜR INFORMATIK Übungen zu Praktikum Grundlagen

Werbung
◦
◦◦◦
◦◦◦◦
◦ ◦
◦◦◦
◦◦◦◦
◦ ◦◦
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);
}
}
Herunterladen