首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >左键单击revert - rectangle,mouseClickedEvent

左键单击revert - rectangle,mouseClickedEvent
EN

Stack Overflow用户
提问于 2012-02-11 09:54:02
回答 2查看 103关注 0票数 0

我已经创建了一个基本的Java程序,它在启动时创建一个矩形,每次单击它时,矩形都会增长并更改为不同的(随机)颜色。下面是我的代码:

代码语言:javascript
复制
package rectPAK;

import javax.swing.JFrame;

public class DisplayRect {

public static void main(String[] args) {
    JFrame window = new JFrame();
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setBounds(0,0,1000,1000);
    window.getContentPane().add(new MyCanvas());
    window.setVisible(true);
    }
}

然后myCanvas是这样的:

代码语言:javascript
复制
package rectPAK;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;
import javax.swing.JComponent;

public class MyCanvas extends JComponent{
int W = 100;
int H = 100;
int r;
int g;
int b;
int trans;
int maxRandNum = 255;
int xPoint;
int yPoint;


public MyCanvas() {
    this.addMouseListener(m);
    this.addMouseMotionListener(ml);
}

Random rand = new Random();

MouseListener m = new MouseListener() {

    @Override
    public void mouseClicked(MouseEvent e) {

        W = W + 20;
        H = H + 20;
        r = rand.nextInt(maxRandNum);
        g = rand.nextInt(maxRandNum);
        b = rand.nextInt(maxRandNum);
        trans = rand.nextInt(maxRandNum);

        repaint();

    }

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

    }

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

    }

    public void mousePressed(MouseEvent e) {


    }

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

    }

};

MouseMotionListener ml = new MouseMotionListener() {

    @Override
    public void mouseDragged(MouseEvent e) {

        Point p = e.getLocationOnScreen();
        xPoint = p.x;
        yPoint = p.y;

        repaint();

    }

    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub

    }

};

public void paint(Graphics gr) {
    gr.setColor(Color.BLACK);
    gr.drawRect(xPoint, yPoint, W, H);
    gr.setColor(new Color(r,g,b,trans));
    gr.fillRect(xPoint, yPoint, W, H);
}

}

现在我的问题是:我如何让它在我右击矩形时,它恢复到以前的大小和颜色?我知道这要求很多,但我找不到任何关于它的东西...

非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2012-02-11 09:58:18

使用一组“前一个”变量(例如previousX、previousY、previousR等)在每次更新之前存储旧信息,并创建一个右键单击事件来调用像paint方法这样的方法,将对象的变量设置为previousX、previousY等。

票数 0
EN

Stack Overflow用户

发布于 2012-02-11 10:17:24

每次生成随机数时,将其存储为前一个实例。这样你就可以后退一步了。如果你想一直回到第一个阶段,那么你应该将每个创建的矩形的参数存储在一个排序的堆栈中,在那里你可以弹出之前的每个阶段。

完成后,您应该创建一个处理右键单击的方法,并且在该方法中,您应该将矩形参数设置为先前的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9237145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档