Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class UniversalJPanel extends JPanel{
- protected BufferedImage image;
- protected Graphics2D g2d;
- protected int iterations = 100; // max number of iterations
- protected double realMin = -2.0; // default min real
- protected double realMax = 2.0;// default max real
- protected double imaginaryMin = -1.6; // default min imaginary
- protected double imaginaryMax = 1.6;// default max imaginary
- protected int panelHeight;
- protected int panelWidth;
- protected Point pressed, released; // points pressed and released - used to calculate drawn rectangle
- protected boolean dragged; // if is dragged - draw rectangle
- protected int recWidth, recHeight,xStart, yStart; // variables to calculate rectangle
- protected FractalWorker[] arrayOfWorkers; // array of Swing workers
- public abstract int calculateIterations(Complex c);
- public abstract double getDistance(Complex a, Complex b);
- public void paintComponent(Graphics g){
- super.paintComponent(g);
- panelHeight = getHeight();
- panelWidth = getWidth();
- image =new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB); // creating new Bufered image
- g2d= (Graphics2D) image.getGraphics();
- arrayOfWorkers= new FractalWorker[getHeight()]; // create new worker for each row and execute them
- for(int q = 0; q < getHeight(); q++ ){
- arrayOfWorkers[q] = new FractalWorker(q);
- arrayOfWorkers[q].execute();
- }
- g.drawImage(image, 0, 0, image.getWidth(), image.getWidth(), null); // draw an image
- }
- // *** getters, setters, different code//
- private class FractalWorker extends SwingWorker<Object, Object>{
- private int y; // row on which worker should work now
- private Color[] arrayOfColors; // array of colors produced by workers
- public FractalWorker( int z){
- y = z;
- }
- protected Object doInBackground() throws Exception {
- arrayOfColors = new Color[getWidth()];
- for(int q=0; q<getWidth(); q++){ // calculate and insert into array proper color for given pixel
- int iter = calculateIterations(setComplexNumber(new Point(q,y)));
- if(iter == iterations){
- arrayOfColors[q] = Color.black;
- }else{
- arrayOfColors[q] = Color.getHSBColor((float)((iter/ 20.0)), 1.0f, 1.0f );
- }
- }
- return null;
- }
- protected void done(){ // take color from the array and draw pixel
- for(int i = 0; i<arrayOfColors.length; i++){
- g2d.setColor(arrayOfColors[i]);
- g2d.drawLine(i, y, i, y);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement