2016-07-22 13 views
0

Ich möchte die Kacheln mit dem linken Mausklick öffnen und mit dem rechten Mausklick markieren. Ich lese und probiere viel, aber irgendwie funktioniert das nicht.Rechtsklick in JavaFX für Minesweeper

private class Tile extends StackPane { 
    private int x, y; 
    private boolean hasBomb; 
    private boolean isOpen = false; 

    private Rectangle border = new Rectangle(TILE_SIZE - 2, TILE_SIZE - 2); 
    private Text text = new Text(); 

    public Tile(int x, int y, boolean hasBomb) { 
     this.x = x; 
     this.y = y; 
     this.hasBomb = hasBomb; 

     border.setStroke(Color.BLACK); 
     border.setFill(Color.GREY); 
     text.setFont(Font.font(18)); 
     text.setText(hasBomb ? "X" : ""); 
     text.setVisible(false); 

     getChildren().addAll(border, text); 

     setTranslateX(x * TILE_SIZE); 
     setTranslateY(y * TILE_SIZE); 

     onMouseClicked: function(e:MouseEvent):Void { 
      if (e.button == MouseButton.SECONDARY) { 
       setOnMouseClicked(e -> open()); 
      } 
     } 
    } 

Könnte anyonw bitte helfen?

+0

Definieren Sie "nicht funktioniert". Was Sie dort haben, sieht wie ein Syntaxfehler aus. Es ist sicher nicht Java. – markspace

+0

Entschuldigung, ja, es gibt mehrere Syntaxfehler. Ich habe dies als ein Beispiel verwendet: http://StackOverflow.com/questions/1515547/Right-Click-in-Javafx –

+0

@KendelVentonda: Das ist JavaFX ** Skript **, die nicht mehr unterstützt wird. – fabian

Antwort

1

Mit Ihrem Handler onMouseClicked ist ein Fehler aufgetreten.

Für die korrekte Syntax von Lambda-Ausdrücken siehe the Syntax section of the oracle tutorial.

Der richtige Weg zu tun, wäre es

this.setOnMouseClicked(e -> { 
    if (e.getButton() == MouseButton.SECONDARY) { 
     open(); 
    } 
}); 

Des Weiteren gibt es einige Erklärungen in Ihr Code-Snippet fehlt:

  • die open Methode
  • das TILE_SIZE Feld
+0

Die beiden werden später erklärt, hat es nicht hier hineingelegt. Aber Ihre Lösung ist einfach und sehr logisch! Vielen Dank! –

Verwandte Themen