Hi,
chciałem napisać program, który po utworzeniu nowego obiektu klasy ThreadFrame będzie tworzył nowy wątek rysujący ovale na formie.
Problem pojawia się gdy Tworzę nowy obiekt klasy ThreadFrame - tworzę za pewne nowe okno. Chciałbym jakoś
rozwiązać ten problem jednak nic potrafię wymyślić jak.
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JFrame;
class ThreadFrame extends JFrame implements Runnable {
public void run() {
while(true) {
Random r = new Random();
x = r.nextInt(200);
y = r.nextInt(200);
try {
Thread.sleep(180);
repaint();
} catch (InterruptedException ex) {}
}
}
public void paint(Graphics g) {
if (c == "RED")
g.setColor(Color.RED);
if (c == "GREEN")
g.setColor(Color.GREEN);
g.fillOval(x, y, 15, 15);
}
public ThreadFrame(String color) {
setSize(300, 250);
setTitle("Threadowo :D");
c = color;
}
private int x;
private int y;
public String c;
}
public class Main {
public static void main(String[] args) {
ThreadFrame x = new ThreadFrame("RED");
x.setVisible(true);
x.run();
ThreadFrame y = new ThreadFrame("GREEN");
y.setVisible(true);
y.run();
}
}
Próbowałem rozbić tworzenie klasę na dwie w jeden tworzyć ramkę a w drugiej nań rysować jednak nie potrafię połączyć tych dwu klas aby obiekt klasy powiedzmy Ball rysował na ramce pochodzącej z innego obiektu.
Oto efekt moich prób:
package javaapplication29;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;
class Ball extends JPanel {
public Ball(int arg) {
flag = arg;
setVisible(true);
repaint();
}
public void paint(Graphics g) {
Random r = new Random();
x = r.nextInt(280);
y = r.nextInt(280);
if(flag == 1)
g.setColor(Color.RED);
if(flag == 2)
g.setColor(Color.GREEN);
g.fillOval(x, y, 15, 15);
}
private int flag;
private int x;
private int y;
}
class ThreadFrame extends JFrame implements Runnable{
public ThreadFrame() {
setSize(300, 300);
setTitle("Cos");
}
public void createThread(int ar) {
arg = ar;
x = new Ball(arg);
}
public void run() {
while(true) {
try {
Thread.sleep(250);
createThread(arg);
} catch (InterruptedException ex) {}
}
}
public Ball x;
public int arg;
}
public class Main {
public static void main(String[] args) {
ThreadFrame x = new ThreadFrame();
x.setVisible(true);
x.createThread(1);
x.createThread(2);
}
}
Niestety próby się nie powiodły.
Będę wdzięczny za pomoc!
Pozdrawiam!