Ребят в общем, мы на занятиях сделали простой 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();
}
});