如何在图像中移动矩形?

时间:2011-11-20 14:34:12

标签: java swing drawrect paintcomponent mouselistener

基本上我加载了一个图像,当我点击图像的一部分时,会出现一个矩形(没有填充)。如果我再次单击图像的另一部分,该矩形将再次出现。每次单击,都会出现相同的矩形。

到目前为止,我有这段代码,现在我不知道如何使图像出现。我的文件目录中的图像。我已经制作了代码来从我的文件目录中获取图像。

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 个答案:

答案 0 :(得分:2)

您可能需要查看在The Glass Pane上绘制矩形,如GlassPaneDemo所示。例如,在paintComponent()中,将g.fillOval()替换为g.drawRect()

  

我不知道如何让图像出现。

example显示了如何在JLabel中显示图片。

答案 1 :(得分:1)

this.x和this.y指的是你的JPanel的x和y,而不是你想要绘制的矩形。您需要创建两个额外的字段,rectX和rectY。这些在mouseClicked中设置并由paintComponent()使用。

修改

对不起,我很难过。我现在很困惑。你确实声明了一个x和y。这些仍然应该被重命名,因为它们可能与Component中定义的x和y混淆,但它们不是问题。当我运行代码并单击时,会出现红色矩形(以及对话框)。所以我不确定是什么问题???