Кто поможет с двумя вопросами по java?

Ребят в общем, мы на занятиях сделали простой paint и нам задали дз. В общем мне нужна помощь с двумя вопросами.
1) Как реализовать такую систему, что перед тем как ты чертишь квадрат/окружность он отображается и ты понимаешь какого размера он будет и т.д.
2) Как реализовать заливку? Я смог закрашивать всю область, но как реализовать то, чтобы она закрашивала допустим внутренность квадрата или область вокруг него?

В общем вот вся основа, где всё рисуется:
workSpace.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                xClick = e.getX();
                yClick = e.getY();

                xN = e.getX();
                yN = e.getY();
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                g = image.getGraphics();
                g2 = (Graphics2D) g;
                g2.setColor(mainColor);

                switch (mode) {
                    case 6: //линия
                        g2.drawLine(xN, yN, e.getX(), e.getY());
                        break;
                    case 5: //квадрат
                        if (xN < e.getX() && yN < e.getY()) g2.drawRect(xN, yN, e.getX() - xN, e.getY() - yN);
                        else if (xN > e.getX() && yN <e.getY()) g2.drawRect(e.getX(), yN, xN-e.getX(), e.getY() - yN);
                        else if(xN < e.getX() && yN > e.getY()) g2.drawRect(xN, e.getY(), e.getX() - xN, yN - e.getY());
                        else g2.drawRect(e.getX(), e.getY(), xN - e.getX(), yN - e.getY());
                        break;
                    case 7: //окружность
                        if (xN < e.getX() && yN < e.getY()) g2.drawOval(xN, yN, e.getX() - xN, e.getY() - yN);
                        else if (xN > e.getX() && yN <e.getY()) g2.drawOval(e.getX(), yN, xN-e.getX(), e.getY() - yN);
                        else if(xN < e.getX() && yN > e.getY()) g2.drawOval(xN, e.getY(), e.getX() - xN, yN - e.getY());
                        else g2.drawOval(e.getX(), e.getY(), xN - e.getX(), yN - e.getY());
                        break;
                    case 4: //текст
                        workSpace.requestFocus();
                        break;
                    case 3://заливка
                        g2.setColor(mainColor);
                        g2.fillRect(0, 0, frame.getWidth(), frame.getHeight());
                        break;
                }

                workSpace.repaint();
            }
        });
        workSpace.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                g = image.getGraphics();
                g2 = (Graphics2D) g;

                g2.setColor(mainColor);

                switch (mode) {
                    case 0://карандаш
                        g2.drawLine(xClick, yClick, e.getX(), e.getY());
                        break;
                    case 1: //кисть
                        g2.setStroke(new BasicStroke(brushSize/2));
                        g2.drawLine(xClick, yClick, e.getX(), e.getY());
                        break;
                    case 2://ластик
                        g2.setColor(Color.WHITE);
                        g2.setStroke(new BasicStroke(brushSize));
                        g2.drawLine(xClick, yClick, e.getX(), e.getY());
                        break;
                }

                xClick = e.getX();
                yClick = e.getY();
                workSpace.repaint();
            }
        });
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы