public class Test
{
public static void main (String args[])
{
double r = 4.5;
double u = Math.PI * r;
System.out.println(
"Der Umfang eines Kreises mit Radius " + r + " ist " + u);
}
}
Das Ergebnis -727379968 wegen eines int-Überlaufs.
Das Ergebnis ist -1.1102230246251565E-16, weil 0.1 imBinärsystem nicht exakt darstellbar ist. Ein Testprogramm ist etwa
System.out.println(0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1-1.0);
public class Test
{
public static void main (String args[])
{
double e = Math.exp(1.0);
int n = 10;
double r = Math.pow(1 + 1.0 / n, n);
System.out.println(r + ", " + (e - r));
n = 100;
r = Math.pow(1 + 1.0 / n, n);
System.out.println(r + ", " + (e - r));
n = 1000;
r = Math.pow(1 + 1.0 / n, n);
System.out.println(r + ", " + (e - r));
n = 10000;
r = Math.pow(1 + 1.0 / n, n);
System.out.println(r + ", " + (e - r));
}
}
Die Ausgabe ist
2.5937424601000023, 0.12453936835904278 2.7048138294215285, 0.01346799903751661 2.7169239322355936, 0.0013578962234515046 2.7181459268249255, 1.35901634119584E-4
Man beachte Also genügt n=1000.
System.out.println((char)27);
(x>=1) && (x<=2)
Das Ergebnis ist NaN (Not a Number).
public class Test
{
public static void main (String args[])
{
double sum=0;
for (int i=1; i<100; i++) sum+=i*i;
System.out.println(sum);
}
}
public class Test
{
public static void main (String args[])
{
int n=27;
while (n!=1)
{
System.out.println(n);
if (n%2==0) n=n/2;
else n=3*n+1;
}
}
}
public class Test
{
public static void main (String args[])
{
int a=1,b=1;
for (int i=3; i<=20; i++)
{
int c=a+b;
System.out.println(c);
a=b; b=c;
}
}
}
public class Test
{
public static void main (String args[])
{
double x=0;
while (true)
{
System.out.println(x);
x=Math.cos(x);
}
}
}
public class Test
{
public static void main (String args[])
{
double x=0,old=x;
do
{
System.out.println(x);
old=x;
x=Math.cos(x);
}
while (Math.abs(x-old)>1e-13);
}
}
Gegen welchen Wert konvergiert das wohl?
public class Test
{
static public void main (String args[])
{
int n = 10000; // Anzahl der Zufallszahlen
double R[] = new double[n]; // erzeugt Platz fuer n Zahlen
// Zufallszahlen:
for (int i = 0; i < n; i++)
R[i] = Math.random();
// erzeuge Zufallszahlen
// Mittelwert:
double sum = 0;
for (double x : R)
sum += x; // berechne Summe
double mean = sum / n;
System.out.println("Mittelwert : " + mean);
// Stichprobenabweichung:
sum = 0;
for (double x : R)
sum += (mean - x) * (mean - x);
// berechne Varianz
System.out.println("Standard-Abweichung : "
+ Math.sqrt(sum / (n - 1)));
// Verteilung:
int m = 10;
int I[] = new int[m]; // Platz fuer m Zaehler
for (int i = 0; i < m; i++)
I[i] = 0; // mit 0 initialisieren
for (double x : R) // zaehlen
{
int j = (int) Math.floor(x * m);
// in welchem Intervall liegt R[i]?
if (j >= m)
j = m - 1; // falls R[i]==1.0
I[j]++; // erhoehe Zaehler
}
// Ausgabe:
for (int j = 0; j < m; j++) // Ausgabe der Zaehlungen
System.out.println((j + 1) + " : " + I[j]);
}
}
public class Test
{
public static void main (String args[])
{
int n=1000;
double R[]=new double[n];
int i;
for (i=0; i<n; i++) R[i]=Math.random();
double max=R[0];
for (i=1; i<n; i++)
if (R[i]>max) max=R[i];
System.out.println(max);
}
}
public class Test
{
public static void main (String args[])
{
int i,n=1000;
double max=Math.random();
for (i=1; i<n; i++)
{
double h=Math.random();
if (h>max) max=h;
}
System.out.println(max);
}
}
public class Test
{
public static void main (String args[])
{
int i, n = 1000;
double R[] = new double[1000];
for (i = 0; i < n; i++)
R[i] = Math.random();
double max1, max2;
if (R[0] > R[1])
{
max1 = R[0];
max2 = R[1];
} else
{
max2 = R[0];
max1 = R[1];
}
for (i = 2; i < n; i++)
{
if (R[i] > max1)
{
max2 = max1;
max1 = R[i];
} else if (R[i] > max2)
max2 = R[i];
}
System.out.println(max1);
System.out.println(max2);
}
}
Bei dieser Aufgabe muß man darauf achten, von hinten nach vorne zu rechnen, da sonst das noch Benötigte überschrieben wird.
public class Test
{
public static void main (String args[])
{
int n=20;
int p[]=new int[n];
p[0]=1;
int i,j;
for (i=1; i<n; i++)
{
for (j=0; j<i; j++) System.out.print(p[j]+" ");
System.out.println();
p[i]=1;
for (j=i-1; j>=1; j--) p[j]=p[j]+p[j-1];
p[0]=1;
}
}
}
public class Test
{
public static void main (String args[])
{
int i,n=100;
double y[]=new double[n+1];
for (i=0; i<=n; i++) y[i]=Math.cos(i*0.01);
double sum=0;
for (i=0; i<=n; i++) sum+=y[i];
System.out.println(sum*0.01);
sum=y[0]+4*y[1]+y[n];
for (i=2; i<n; i+=2) sum+=2*y[i]+4*y[i+1];
System.out.println(sum*0.01/3);
System.out.println(Math.sin(1));
}
}
public class Test
{
static public void main (String args[])
{
System.out.println(cosh(1.5));
}
static double sinh (double x)
{
return (Math.exp(x) - Math.exp(-x)) / 2;
}
static double cosh (double x)
{
return (Math.exp(x) + Math.exp(-x)) / 2;
}
}
public class Test
{
static public void main (String args[])
{
double R[] = new double[1000];
for (int i = 0; i < R.length; i++)
R[i] = Math.random();
System.out.println(max(R));
}
static double max (double x[])
{
double m = x[0];
for (int i = 1; i < x.length; i++)
if (m < x[1])
m = x[1];
return m;
}
}
public class Test
{
static public void main (String args[])
{
System.out.println((int) choose(49, 6));
}
static double fak (int n)
{
double r = 1;
for (int i = 2; i <= n; i++)
r *= i;
return r;
}
static double choose (int n, int k)
{
return fak(n) / (fak(k) * fak(n - k));
}
}
public class Test
{
static public void main (String args[])
{
System.out.println((int) choose(49, 6));
}
static double choose (int n, int k)
{
if (k > n / 2)
k = n - k;
double r = 1;
for (int i = 1; i <= k; i++)
r *= (n - i + 1) / (double) i;
return r;
}
}
public class Test
{
static public void main (String args[])
{
System.out.println(pow(2, 10));
}
static double pow (double x, int n)
{
if (n == 0)
return 1;
else if (n % 2 == 0)
return sqr(pow(x, n / 2));
else
return x * sqr(pow(x, n / 2));
}
static double sqr (double x)
{
return x * x;
}
}
public class Test
{
static public void main (String args[])
{
System.out.println(ggt(52, 273));
}
static int ggt (int n, int m)
{
if (m == 1 || n == 1)
return 1;
else
{
int r = n % m;
if (r != 0)
return ggt(m, r);
else
return m;
}
}
}
class Koord
{
private double X, Y;
public Koord (double x, double y)
{
X = x;
Y = y;
}
public double x ()
{
return X;
}
public double y ()
{
return Y;
}
public void set (double x, double y)
{
X = x;
Y = y;
}
}
class Punkt extends Koord
{
public Punkt (double x, double y)
{
super(x, y);
}
}
class Kreis extends Koord
{
private double R;
public Kreis (double x, double y, double r)
{
super(x, y);
R = r;
}
double r ()
{
return R;
}
void set (double x, double y, double r)
{
super.set(x, y);
R = r;
}
}
public class Test
{
static public void main (String args[])
{
Kreis k = new Kreis(0.5, 0.5, 0.5);
int count = 0, n = 1000000;
for (int i = 0; i < n; i++)
{
Punkt p = new Punkt(Math.random(), Math.random());
if (contains(k, p))
count++;
}
System.out.println((double) count / n);
System.out.println(Math.PI / 4);
}
static boolean contains (Kreis k, Punkt p)
{
if (Math.sqrt(sqr(k.x() - p.x()) + sqr(k.y() - p.y())) < k.r())
return true;
else
return false;
}
static double sqr (double x)
{
return x * x;
}
}
public class Test
{
public static void main (String args[])
{
int n=1000000;
BitSet b=new BitSet(n+1);
int i,j;
for (i=0; i<=n; i++) b.set(i);
for (i=2; i<n; i++)
{
if (b.get(i))
for (j=2*i; j<=n; j+=i) b.clear(j);
}
int count=0;
for (i=2; i<n; i++)
if (b.get(i)) count++;
System.out.println(count);
}
}
import java.util.BitSet;
public class Test
{
public static void main (String args[])
{
int n=1000000;
BitSet b=new BitSet(n/2);
int i,j,k;
for (k=0; k<=n/2; k++) b.set(k);
double max=Math.sqrt(n);
for (k=0,i=3; i<n && k<max; i+=2,k++)
{
if (b.get(k))
for (j=k+i; j<n/2; j+=i) b.clear(j);
}
int count=0;
for (k=0; k<n/2; k++)
if (b.get(k)) count++;
System.out.println(count+1);
}
}
Man beachte, daß nun Bit k für die Zahl 2k+1 steht.
public class Test
{
public static void main (String args[])
{
System.out.println(isPalindrom(args[0]));
}
public static boolean isPalindrom (String s)
{
int i = 0, n = s.length() - 1;
while (i < n)
{
if (s.charAt(i) != s.charAt(n))
return false;
i++;
n--;
}
return true;
}
}
public class Test
{
public static void main (String args[])
{
System.out.println(simplify(args[0]));
}
public static String simplify (String s)
{
StringBuffer b = new StringBuffer();
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
b.append(c);
while (i < s.length() - 1 && c == s.charAt(i + 1))
i++;
}
return b.toString();
}
}
import java.util.*;
public class Test
{
static public void main (String args[])
{
int n = 1000;
// Array einrichten:
ArrayList<Double> L = new ArrayList<Double>();
for (int i = 0; i < n; i++)
L.add(Math.random());
// Mittelwert berechnen:
double sum = 0;
for (Double x : L)
sum += x.doubleValue();
System.out.println(sum / n);
// Alle x<0.5 entfernen:
Iterator<Double> x = L.iterator();
while (x.hasNext())
{
if (x.next().doubleValue() < 0.5)
x.remove();
}
// Größe ausgeben:
System.out.println(L.size());
}
}
public class Test
{
public static void main (String args[])
{
int n=1000;
LinkedList<Double> L=new LinkedList<Double>();
for (int i=0; i<1000; i++) L.add(Math.random());
// automatische Umwandlung!
ArrayList<Double> A=new ArrayList<Double>();
A.addAll(L);
System.out.println(A.size());
}
}
import java.awt.BasicStroke;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
class SinCosCanvas extends Canvas
{
private int width, height;
public double xmin = -10, ymein = -2, xmax = 10, ymax = 2;
// Die Plotkoordinaten in der mathematischen Ebene
@Override
public void paint (Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
// Anti-alias the graphics context
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setStroke(new BasicStroke(3));
Dimension d = getSize();
width = d.width;
height = d.height;
// Zeichne:
int c1 = col(xmin), r1 = row(f(xmin)), c2, r2;
// c1,c2 sind jeweils die alten Koordinaten
// (also die Anfangspunkte der Linien)
for (int i = 0; i < width; i += 10)
{
double x = xmin + (xmax - xmin) / width * i;
double y = f(x);
c2 = col(x);
r2 = row(y);
g2.drawLine(c1, r1, c2, r2);
c1 = c2;
r1 = r2;
}
}
// Die Funktion, die geplottet wird:
double f (double x)
{
if (Math.abs(x) < 1e-10)
return 1.0;
else
return Math.sin(x) / x;
}
// Umrechnung von x-Koordinate in Bildschirmspalte
private int col (double x)
{
return (int) ((x - xmin) / (xmax - xmin) * width);
}
// Umrechnung von y-Koordinate in Bildschirmzeile
private int row (double y)
{
return (int) ((ymax - y) / (ymax - ymein) * height);
// Man beachte die Umkehrung dieser Koordinate
}
}
class SinCosTestFrame extends JFrame
{
public SinCosTestFrame ()
{
super("Test Frame");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new SinCosCanvas());
}
}
public class SinCosPlot
{
public static void main (String args[])
{
JFrame F = new SinCosTestFrame();
F.setSize(600, 600);
F.setLocationRelativeTo(null);
F.setVisible(true);
}
}
import java.awt.*;
class TestCanvas extends Canvas
{
public void paint (Graphics g)
{
Dimension d = getSize();
int w = d.width, h = d.height;
Color C;
for (int i = 0; i < w; i++)
{
float x = (float) i / w;
C = new Color(x, x, x);
g.setColor(C);
g.drawLine(i, 0, i, h - 1);
}
}
}
public class Test
{
public static void main (String args[])
{
Frame F = new Frame();
F.setSize(300, 300);
F.add(new TestCanvas());
F.setVisible(true);
}
}
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
class TestCanvas extends Canvas
{
@Override
public void paint (Graphics g)
{
Dimension d = getSize();
int w = d.width, h = d.height;
g.drawLine(0, 0, w - 1, h - 1);
g.drawLine(0, h - 1, w - 1, 0);
g.drawRect(0, 0, w - 1, h - 1);
}
@Override
public Dimension getPreferredSize ()
{
return new Dimension(20, 20);
}
}
public class Test
{
public static void main (String args[])
{
JFrame F = new JFrame();
F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
F.setSize(300, 300);
F.setLocationRelativeTo(null);
F.setLayout(new BorderLayout());
F.add("North", new TestCanvas());
F.add("East", new TestCanvas());
F.add("West", new TestCanvas());
F.add("South", new TestCanvas());
F.add("Center", new TestCanvas());
F.setVisible(true);
}
}
import java.util.Collections;
import java.util.Random;
import java.util.Vector;
/**
* IntArray contains an array of int with unspecified length.
*/
class IntArray implements Comparable<IntArray>
{
// content
public int[] v;
/**
* Create an IntArray with this size
*
* @param size
*/
public IntArray (int size)
{
v = new int[size];
}
/**
* Format like: "5 6 4 3 2 "
*/
@Override
public String toString ()
{
String s = "";
for (int i : v)
s = s + i + " ";
return s;
}
// Static random for the makeRandom function
static Random random = new Random();
/**
* Create a random IntArray
*
* @param max
* @param maxsize
* @return
*/
public static IntArray makeRandom (int max, int maxsize)
{
// size between 1 and maxsize
int size = random.nextInt(maxsize) + 1;
IntArray intarray = new IntArray(size);
// set random elemets
for (int i = 0; i < size; i++)
intarray.v[i] = random.nextInt(max);
return intarray;
}
/**
* Compare this IntArray to an other, alphabetically. If they are equal up
* to the shorter one, the longer one is greater.
*
* @param other
* @return -1 if this one is smaller, 0 if equal, 1 if this one is larger
*/
@Override
public int compareTo (IntArray other)
{
// Compare all elements of v up to the length of the other
for (int i = 0; i < v.length; i++)
{
// equal, but the this one is longer
if (i >= other.v.length)
return 1;
// one element of this one is smaller
if (v[i] < other.v[i])
return -1;
// one element of this one is bigger
if (v[i] > other.v[i])
return 1;
}
// equal, but the other is onger
if (v.length < other.v.length)
return -1;
// equal and equal size
return 0;
}
}
public class IntArraySortTest
{
public static void main (String args[])
{
// create a Vector for IntArrays
Vector<IntArray> test = new Vector<IntArray>();
// create 20 random ones
for (int i = 0; i < 20; i++)
test.add(IntArray.makeRandom(5, 5));
// sort
Collections.sort(test);
// print all
for (IntArray v : test)
System.out.println(v);
}
}
import java.awt.Canvas;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class TestCanvas extends Canvas implements MouseListener
{
private int x = -100, y = -100;
public TestCanvas ()
{
addMouseListener(this);
}
@Override
public void paint (Graphics g)
{
g.drawRect(x - 10, y - 10, 20, 20);
}
@Override
public void mousePressed (MouseEvent e)
{
x = e.getX();
y = e.getY();
repaint();
}
@Override
public void mouseReleased (MouseEvent e)
{
}
@Override
public void mouseEntered (MouseEvent e)
{
}
@Override
public void mouseExited (MouseEvent e)
{
}
@Override
public void mouseClicked (MouseEvent e)
{
}
}
class TestFrame extends Frame
{
public TestFrame ()
{
super("Test Frame");
setSize(300, 300);
add(new TestCanvas());
setVisible(true);
addWindowListener(
new WindowAdapter()
{
@Override
public void windowClosing (WindowEvent e)
{
dispose();
System.exit(0);
}
});
}
}
public class Test
{
public static void main (String args[])
{
new TestFrame();
}
}
oder mit einem MouseAdapter
class TestCanvas extends Canvas
{
private int x = -100, y = -100;
public TestCanvas ()
{
addMouseListener(
new MouseAdapter()
{
@Override
public void mousePressed (MouseEvent e)
{
x = e.getX();
y = e.getY();
repaint();
}
});
}
@Override
public void paint (Graphics g)
{
g.drawRect(x - 10, y - 10, 20, 20);
}
}
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
class TestFrame extends JFrame
{
public TestFrame ()
{
super("Test Frame");
setSize(300, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
addKeyListener(
new KeyAdapter()
{
@Override
public void keyPressed (KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
{
dispose();
System.exit(0);
}
}
});
}
}
public class Test
{
public static void main (String args[])
{
new TestFrame();
}
}
import java.awt.Canvas;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
class TestCanvas extends Canvas
{
public TestCanvas ()
{
addKeyListener(
new KeyAdapter()
{
@Override
public void keyPressed (KeyEvent e)
{
System.out.println("Canvas: " + e);
}
});
}
}
class TestFrame extends JFrame
{
public TestFrame ()
{
super("Test Frame");
setSize(300, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new TestCanvas());
setVisible(true);
addKeyListener(
new KeyAdapter()
{
@Override
public void keyPressed (KeyEvent e)
{
System.out.println("Frame: " + e);
}
});
}
}
public class Test
{
public static void main (String args[])
{
new TestFrame();
}
}
Zunächst gehen die Ereignisse an das Fenster. Nach einem Klick in das Fenster ist es immer das Canvas, die den Focus hat. Wenn man zwei Canvas in den Frame setzt, so bleibt der Focus beim ersten.
Um zu erreichen, daß der Frame Tastatur-Ereignisse erhält, registriert man einfach das Fenster als Key-Listener des Canvas. Damit das Canvas sofort den Focus erhält, gibt es die Methode requestFocus().
import java.awt.Canvas;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
class TestCanvas extends Canvas
{
}
class TestFrame extends JFrame
{
public TestFrame ()
{
super("Test Frame");
setSize(300, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TestCanvas canvas = new TestCanvas();
add(canvas);
setVisible(true);
canvas.addKeyListener(
new KeyAdapter()
{
@Override
public void keyPressed (KeyEvent e)
{
System.out.println("Frame: " + e);
}
});
canvas.requestFocus();
}
}
public class Test
{
public static void main (String args[])
{
new TestFrame();
}
}
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
class Test extends JFrame
{
public Test ()
{
super("Test Frame");
setSize(300, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Canvas canvas;
setLayout(new BorderLayout());
add("Center", canvas = new Canvas());
add("South", new TextField());
setVisible(true);
canvas.addKeyListener(
new KeyAdapter()
{
@Override
public void keyPressed (KeyEvent e)
{
dispose();
System.exit(0);
}
});
}
public static void main (String args[])
{
new Test();
}
}
Die Antwort heißt: Nein.
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
class TestCanvas extends Canvas
{
public TestCanvas ()
{
addKeyListener(
new KeyAdapter()
{
@Override
public void keyPressed (KeyEvent e)
{
System.out.println("Canvas :" + e);
}
});
addMouseListener(
new MouseAdapter()
{
@Override
public void mousePressed (MouseEvent e)
{
requestFocus();
}
});
}
}
class Test extends JFrame
{
public Test ()
{
super("Test Frame");
setSize(300, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TestCanvas canvas;
setLayout(new BorderLayout());
add("Center", canvas = new TestCanvas());
add("South", new TextField());
setVisible(true);
canvas.addKeyListener(
new KeyAdapter()
{
@Override
public void keyPressed (KeyEvent e)
{
dispose();
System.exit(0);
}
});
}
public static void main (String args[])
{
new Test();
}
}
Die Antwort heißt: Ja.
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
class PaintCanvas extends Canvas
{
Color C;
int X, Y;
public PaintCanvas ()
{
// Starts dragging if the button is down inside the canvas.
addMouseListener(
new MouseAdapter()
{
@Override
public void mousePressed (MouseEvent e)
{
X = e.getX();
Y = e.getY();
}
});
// Allows to follow dragging of the mouse.
addMouseMotionListener(
new MouseMotionAdapter()
{
@Override
public void mouseDragged (MouseEvent e)
{
Graphics g = getGraphics();
g.setColor(C);
g.drawLine(X, Y, e.getX(), e.getY());
X = e.getX();
Y = e.getY();
g.dispose();
}
});
setBackground(Color.black);
}
public void setColor (Color c)
{
C = c;
}
}
class TestFrame extends JFrame
implements ItemListener
{
String strings[] =
{ "white", "blue", "red", "green", "yellow", "pink" };
Color colors[] =
{ Color.white, Color.blue, Color.red, Color.green,
Color.yellow, Color.pink };
JComboBox<String> choice;
PaintCanvas canvas;
public TestFrame ()
{
super("Test");
setLayout(new BorderLayout());
add("Center", canvas = new PaintCanvas());
canvas.setColor(colors[0]);
JPanel center = new JPanel();
center.add(choice = new JComboBox<String>());
for (int i = 0; i < strings.length; i++)
choice.addItem(strings[i]);
choice.addItemListener(this);
choice.setSelectedItem(strings[0]);
add("South", center);
addWindowListener(
new WindowAdapter()
{
@Override
public void windowClosing (WindowEvent e)
{
dispose();
System.exit(0);
}
});
setSize(600, 600);
setLocationRelativeTo(null);
setVisible(true);
}
@Override
public void itemStateChanged (ItemEvent e)
{
int i = choice.getSelectedIndex();
if (i >= 0)
canvas.setColor(colors[i]);
}
}
public class Test
{
public static void main (String args[])
{
new TestFrame();
}
}

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* Ein Thread, der alle 1000 msec aktiv wird.
*/
class RedrawThread extends Thread
{
JPanel canvas;
boolean stop = false;
public RedrawThread (JPanel canvas)
{
this.canvas = canvas;
start();
}
@Override
public void run ()
{
while (!stop)
{
try // Notwendig!
{
sleep(1000); // Warte 1 Sekunde
}
catch (Exception ex)
{
}
canvas.repaint();
}
}
}
class Display extends JPanel
{
int w, h;
public Display ()
{
setPreferredSize(new Dimension(300, 300));
// Setze Panel auf Double Buffered
setDoubleBuffered(true);
}
@Override
public void paint (Graphics graphics)
{
Graphics2D g = (Graphics2D) graphics;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// Wegen Double Buffer müssen wir selber löschen
w = getWidth();
h = getHeight();
g.clearRect(0, 0, w, h);
g.setColor(Color.gray.brighter());
g.fillOval(0, 0, w - 1, h - 1);
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
hand(g, (hour / 12.0 + minute / 720.0), 0.6,
Color.blue.darker(), 4);
hand(g, minute / 60.0, 0.8, Color.blue.darker(), 3);
hand(g, second / 60.0, 0.75, Color.green.darker(), 2);
}
public void hand (Graphics2D g, double w, double l, Color c, int width)
{
g.setColor(c);
g.setStroke(new BasicStroke(width));
double x1, y1, x2, y2;
w = Math.PI / 2 - 2 * w * Math.PI;
x1 = -Math.cos(w) * 0.1;
y1 = -Math.sin(w) * 0.1;
x2 = Math.cos(w) * l;
y2 = Math.sin(w) * l;
g.drawLine(col(x1), row(y1), col(x2), row(y2));
}
public int col (double x)
{
return (int) (x * w / 2 + w / 2);
}
public int row (double y)
{
return h - (int) (y * h / 2 + h / 2);
}
}
public class Test extends JFrame
{
RedrawThread redraw;
public Test ()
{
super("Clock");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setIconImage(new javax.swing.ImageIcon(
getClass().getResource("hearts32.png")).getImage());
Display display = new Display();
add("Center", display);
redraw = new RedrawThread(display);
addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing (WindowEvent e)
{
redraw.stop = true;
}
});
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public static void main (String args[])
{
new Test();
}
}