Как сделать так, чтобы прямоугольник двигался на изображении? - PullRequest
1 голос
/ 20 ноября 2011

Обычно у меня загружено изображение, и когда я щелкаю часть изображения, появляется прямоугольник (без заливки).Если я снова нажму на другую часть изображения, этот прямоугольник появится еще раз.С каждым щелчком должен появляться один и тот же прямоугольник.

Пока у меня есть этот код, теперь я не знаю, как заставить изображение появиться.Мое изображение из моего файлового каталога.Я уже сделал код для получения изображения из моей файловой директории.

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class MP2 extends JPanel implements MouseListener{

    JFrame frame;
    JPanel panel;

    int x = 0;
    int y = 0;
    String input;

    public MP2(){

    }

    public static void main(String[] args){
        JFrame frame = new JFrame();
        MP2 panel = new MP2();
        panel.addMouseListener(panel);
        frame.add(panel);
        frame.setSize(200,200);
        frame.setVisible(true);

    }

    public void mouseClicked(MouseEvent event) {
        // TODO Auto-generated method stub

        this.x = event.getX();
        this.y = event.getY();
        this.repaint();
        input = JOptionPane.showInputDialog("Something pops out");
        System.out.println(input);

    }

    public void mouseEntered(MouseEvent arg0) {
        // TODO Auto-generated method stub
    }

    public void mouseExited(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    public void mousePressed(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);

        // this.setBackground(Color.white); *Sets the bg color of the panel

        g.setColor(new Color(255,0,0));
        g.drawRect(x, y, 100, 100);
    }
}

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Возможно, вы захотите посмотреть на рисование прямоугольника на Стеклянная панель , как показано на GlassPaneDemo. Например, в paintComponent() замените g.fillOval() на g.drawRect().

Я не знаю, как заставить изображение появиться.

Этот пример показывает, как отобразить изображение в JLabel.

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

this.x и this.y относятся к x и y вашей JPanel, а не к прямоугольнику, который вы хотите нарисовать.Вам нужно будет создать два дополнительных поля, rectX и rectY.Они устанавливаются в mouseClicked и используются paintComponent ().

EDIT

Простите, мой плохой.Я сейчас в замешательстве.Вы объявляете x и y.Их по-прежнему следует переименовывать, поскольку их можно спутать с x и y, определенными в компоненте, но они не являются проблемой.Когда я запускаю ваш код и нажимаю, появляется красный прямоугольник (вместе с диалоговым окном).Так что я не уверен, в чем проблема ???

...