Нарисуйте фигуру в известной координате на JPanel - PullRequest
1 голос
/ 10 ноября 2011

Я довольно долго искал, чтобы найти решение моей проблемы без удачи. Я бы подумал, что будет простое решение. У меня есть следующий код, где я нахожу количество точек, хранящихся в ArrayList, и хотел бы перетащить фигуру (не имеет значения, что на этом этапе будет делать прямоугольник) в каждой точке, указанной в ArrayList. Код выглядит следующим образом:

public static void main(String[] args){
        image = null;
        try {
            // Read from a file
            File file = new File("box.jpg");
            image = ImageIO.read(file);
        } catch (IOException e) {
            System.out.print("LAAAAMMME!!!!");
        }

        ImagePanel panel = new ImagePanel(image); //Custom JPanel to show a background image
        panel.setPreferredSize(new Dimension(500, 500));

        JFrame frame = new JFrame("Find the Squares");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.getContentPane().add(panel);

        frame.validate();
        frame.setVisible(true);
        frame.pack();


        ArrayList<Point> points = getCenterPoint(floatarray);
        for(int x = 0 ; x < points.size(); x++){
             //Here I guess is where each point is created and drawn.
        }
    }

Есть предложения?

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Добавить атрибут List<Point> list в ImagePanel.

Переопределить paintComponent(g) в ImagePanel. Используйте данные в атрибуте list для рисования.

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    g.drawRect(...);
}

Отправить список с JFrame на ImagePanel.

Возможно, вам придется позвонить frame.setLayout(new FlowLayout()) после создания кадра.

1 голос
/ 10 ноября 2011
class MyTest{
public static void main(String[] args){
    image = null;
    try {
        // Read from a file
        File file = new File("box.jpg");
        image = ImageIO.read(file);
    } catch (IOException e) {
        System.out.print("LAAAAMMME!!!!");
    }

    ImagePanel panel = new ImagePanel(image); //Custom JPanel to show a background image
    panel.setPreferredSize(new Dimension(500, 500));

    JFrame frame = new JFrame("Find the Squares");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.getContentPane().add(panel);
    frame.add(new MainPanel(Color.Red));
    frame.validate();
    frame.setVisible(true);
    frame.pack();
    /*ArrayList<Point> points = getCenterPoint(floatarray);
    for(int x = 0 ; x < points.size(); x++){
         //Here I guess is where each point is created and drawn.
    }*/
}
private class MainPanel extends JPanel {
    Color color;

    public MainPanel(Color color) {
       this.color = color;
    }

    public void paintComponent(Graphics g) {
      int width = getWidth();
      int height = getHeight();
      g.setColor(color);
      //g.drawRect(startx,starty,endx,endy); // here you can drawRect as per your value
    }
 }
}

check на этом сайте

вам нужно передать координату классу MainPanel, чтобы вы могли нарисовать фигуру на панели.

...