Cześć,
Jestem zupełnie świeży w temacie GUI i Java, ale chce napisać program okienkowy, który będzie wyświetlać dynamicznie kilka kształtów :
Kika założeń :
- narysowanie na losowej pozycji owal, kwadrat, trójkąt itd. mogą się na siebie nakładać
- nie używać jpanel( Wszędzie w internacie)
To co udało mi się nasmarować i się zaciąłem :(.
public class MainWindowDisplay extends JFrame {
private int posX, posY;
private int sideA, sideB;
private int radius;
private int red, green, blue;
int fig;
private int[] arrCol = new int[3];
public MainWindowDisplay(int width, int height, int[] colArr) {
this.setSize(width, height);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
System.out.print(this.fig);
if (colArr.length == 3) {
this.arrCol[0] = colArr[0];
this.arrCol[1] = colArr[1];
this.arrCol[2] = colArr[2];
}
}
public void paint(Graphics ob) {
Graphics2D ob1 = (Graphics2D) ob;
// ob1.clearRect(0, 0, getWidth(), getHeight());
ob1.setColor(new Color(this.arrCol[0], this.arrCol[1], this.arrCol[2]));
ob1.drawOval(this.posX, this.posY, 50, 50);
}
}
Skasowałem zbędne funkcje , zęby oszczędzić wam czas. Próbowałem dodać nowy watek w obrębie klasy SwingUtilities.invokeLater(), ale nic się nie zadziało.. nawet nie wiem jak tego szukać, Googlowalem sporo czasu.
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
int arr[] = {39, 80, 13};
SwingUtilities.invokeLater(() -> {
MainWindowDisplay Window = new MainWindowDisplay(1024, 768, arr);
Thread oval = new Thread(() -> {
while (true) {
int x = (int) (Math.random() * 1024 + 1);
int y = (int) (Math.random() * 768 + 1);
int fig = (int) (Math.random() * 2 + 1);
Window.setPosition(x, y); // Losowa pozycja na ekranie
Window.repaint(200, x, y, 100, 100);
try {
Thread.sleep((long) 1000.0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
oval.start();
});
}
}
Jedyne o co proszę to podpowiedź lub naprowadzanie gdzie robię błąd lub co powinienem doczytać aby to zadziałało.
Dzięki za przeczytanie, pozdrawiam