所以我目前有一个3x3的网格窗格,我为网格上的每个空间添加了一个带有白色背景的窗格。
我想做的是,如果用户单击其中一个空间,白色窗格将变为另一种颜色。然后,如果用户再次单击空间,窗格将变回白色。如果再次单击,它将再次更改为该颜色,依此类推。
简而言之,单击将导致一个操作,下一次单击以及之后的单击将反转/撤消之前的操作。
然而,我只能得到最初的点击来使用这个。我想添加到这个的所有其他东西都没有起作用。
@Override
public void handle(MouseEvent me) {
if (me.getClickCount() == 1) {
pane.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));}
任何帮助都将不胜感激!
如果它真的必须是一个窗格,您可以尝试编写一个自定义窗格,这将使您更容易控制其行为:
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;
见颜色