2016-07-22 14 views
0

左のマウスでタイルを開き、右のマウスでクリックします。私は多くのことを読んで試しましたが、どうにかしてこの作業をすることはできません。JavaFX for 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()); 
      } 
     } 
    } 

助けてください。

+0

は、 "機能していない"と定義します。あなたが持っているものは構文エラーのようです。確かにJavaではありません。 – markspace

+0

申し訳ありません、はいいくつかの構文エラーがあります。私はこれを例として使用しました:http://stackoverflow.com/questions/1515547/right-click-in-javafx –

+0

@KendelVentonda:これはJavaFX **スクリプト**です。これはもはやサポートされていません。 – fabian

答えて

1

onMouseClickedハンドラで何か問題が発生しました。

ラムダ式の正しい構文については、the Syntax section of the oracle tutorialを参照してください。

それを行うための正しい方法は

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

はまた、あなたのコードスニペットに欠けているいくつかの宣言がありますされます:

  • open方法
  • TILE_SIZEフィールド
+0

両方は後で宣言され、ここには入れませんでした。しかし、あなたのソリューションは簡単で非常に論理的です!大いに感謝する! –

関連する問題