【问题标题】:How do I make a rectangle move in an image?如何使矩形在图像中移动?
【发布时间】:2011-11-20 14:34:11
【问题描述】:

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

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

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

【问题讨论】:

  • 你的目标不是很清楚。
  • 我点击图像的一部分,出现一个矩形。就是这样。
  • 听起来你需要在 init 上加载图像,然后覆盖绘画代码并在那里,从当前标记为可见的图像中 blit 矩形。
  • 你的意思是不是像他的:drawing-a-rectangle-over-an-existing-graphics-page
  • 有点类似。但是,我想要的只是一个没有填充的简单矩形。当我单击图像时,矩形应该出现在图像的顶部。上面的代码已经可以工作了,但是矩形只用于框架,而不是图像。

标签: java swing drawrect paintcomponent mouselistener


【解决方案1】:

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

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

这个example 展示了如何在JLabel 中显示图像。

【讨论】:

    【解决方案2】:

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

    编辑

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

    【讨论】:

    • 问题是,我必须将矩形放在图像上:))
    • 我在您的文件中的任何地方都看不到图像一词。我认为您需要在paintComponent 的某个地方调用g.drawImage()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2021-08-10
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多