Обновите ничью в холсте Java - PullRequest
0 голосов
/ 25 января 2012

Я хочу сделать приложение, в котором я могу нарисовать путь на холсте. Проблема в том, что мне приходится постоянно обновлять этот холст.

В настоящее время я могу это сделать, но мне приходится каждый раз перерисовывать все пути, и поэтому я должен сохранять все точки в памяти. Я бы предпочел просто обновить ничью, добавив новую точку.

Возможно ли это?

В настоящее время мой код:

public class MyCanvas extends Canvas{
        private static final long serialVersionUID = 1L;
        public MyCanvas(){}
        public void paint(Graphics graphics){
            super.paint(graphics);
            graphics.setColor(Color.green);
            // points is an ArrayList of Point2D
            for (Iterator iterator = points.iterator(); iterator.hasNext();) {
               Point2D point2d = (Point2D) iterator.next();
               graphics.fillOval((int)((canvas.getWidth()/2.0) + point2d.getX()), (int)((canvas.getHeight()/2.0) + point2d.getY()), 5, 5);
            }   
        }
    }

Спасибо!

EDIT

Это текущее решение:

PanelCanvas canvasPanel;
...
public void drawCircle(int x, int y){
    Graphics2D g2d = bufferedImage.createGraphics();
    g2d.setColor(Color.green);
    g2d.setBackground(Color.white);
    g2d.fillOval((int)((panelCanvas.getWidth() / 2.0) + x/10.0), (int)((panelCanvas.getHeight() / 2.0) + y/10.0), 5, 5);
    panelCanvas.repaint();
}

public class CanvasPanel extends JPanel{
    public void paintComponent(Graphics graphics){
        super.paintComponents(graphics);
        Graphics2D g2d = (Graphics2D)graphics;
        g2d.setBackground(Color.white);
        g2d.drawImage(bufferedImage, null, 0, 0);
    }
}

1 Ответ

5 голосов
/ 25 января 2012

Нарисуйте точки (как угодно) до BufferedImage.Во время paint() нарисуйте BufferedImage.


Обратите внимание, что JRE может рисовать тысячи объектов в краске без каких-либо визуальных артефактов или замедления.


Холст встроен в графический интерфейс Swing.Что вы предлагаете для замены AWT.Canvas?

JComponent для полной пользовательской визуализации, JPanel для пользовательской визуализации в сочетании с компонентами.Похоже, что JComponent будет лучше подходить для этого варианта использования.

Для любого из них переопределите paintComponent(Graphics) вместо paint(Graphics).В остальном совет такой же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...