Я использую среды IDE NetBeans для создания Gui тогда я настроить Jpanel2 и рисовать многоугольник на нем это фрагмент кодаКоординация JavaSwing по проблеме JPanel?
INT [] polygonXs = {151, 153, 158, 159, 154};
int [] polygonYs = {6, 1, 3, 8, 10};
Форма формы = новый многоугольник (polygonXs, polygonYs, polygonXs.length);
Тогда проблема заключается в том, что точка (151,6) (153,1) (158,3) (159,8) (154,10) находится в координатах JFrame.
В дополнение теперь (0,0) находится в верхнем левом углу JFrame, но я хочу (0,0) находиться в левом верхнем углу Jpanel2 (черный фон). Итак, как исправить это (код Jpanel2 ниже изображения).
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import javax.swing.JPanel;
public class J2d1 extends JPanel{
public static final String TITLE = "Affine Transform Demo";
int[] polygonXs = { 151, 153, 158, 159, 154};
int[] polygonYs = { 6, 1, 3, 8, 10};
Shape shape = new Polygon(polygonXs, polygonYs, polygonXs.length);
double x = 50.0, y = 50.0;
public void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(Color.BLACK);
Graphics2D g2d = (Graphics2D)g;
AffineTransform saveTransform = g2d.getTransform();
AffineTransform identity = new AffineTransform();
g2d.setTransform(identity);
g2d.setColor(Color.green);
g2d.fill(shape);
g2d.translate(x, y);
g2d.scale(2.2, 2.2);
g2d.fill(shape);
for(int i = 0; i < 5; ++i){
g2d.translate(50.0, 5.0);
g2d.setColor(Color.blue);
g2d.fill(shape);
g2d.rotate(Math.toRadians(15.0));
g2d.setColor(Color.RED);
g2d.fill(shape);
}
g2d.setTransform(saveTransform);
}
}
1) Чтобы лучше помочь, опубликуйте [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверенный пример) или [SSCCE] (http://www.sscce.org/) (Короткий, самосохраненный, правильный пример). 2) Используйте комбинацию экземпляров «AffineTransform» для изменения системы координат. –
BTW - похоже, вы уже начали экспериментировать с экземплярами 'AffineTransform', но код выше имел бы такой же эффект, как если бы вы этого не сделали. –
Сторона примечания (также @AndrewThompson): Нужно ** никогда ** не вызывайте 'g2d.setTransform (...)' с аффинным преобразованием, которое было создано вручную (даже с преобразованием идентичности). Дополнительную информацию см. В JavaDoc этого метода: http://docs.oracle.com/javase/8/docs/api/java/awt/Graphics2D.html#setTransform-java.awt.geom.AffineTransform- – Marco13