Javafx-鼠标单击事件,撤消上一次鼠标单击所做的操作

时间:2017-12-09 05:27:07

标签: java javafx javafx-8

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

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

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

但是,我只能通过初始点击来使用它。我想到的其他一切都没有用到。

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

任何帮助都会非常感激!

1 个答案:

答案 0 :(得分: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();
}

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

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

前提是您定义了2个Paint变量standardother,例如:

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

请参阅Color