Malowanie x prostokątów

Odpowiedz Nowy wątek
Marcin_
2007-01-14 21:44
Marcin_
0

Witam,
Mam trzy klasy:

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

public class Main {
    public static void main(String[] args) {
        R r = new R();
        r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        r.setVisible(true);
    }
}

public class R extends JFrame {
    public R() {
        P p = new P();
        Container c = getContentPane();
        c.add(p);
    }

}

public class P extends JPanel {
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        Rectangle2D bbb = new Rectangle2D.Double(10, 10, 100, 100);
        g2.draw(bbb);
}

Powyższy program powinnien namalować jeden prostokąt.
Jak zmodyfikować ten program aby malował on X prostokątów, gdzie X to liczba tych prostokątów.
Tak aby współrzędne X prostokątów były przechowywane w tablicy i wartości tej tablicy by się zmieniały, a program np. co 1 sekundę pobierał by te wartości, zmazywał już namalowane prostokąty i malował nowe z nowymi współrzędnymi.
Jeśli chodzi o zmienianie wartości tablicy, to sobie poradzę. Niestety niewiem jak sprawić by program co jakiś czas malował X prostokątów.

Pozdrawiam
Marcin

Pozostało 580 znaków

2007-01-15 11:04

Rejestracja: 14 lat temu

Ostatnio: 9 lat temu

0

Używasz wątku albo interfejsu Runable, korzystasz z metody z Sleep z odpowiednim parametrem

Pozostało 580 znaków

Marcin_
2007-01-15 18:44
Marcin_
0

Witam,
A czy mógłby ktoś przykładowo zmodyfikować podany przezemnie wcześniej program tak aby np. przesuwał (animował) jeden prostokąt.

Pozdrawiam

Pozostało 580 znaków

Marcin_
2007-01-15 19:23
Marcin_
0

Zmodyfikowałem mój program. Teraz wygląda następująco:

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

public class Main {
    public static void main(String[] args) {
        R r = new R();
        r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        r.setVisible(true);
    }
}

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

public class R extends JFrame {
    public R() {
        P p = new P();
        setSize(300,300);
        Container c = getContentPane();
        c.add(p);
    }

}

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

public class P extends JPanel {

    Rectangle2D.Float obiekty[] = new Rectangle2D.Float[10];

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;

        for(int i = 0; i < 10; i++) {
            g2.fill(obiekty[i]);
        }
    }

    P() {
        for(int i = 0; i < 10; i++) {
            obiekty[i]=new Rectangle2D.Float(i*20,10,10,10);
        }
    }
}

Program maluje 10 kwadratów. Niestety nie potrafię zastosować wątków aby malował co sekundę 1 kwadrat.
Proszę o pomoc.

Pozostało 580 znaków

2007-01-16 15:15

Rejestracja: 13 lat temu

Ostatnio: 13 lat temu

0

Kiedyś z nudów napisałem taki programik, wiec udostępnie Ci kod.

import java.util.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
public class Motylki extends JFrame{

    public Motylki(){
            Laka l = new Laka();
            getContentPane().add(l);
            setSize(500,500);
            show();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            new Thread(l).start();
    }

    public static void main(String[] args){
        new Motylki();  
    }

}
class Laka extends JPanel implements Runnable{
    int step = 10;
    long delay = 1;
    boolean pause = false;
    Motylek[] motylki = new Motylek[10];
    JLabel predkosc = new JLabel();

        public Laka(){
            setTxt();
            add(predkosc);
            addKeyListener(new P());
            initMotylki();  
        }

        public boolean isFocusTraversable(){
            return true;
        }
        private void setTxt(){
            predkosc.setText("Odświeżanie: " + delay + ", krok: " + step);
        }
        private void setPause(){
            predkosc.setText("Pause");
        }

        private void initMotylki(){
            motylki[0] = new Motylek(Color.red,200,300);
            motylki[1] = new Motylek(Color.blue,200,100);
            motylki[2] = new Motylek(Color.black,200,50);
            motylki[3] = new Motylek(Color.yellow,20,150);
            motylki[4] = new Motylek(Color.pink,20,20);
            motylki[5] = new Motylek(Color.blue,200,250);
            motylki[6] = new Motylek(Color.gray,230,200);
            motylki[7] = new Motylek(Color.white,200,200);
            motylki[8] = new Motylek(Color.red,200,200);
            motylki[9] = new Motylek(Color.orange,200,0);
        }

        public void paintComponent(Graphics g){
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            g2.setPaint(Color.green);
            Rectangle2D bg = new Rectangle2D.Double(0,0,500,500);
            g2.fill(bg);
            g2.draw(bg);

            for(int i=0;i<motylki.length;i++){
                motylki[i].newCords();
                g2.setPaint(motylki[i].getColor());
                Rectangle2D pros1 = 
                    new Rectangle2D.Double(motylki[i].getX(),motylki[i].getY(),10,10);
                g2.fill(pros1);
                g2.draw(pros1);
            }
        }

        public void run(){
            try{
                while(true){
                    Thread.sleep(delay);
                    if(pause) continue;

                repaint();  
                }

            }catch(Exception e){}
        }

private class P implements KeyListener{

    public void keyPressed(KeyEvent e){
            int code = e.getKeyCode();
            if(code == KeyEvent.VK_UP)step += 5;
            else if(code == KeyEvent.VK_DOWN)step -= 5;
            else if(code == KeyEvent.VK_LEFT)step -= 1;
            else if(code == KeyEvent.VK_RIGHT)step += 1;

            if(code == KeyEvent.VK_Q) delay += 50;
            else if(code == KeyEvent.VK_W) delay -= 50; 
            else if(code == KeyEvent.VK_A) delay += 5;
            else if(code == KeyEvent.VK_S) delay -= 5;
            else if(code == KeyEvent.VK_Z) delay += 1;
            else if(code == KeyEvent.VK_X) delay -= 1;

            if(delay<0) delay =0;
            if(delay>10000) delay = 10000;          
            if(step <1) step =1;
            if(step>50) step = 50;
            //System.out.println(step + " " + delay);
            setTxt();
        }
        public void keyReleased(KeyEvent e){    }

        public void keyTyped(KeyEvent e){
            int code = e.getKeyChar();
            if(code == 'p'){
                if(!pause){
                    pause = true;
                //  System.out.println("pause");
                    setPause();
                }
                else{
                    pause = false;
                    setTxt();
                    //System.out.println("unpause");
                }
            }
        }
}   

private class Motylek{
    private Color color;
    private double x1;
    private double y1;
    public Motylek(Color color, double x, double y){
        this.color = color;
        x1 = x;
        y1 = y;
    }

    public void newCords(){
        Random rand = new Random();
        switch(rand.nextInt(4)){
            case 0:{
                if((x1+step) <= 490) x1+=step;
                break;
            }
            case 1:{
                if((x1-step) >= 0)x1-=step;
                break;                          
            }
            case 2:{
                if((y1+step) <= 490) y1+=step;
                break;
            }
            case 3:{
                if((y1-step) >= 0) y1-=step;
                break;
            }
        }
    }

    public double getX(){
        return x1;
    }
    public double getY(){
        return y1;
    }
    public Color getColor(){
        return color;
    }

}

}

Dalej baw sie sam ;)

Pozdrawiam BookaYashee

Pozostało 580 znaków

Marcin_
2007-01-16 21:40
Marcin_
0

Witam,
Wielkie dzięki BookaYashee.
Twój przykład bardzo mi się przydał.

Pozdrawiam

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0