2017-12-09 6 views
1

현재 그리드의 각 공간에 흰색 배경이있는 패널을 추가하는 3x3 그리드 패널이 있습니다.Javafx- 이전 마우스 클릭을 취소 한 마우스 클릭 이벤트

사용자가이 공간 중 하나를 클릭하면 흰색 패널이 다른 색으로 바뀌도록하려는 것입니다. 그런 다음 사용자가 다시 공간을 클릭하면 창이 다시 흰색으로 바뀝니다. 다시 클릭하면 다시 해당 색상으로 변경됩니다.

간단히 말해서 클릭은 동작을 발생시키고 다음 클릭은 이전 동작을 취소/취소합니다.

그러나 초기 클릭만으로이 작업을 수행 할 수 있습니다. 이것에 추가 할 생각이있는 다른 모든 것은 효과가 없습니다.

@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){ 
    if(rectangle.getFill() == standard){ 
     rectangle.setFill(other); 
    }else{ 
     rectangle.setFill(standard); 
    } 
0 : 당신이 Rectangle 클래스를 사용한다면

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

를 통해 간단하게 변경 색상을 제어 할 수 있으며, 다음과 같은 코드를 사용할 수 있습니다

2 페인트 변수 standardother을 정의한 경우에 한합니다. :

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

이 좋은 생각 Color

+0

를 참조하십시오! 그러나 아니요, 창 일 필요는 없습니다. 사각형도 사용할 수 있습니다. –

+0

Rectangle 클래스를 사용할 코드를 추가했습니다. 귀하의 질문에 대한 답변이있을 경우 답변을 승인 된 것으로 표시하여 질문을 마감 한 것으로 볼 수 있습니다. – SilverMonkey