componentsDemo
Dieses Beispiel zeigt das Anlagen von zusätzlichen Komponenten zu Graphic.
Dabei werden ein JLabel, ein JTextField und ein JButton eingebaut.
Als Anwendung dient die zufällige Bewegung eines Punktes (random walk).
Bild
Code
package book;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import plotter.Graphic;
import plotter.LineStyle;
import plotter.Plotter;
import plotter.Sleep;
public class GraphicComponents implements ActionListener {
private Graphic graphic = new Graphic("GraphicComponents");
private Plotter plotter = graphic.getPlotter();
private JButton startButton = new JButton("Start");
private JTextField pos = new JTextField("0, 0");
private double x = 0;
private double y = 0;
private double N = 5;
private int sleepTime = 300;
public static void main(String[] args) {
GraphicComponents g = new GraphicComponents();
g.start();
}
private void start() {
graphic.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
plotter.setStatusLine("");
plotter.setRange(-N, N);
plotter.setDataLineStyle(LineStyle.BOTH);
plotter.setSymbolSize(4);
graphic.addNorthComponent(new JLabel(" Position: "));
graphic.addNorthComponent(pos);
graphic.addSouthComponent(startButton);
startButton.addActionListener(this);
graphic.pack();
}
@Override
public void actionPerformed(ActionEvent e) {
new Thread() {
public void run() {
for (;;) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
plotter.add(x, y);
pos.setText(String.format("%.3f; %.3f", x, y));
plotter.repaint();
}
});
x = randomMove(x);
y = randomMove(y);
Sleep.sleep(sleepTime);
}
}
}.start();
}
private double randomMove(double v) {
v += Math.random() - 0.5;
if (v < -N)
return -N;
if (v > N)
return N;
return v;
}
}