提问者:小点点

Javafx-鼠标点击事件,撤消上一次鼠标点击所做的事情


所以我目前有一个3x3的网格窗格,我为网格上的每个空间添加了一个带有白色背景的窗格。

我想做的是,如果用户单击其中一个空间,白色窗格将变为另一种颜色。然后,如果用户再次单击空间,窗格将变回白色。如果再次单击,它将再次更改为该颜色,依此类推。

简而言之,单击将导致一个操作,下一次单击以及之后的单击将反转/撤消之前的操作。

然而,我只能得到最初的点击来使用这个。我想添加到这个的所有其他东西都没有起作用。

@Override
public void handle(MouseEvent me) {
                if (me.getClickCount() == 1) {
                    pane.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));}

任何帮助都将不胜感激!


共1个答案

匿名用户

如果它真的必须是一个窗格,您可以尝试编写一个自定义窗格,这将使您更容易控制其行为:

class MyPane extends Pane{
    private Background standard, other;

    public MyPane(){
        standard = new Background(new BackgroundFill(Color.WHITE, CornerRadii.EMPTY, Insets.EMPTY));
        other = new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY));
        this.setBackground(standard);
    }

    public void changeColor(){
        if(this.getBackground().equals(standard){
            this.setBackground(other);
        else{
            this.setBackground(standard);
        }
    }

    public void setBackground(Background bckgrnd){
        this.other = bckgrnd;
}

如果您使用此类而不是标准窗格,您可以简单地通过

@Override
public void  handle(MouseEvent me){
    myPane.changeColor();
}

如果您要使用Rectgle类,您可以使用以下代码:

@Override
public void handle(MouseEvent me){
    if(rectangle.getFill() == standard){
        rectangle.setFill(other);
    }else{
        rectangle.setFill(standard);
    }

前提是您定义了2个Paint变量标准其他,例如:

private final Paint standard = Color.WHITE;
private Paint other = Color.RED;

见颜色