Я хотел бы иметь список фигур, который появляется в моем окне.Всякий раз, когда я изменяю размер окна, я хотел бы масштабировать все свои рисунки.
Я уже подготовил классы, которые хранят информацию о случайных фигурах в списке (прямоугольники, овалы и т. Д.).У меня нет проблем с рисованием их всех, но я не могу справиться с проблемой масштабирования.Мои решения ничего не меняют и не заставляют исчезать все формы.
public class Shape extends JPanel{
int x, y,width,height,red,green,blue;
double scX, scY; //scale x and y
public Shape(int x, int y, int width, int height, int red, int green, int blue) {
//...long constructor
scX=1;
scY=1;
}
void randomizeValues(){...}
void setScale(double x, double y) {
this.scX = x;
this.scY = y;
}
}
public class Rectangle extends Shape{
public Rectangle(int x, int y, int width, int height, int red, int green, int blue) {
super(x, y, width, height, red, green, blue);
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
graphics.fillRect((int)(x*scX), (int)(y*scY), (int)(width*scX), (int)(height*scY));
}
}
class Window extends JFrame {
int defaultWidth = 768;
int defaultHeight = 512;
List<Shape> paintList = new ArrayList<>();
public Window() {
setTitle("Shape");
add(new DrawShape);
setSize(defaultWidth, defaultHeight);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
class DrawShape extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0; i< paintList.size(); i++) {
Shape s = paintList.get(i);
s.setScale(this.getWidth()/defaultWidth, this.getHeight()/defaultHeight);
s.paintComponent(g);
}
}
}
Как сделать правильный масштабный трюк?Где я должен умножить значения, чтобы все работало хорошо?