Immer noch der Noob hier. Ich arbeite immer noch an meinem Mandelbrot-Programm. Weil das Ding bei großen Auflösungen extrem lange braucht, möchte ich das Bild in Stücken malen (damit die User sehen, dass es voran geht und das Programm sich nicht verabschiedet hat. Das geht, an und für sich, mit einem repaint(xstart,ystart,width,height:int).
Aber das geht nicht in Schleifen, wegen eines Threadproblems (ich denke, ich hab nur so halb verstanden, worum es dabei geht).
Ich habe versucht, das ganze mal runterzubrechen. In dem folgenden Programm sollten am Ende mehrere Rechtecke nebeneinander erscheinen, nachdem geklickt wurde (in diesem Fall ginge das natürlich auch durch eine Schleife in der paint-Methode, aber das ist ja nicht das Ziel des ganzen ).
Könnt ihr mir bitte erklären, was ich falsch mache?
(Oder mir hilfreiche Rückfragen stellen, oder so; bin für jede Hilfe dankbar.)
Aber das geht nicht in Schleifen, wegen eines Threadproblems (ich denke, ich hab nur so halb verstanden, worum es dabei geht).
Ich habe versucht, das ganze mal runterzubrechen. In dem folgenden Programm sollten am Ende mehrere Rechtecke nebeneinander erscheinen, nachdem geklickt wurde (in diesem Fall ginge das natürlich auch durch eine Schleife in der paint-Methode, aber das ist ja nicht das Ziel des ganzen ).
Könnt ihr mir bitte erklären, was ich falsch mache?
(Oder mir hilfreiche Rückfragen stellen, oder so; bin für jede Hilfe dankbar.)
Java:
package test1;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
/**
* @author rix
*
**/
public class Test1 extends JPanel implements MouseListener{
public static void main(String[] args) {
Test1 mandel;
mandel = new Test1();
}
/* Global vars */
private int width;
private int height;
private int xwidth,yheight,xstart,ystart;
private JFrame frame;
Test1(){
width = 400;
height = 300;
xstart = 50;
ystart = 50;
yheight = 250;
xwidth = 100;
/* Generate Frame */
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new MyComponent());
frame.setSize(width, height);
frame.getContentPane().setBackground(Color.BLACK);
frame.addMouseListener(this);
frame.setVisible(true);
}
/*Mouse event*/
@Override
public void mouseClicked(MouseEvent me) {
myRepaint();
}
@Override
public void mousePressed(MouseEvent me) { }
@Override
public void mouseReleased(MouseEvent me) { }
@Override
public void mouseEntered(MouseEvent me) { }
@Override
public void mouseExited(MouseEvent me) { }
class MyComponent extends JComponent {
@Override
public void paintComponent(Graphics g) {
super.paintComponent( g );
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
g2.drawRect(xstart,ystart,xwidth,yheight);
}
}
public void myRepaint() {
new Thread(){
@Override
public void run() {
while (xstart <= width) {
xstart += xwidth+1;
frame.repaint(xstart,ystart,xwidth+3,yheight+1);
}
}
}.start();
}
}