所以我目前有一个3x3的网格窗格,我在其中为网格上的每个空格添加了一个白色背景的窗格。
我想要做的是,如果用户点击其中一个空格,白色窗格将更改为另一种颜色。然后,如果用户再次单击该空间,则该窗格将变回白色。如果再次单击,则会再次更改为该颜色,依此类推。
简而言之,单击会导致操作,下一次单击以及之后的操作会反转/撤消上一个操作。
但是,我只能通过初始点击来使用它。我想到的其他一切都没有用到。
@Override
public void handle(MouseEvent me) {
if (me.getClickCount() == 1) {
pane.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));}
任何帮助都会非常感激!
答案 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变量standard
和other
,例如:
private final Paint standard = Color.WHITE;
private Paint other = Color.RED;
请参阅Color