Я работал над проблемой, когда у меня возникала проблема с литой при попытке бросить из Shape в Area (см. Предыдущее сообщение cast exception question). Теперь кажется, что моя форма, которая создается, создается неправильно. Вместо публикации всего моего исходного кода здесь я привязываю ссылку на все исходные файлы here.Java-вызов для создания новой области не создает форму?
По существу я создаю форму следующим образом со стандартным вызовом
YingYang shape = new YingYang();
shape = shape.moveTo(x, y);
shape = shape.scaleBy(size);
shape.setColor(getNextColor());
и призывы к классу зоны являются:
public YingYang()
{
Area mainCircle = new Area(new Ellipse2D.Double(...)
...
yingYang.add(mainCircle);
}
MoveTo вызов:
public YingYang moveTo(double x, double y)
{
at.translate(x, y);
at.setToTranslation(x, y);
yingYang.transform(at);
return new YingYang(at.createTransformedShape(yingYang));
}
ScaleBy:
public YingYang scaleBy(double scale)
{
double cx = this.getBounds2D().getCenterX();
double cy = this.getBounds2D().getCenterY();
at.translate(cx, cy);
at.setToTranslation(cx, cy);
at.scale(scale, scale);
at.translate(-cx, -cy);
return new YingYang(at.createTransformedShape(yingYang));
}
Когда я называю paintComponent() в моей чертежной панели:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
for(YingYang s : shapes)
{
System.out.println(s.getBounds2D());
g2.setColor(s.getColor());
g2.fill(s);
}
}
В оператор печати печатает:
java.awt.geom.Rectangle2D$Double[x=0.0,y=0.0,w=0.0,h=0.0]
Я в недоумении ... Любые идеи?
Я вижу, что YingYang расширяет область, но также содержит поле под названием yingYang, которое также является объектом Area. Вы имеете в виду getBounds2D на поле? Может быть, мне что-то не хватает, потому что я действительно просто просматривал код, но кажется немного лишним расширить класс, а затем, главным образом, использовать поле, которое принадлежит суперклассу. В любом случае, возможно, что вы хотите сделать, это переопределить getBounds2D в YingYang, чтобы он возвращал yingYang.getBounds2D? – Radiodef
Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –