Изменить Graphics2D Shape - PullRequest
       12

Изменить Graphics2D Shape

0 голосов
/ 06 октября 2019

Эй, я хочу создать программу, в которой вы можете рисовать многоугольник, например, Круг, Прямоугольник, Линия. Когда я нажимал кнопку круга и рисовал Круг (1), а затем, когда я щелкал прямоугольник, он должен рисовать только прямоугольник, а не круг и прямоугольник (2). ), Когда я щелкнул Линия, она должна рисовать только Линия, а не Круг, а Прямоугольник и Линия (3).

enter image description here

public class Images extends JComponent {


    private Image image;

    private Graphics2D g2;

    private int currentX, currentY, oldX, oldY;

    public Images() {
        setDoubleBuffered(false);
    }

    protected void paintComponent(Graphics g) {
        if (image == null) {

            image = createImage(getSize().width, getSize().height);
            g2 = (Graphics2D) image.getGraphics();

            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

            clear();
        }
        g.drawImage(image, 0, 0, null);
    }


    public void line() {
        currentX = 0;
        currentY = 0;
        oldX = 0;
        oldY = 0;

        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                oldX = e.getX();
                oldY = e.getY();
            }
        });

        addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
                currentX = e.getX();
                currentY = e.getY();
                g2.draw(new Line2D.Double(oldX, oldY, currentX, currentY));
                repaint();
            }
        });
    }

    public void rectangle() {
        currentX = 0;
        currentY = 0;
        oldX = 0;
        oldY = 0;
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                oldX = e.getX();
                oldY = e.getY();
            }
        });
        addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
                currentX = e.getX();
                currentY = e.getY();
                g2.draw(new Rectangle2D.Double(oldX, oldY, currentX - oldX, currentY - oldY));
                repaint();
            }
        });
    }
    public void circle() {
        currentX = 0;
        currentY = 0;
        oldX = 0;
        oldY = 0;
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                oldX = e.getX();
                oldY = e.getY();
            }
        });
        addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
                currentX = e.getX();
                currentY = e.getY();
                g2.draw(new Ellipse2D.Double(oldX, oldY, (currentX - oldX), (currentX - oldX)));
                repaint();
            }});}}

1 Ответ

1 голос
/ 06 октября 2019

Вы получаете все ранее выбранные фигуры, потому что их события mousedown / mouseup по-прежнему связаны.

Простой способ решить эту проблему - отслеживать ваши MouseAdapters (добавлять их в список при привязке). их) и удалите их (впоследствии очистив список) при переключении инструментов.

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