Rysowanie punktów na układzie współrzędnych

0

Witam, chciałbym napisać program za pomocą Java Swing, do którego będę wpisywać kolejne punkty, a po kliknięciu w przycisk 'Rysuj' narysuje on te punkty na układzie współrzędnych, brakuje mi tylko rysowania tych punktów.

Szukałem na internecie poradników i jedyne do czego doszedłem to taka funkcja:

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

public class DrawPoints extends JFrame {
    private int x;
    private int y;

    public DrawPoints() {
        this.x = 0;
        this.y = 0;
    }

    public DrawPoints(int x, int y, int weight, int height) throws HeadlessException {
        this.x = x;
        this.y = y;
    }

    public void paint(Graphics g, int x, int y) {
        g.drawOval(500+(x*18), 195+(y*18), 5, 5);
    }
}

Oraz część funkcji wywołującej (póki co tylko pierwsze) dane z tablic:

if (event.getActionCommand().equals("Rysuj")) {
                DrawPoints drawPoints = new DrawPoints();
                drawPoints.paint(null, daneX.get(0), daneY.get(0));
            }

Po kliknięciu w przycisk 'Rysuj' nic się nie dzieje, co może być przyczyną?

0

NIe robiłem w SWINGU ale strzelam, że to dlatego:

drawPoints.paint(null, daneX.get(0), daneY.get(0));

Musisz podać obiekt typu Graphics, na którym mają sie pojawić te punkty, a podajesz nulla.

0

Trochę zmieniłem kod, lecz wciąż po kliknięciu 'Rysuj' nie wywołuje się funkcja repaint(), co powoduje, że nic się nie rysuje, w czym może być problem?
Mój actionPerformed ma taką treść

if (event.getActionCommand().equals("Rysuj")) {
                int x, y;

                DrawPoints drawPoints = new DrawPoints();
                File plik = new File("dane.txt");
                Scanner skan = new Scanner(plik);

                while (skan.hasNextLine()) {
                    x = skan.nextInt();
                    y = skan.nextInt();
                    drawPoints.addPoints(x, y);
                }
            }

A klasa DrawPoints wygląda tak

public class DrawPoints extends JPanel {
    private int x;
    private int y;
    ArrayList<Integer> daneX = new ArrayList<>();
    ArrayList<Integer> daneY = new ArrayList<>();

    public DrawPoints() {
    }

    public DrawPoints(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public void addPoints(int x, int y) {
        this.daneX.add(x);
        this.daneY.add(y);
        repaint();
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (int i = 0; i < daneX.size(); i++) {
            g.fillOval((daneX.get(i) * 20), (daneY.get(i) * 20), 5, 5);
        }
    }
}
1
public void addPoints(int x, int y) {
        this.daneX.add(x);
        this.daneY.add(y);
        repaint();
    }

CO to jest to repaint() ? Poza tym nigdzie nie wywołujesz metody paintComponent().

0
kixe52 napisał(a):
public void addPoints(int x, int y) {
        this.daneX.add(x);
        this.daneY.add(y);
        repaint();
    }

CO to jest to repaint() ? Poza tym nigdzie nie wywołujesz metody paintComponent().

Już naprawiłem, repaint() wywołuje funkcję paintComponent(). Cały program działa

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