Ich habe ein Programm mit drei Klassen (siehe Code)
In Test finden langwierige Berechnungen statt, deren Ergebnisse graphisch dargestellt werden sollen.
(Statt der langen Berechnungen habe ich hier nur "sleep(1000)" geschrieben)
Ich möchte, dass die Graphik nicht alle 20 Millisekunden neu gezeichnet wird (wie es durch "Timer...ActionListener...ActionEvent...repaint" geschehen würde), sondern immer nur, wenn eine Berechnung abgeschlossen ist. Das ist mir wahrscheinlich auch gelungen, aber sehr umständlich.
Kann mir jemand erklären, wie es elegant geht?
[CODE lang="java" title="Klasse: Test"]public class Test {
static int i;
public static void main(String[] args) {
new Window();
for (i=1; i<6; i++) {sleep(1000);}
}
private static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException ignored) {
}
}
}[/CODE]
[CODE lang="java" title="Klasse: Window"]import javax.swing.JFrame;
public class Window extends JFrame{
private final Panel Pan;
public Window() {
this.Pan = new Panel();
add(Pan);
pack();
setVisible(true);
}
}[/CODE]
[CODE lang="java" title="Klasse: Panel"]import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Panel extends JPanel {
private final Dimension prefSize = new Dimension(200, 300);
private Timer t;
int j;
public Panel() {
setPreferredSize(prefSize);
t = new Timer(20, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {repaint();}
}
);
j=Test.i;
t.start();
}
@Override
public void paint(Graphics g)
{
if (Test.i!=j) {
g.drawLine(50, 50+Test.i*20, 100, 100);
j=Test.i;
}
}
}[/CODE]
Danke
In Test finden langwierige Berechnungen statt, deren Ergebnisse graphisch dargestellt werden sollen.
(Statt der langen Berechnungen habe ich hier nur "sleep(1000)" geschrieben)
Ich möchte, dass die Graphik nicht alle 20 Millisekunden neu gezeichnet wird (wie es durch "Timer...ActionListener...ActionEvent...repaint" geschehen würde), sondern immer nur, wenn eine Berechnung abgeschlossen ist. Das ist mir wahrscheinlich auch gelungen, aber sehr umständlich.
Kann mir jemand erklären, wie es elegant geht?
[CODE lang="java" title="Klasse: Test"]public class Test {
static int i;
public static void main(String[] args) {
new Window();
for (i=1; i<6; i++) {sleep(1000);}
}
private static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException ignored) {
}
}
}[/CODE]
[CODE lang="java" title="Klasse: Window"]import javax.swing.JFrame;
public class Window extends JFrame{
private final Panel Pan;
public Window() {
this.Pan = new Panel();
add(Pan);
pack();
setVisible(true);
}
}[/CODE]
[CODE lang="java" title="Klasse: Panel"]import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Panel extends JPanel {
private final Dimension prefSize = new Dimension(200, 300);
private Timer t;
int j;
public Panel() {
setPreferredSize(prefSize);
t = new Timer(20, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {repaint();}
}
);
j=Test.i;
t.start();
}
@Override
public void paint(Graphics g)
{
if (Test.i!=j) {
g.drawLine(50, 50+Test.i*20, 100, 100);
j=Test.i;
}
}
}[/CODE]
Danke