Доступ к методу рендеринга графики из другого класса в Java - PullRequest
3 голосов
/ 03 июня 2011

Я создал класс с именем SimpleCanvas, который extends, класс JPanel, и я хотел бы визуализировать некоторые графические объекты на объекте SimpleCanvas.Я также создал другой класс с именем Rectangle, и я хотел бы отобразить простой объект Rectangle на объект SimpleCanvas с именем mainCanvas.Однако моя проблема в том, что я не могу понять, как получить доступ к методу render моего класса Rectangle и разрешить его вызов изнутри моего класса SimpleCanvas, когда для * вызывается событие redraw1013 * объект.

Вот мой код:

Класс SimpleCanvas:

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

public class SimpleCanvas extends JPanel {
    private int x, y, width, height;
    private Vector objects = new Vector();

    public SimpleCanvas(int x, int y, int width, int height) {
        setPosition(x, y);
        setWidth(width);
        setHeight(height);
    }

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

    public void setWidth(int width) {
        this.width = width;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public void addObject(Object object) {
        this.objects.add(object);
    }

    public void paintComponent(Graphics g) {
        for (int i = 0; i < this.objects.size(); i++) {
            this.objects.get(i).render(g);
        }
    }
}

Класс SimpleWindow:

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

public class SimpleWindow extends JFrame {
    private int x = 0;
    private int y = 0;
    private int width = 0;
    private int height = 0;
    private Color color = Color.WHITE;
    private String name = "DEFAULT_NAME";

    public SimpleWindow(int x, int y, int width, int height, Color color, String name) {
        this.name = name;
        setSize(width, height);
        setLocation(x, y);
        setBackground(color);
        setVisible(true);
    }
}

Класс прямоугольника:

import java.awt.*;

public class Rectangle {
    private int x = 0;
    private int y = 0;
    private int width = 0;
    private int height = 0;
    private Color color = Color.WHITE;
    public Rectangle(int x, int y, int width, int height, Color color) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        this.color = color;
    }
    public void render(Graphics g) {
        g.setColor(this.color);
        g.fillRect(this.x, this.y, this.width, this.height);
    }
}

Основной класс:

import java.awt.*;

public class Main {
    public static void main(String[] args) {
        SimpleWindow mainWindow = new SimpleWindow(0, 0, 640, 360, Color.WHITE, "Simple Windowing System");
        SimpleCanvas mainCanvas = new SimpleCanvas(0, 0, 640, 360);
        Rectangle mainRectangle = new Rectangle(0, 0, 50, 50, Color.BLUE);
        mainCanvas.addObject(mainRectangle);
        mainWindow.setContentPane(mainCanvas);
    }
}

Мне кажется, что я тоже мог быне подходите к проблеме рендеринга графики на объект mainCanvas.

Заранее благодарю за любую помощь!

1 Ответ

3 голосов
/ 03 июня 2011

Определите модель, которая представляет объекты, которые может отображать ваш холст, и пусть вид вызывает метод рендеринга каждого из них. Модель должна быть не чем иным, как List<Node> и List<Edge>, показанными в этом примере .

...