Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使矩形在图像中移动?_Java_Swing_Drawrect_Paintcomponent_Mouselistener - Fatal编程技术网

Java 如何使矩形在图像中移动?

Java 如何使矩形在图像中移动?,java,swing,drawrect,paintcomponent,mouselistener,Java,Swing,Drawrect,Paintcomponent,Mouselistener,基本上,我加载了一个图像,当我单击图像的一部分时,会显示一个矩形(没有填充)。如果我再次单击图像的另一部分,该矩形将再次显示。每次单击都会显示相同的矩形 到目前为止,我有这个代码,现在我不知道如何使图像出现。我的图像来自我的文件目录。我已经编写了从文件目录获取图像的代码 import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseList

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

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

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

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

编辑


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

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

我不知道如何使图像出现


这显示了如何在
JLabel

中显示图像。您的目标不是很清楚。单击图像的一部分,会显示一个矩形。就是这样。听起来你需要在init上加载图像,然后覆盖绘画代码,在那里,blit当前标记为可见的图像中的矩形。你的意思是类似于他的:有点类似。然而,我想要的只是一个没有填充的简单矩形。单击图像时,矩形应显示在图像顶部。上面的代码已经在运行,但矩形仅用于帧,而不是图像。问题是,我必须将矩形放在图像上:)我在文件中的任何位置都看不到单词image。我认为在paintComponent的某个地方,您需要调用g.drawImage()。