Java dynamiczne tworzenie kształtów w oknie

0

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

0

Przede wszystkim, to do swojego Okna musisz dodać obiekt, który extenduje java.awt.Canvas - I definiować czym ma być, np. kwadratem
https://docs.oracle.com/javase/7/docs/api/java/awt/Canvas.html

W twojej metodzie paint uzywasz swojego obiektu canvas:

 public void paint(Graphics ob) {

        Graphics2D ob1 = (Graphics2D) ob;
ob.fillRect(left.getPosition().x, left.getPosition().y, Player.WIDTH, Player.HEIGHT); // jeśli chcesz prostokąt
offGraph.fillOval(ball.getPosition().x, ball.getPosition().y, Ball.WIDTH, Ball.HEIGHT); // jeśli chcesz owal

Tutaj left jest jest zmienna egzemplarza w mojej grze w ponga, a ball to piłeczka

public class Player extends Canvas {
  
  private Color color;
  
  public static final int HEIGHT = 200;
  
  public static final int WIDTH = 20;
  
  private Point position;
  
  private double speed;
  
  public static final double DEFAULT_SPEED = 10;
  
  private int score;
  
  public Player(Color color, Point startPosition) {
    this.setColor(color);
    this.position = startPosition;
    setBounds(position.x, position.y, WIDTH, HEIGHT);
    score = 0;
  }

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