2015-01-05 4 views
-1

Я использую среды 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 ниже изображения).

This is jPanel2 class

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); 

    } 
} 
+0

1) Чтобы лучше помочь, опубликуйте [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверенный пример) или [SSCCE] (http://www.sscce.org/) (Короткий, самосохраненный, правильный пример). 2) Используйте комбинацию экземпляров «AffineTransform» для изменения системы координат. –

+0

BTW - похоже, вы уже начали экспериментировать с экземплярами 'AffineTransform', но код выше имел бы такой же эффект, как если бы вы этого не сделали. –

+0

Сторона примечания (также @AndrewThompson): Нужно ** никогда ** не вызывайте 'g2d.setTransform (...)' с аффинным преобразованием, которое было создано вручную (даже с преобразованием идентичности). Дополнительную информацию см. В JavaDoc этого метода: http://docs.oracle.com/javase/8/docs/api/java/awt/Graphics2D.html#setTransform-java.awt.geom.AffineTransform- – Marco13

ответ

1

Использование SwingUtilities класса. У него есть методы

public static Point convertPoint(Component source,Point aPoint,Component destination) 
public static Point convertPoint(Component source,int x, int y,Component destination) 
+0

У вас есть пример, который я не понимаю в качестве кода выше. Я просто хочу изменить координаты JFrame на координаты JPanel2. –

Смежные вопросы