检查按钮的图形

时间:2018-11-20 22:09:17

标签: javafx

我对JavaFX和检查图形的能力有疑问。因此在我的程序中,当用户单击按钮时,我为其按钮设置了图形。

我需要找出的是在“ temp.getText()。equals(” O“)”和“ temp.getText()。equals(” X“)”中必须包含的内容它在检查按钮的图像名称而不是查找文本。

我想让游戏说“ X.jpg”(反之亦然)是否在按钮内,然后调用此错误屏幕弹出窗口

package sample;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.paint.Paint;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

import java.util.Timer;
import java.util.TimerTask;

public class Controller
{
@FXML
private Text winnerLabel;
@FXML
private Button space1;
@FXML
private Button space2;
@FXML
private Button space3;
@FXML
private Button space4;
@FXML
private Button space5;
@FXML
private Button space6;
@FXML
private Button space7;
@FXML
private Button space8;
@FXML
private Button space9;
@FXML
private Button reset;
@FXML
private Text playerLabel;
@FXML
private Text timerLabel;
@FXML
private Image image;
private boolean isGame = true;
private ImageView tempImageView;


@FXML
protected void initialize()
{
    if(isGame)
    {
        Timer timer = new Timer();

        TimerTask task = new TimerTask()
        {
            @Override
            public void run()
            {
                timerLabel.setText(Integer.toString(Integer.parseInt(timerLabel.getText()) - 1));
                if(Integer.parseInt(timerLabel.getText()) == 0)
                {
                    if(playerLabel.getText().equals("Player 1"))
                    {
                        playerLabel.setText("Player 2");
                    }
                    else
                    {
                        playerLabel.setText("Player 1");
                    }
                    timerLabel.setText(Integer.toString(Integer.parseInt(timerLabel.getText()+15)));


                    if(space1.getText() == "X" && space2.getText() == "X" && space3.getText() == "X")
                    {

                        space1.setStyle("-fx-background-color:#90EE90");
                        space2.setStyle("-fx-background-color:#90EE90");
                        space3.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 1 has won, click reset to play again.");
                        timer.cancel();
                        isGame=false;

                    }
                    else if (space1.getText() == "O" && space2.getText() == "O" && space3.getText() == "O")
                    {
                        space1.setStyle("-fx-background-color:#90EE90");
                        space2.setStyle("-fx-background-color:#90EE90");
                        space3.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 2 has won, click reset to play again.");
                        timer.cancel();
                    }
                    //vertical
                    else if(space1.getText() == "X" && space4.getText() == "X" && space7.getText() == "X")
                    {
                        space1.setStyle("-fx-background-color:#90EE90");
                        space4.setStyle("-fx-background-color:#90EE90");
                        space7.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 1 has won, click reset to play again.");
                        timer.cancel();
                    }
                    else if(space1.getText() == "O" && space4.getText() == "O" && space7.getText() == "O")
                    {
                        space1.setStyle("-fx-background-color:#90EE90");
                        space4.setStyle("-fx-background-color:#90EE90");
                        space7.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 2 has won, click reset to play again.");
                        timer.cancel();
                    }
                    //diagonal
                    else if (space1.getText() == "X" && space5.getText() == "X" && space9.getText() == "X")
                    {
                        space1.setStyle("-fx-background-color:#90EE90");
                        space5.setStyle("-fx-background-color:#90EE90");
                        space9.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 1 has won, click reset to play again.");
                        timer.cancel();
                    }
                    else if (space1.getText() == "O" && space5.getText() == "O" && space9.getText() == "O")
                    {
                        space1.setStyle("-fx-background-color:#90EE90");
                        space5.setStyle("-fx-background-color:#90EE90");
                        space9.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 2 has won, click reset to play again.");
                        timer.cancel();
                    }
                    //vertical 2nd
                    else if (space2.getText() == "X" && space5.getText() == "X" && space8.getText() == "X")
                    {
                        space2.setStyle("-fx-background-color:#90EE90");
                        space5.setStyle("-fx-background-color:#90EE90");
                        space8.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 1 has won, click reset to play again.");
                        timer.cancel();
                    }
                    else if (space2.getText() == "O" && space5.getText() == "O" && space8.getText() == "O")
                    {
                        space2.setStyle("-fx-background-color:#90EE90");
                        space5.setStyle("-fx-background-color:#90EE90");
                        space8.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 2 has won, click reset to play again.");
                        timer.cancel();
                    }
                    //vertical 3rd
                    else if (space3.getText() == "X" && space6.getText() == "X" && space9.getText() == "X")
                    {
                        space3.setStyle("-fx-background-color:#90EE90");
                        space6.setStyle("-fx-background-color:#90EE90");
                        space9.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 1 has won, click reset to play again.");
                        timer.cancel();
                    }
                    else if(space3.getText() == "O" && space6.getText() == "O" && space9.getText() == "O")
                    {
                        space3.setStyle("-fx-background-color:#90EE90");
                        space6.setStyle("-fx-background-color:#90EE90");
                        space9.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 2 has won, click reset to play again.");
                        timer.cancel();
                    }
                    //Horizontal 2nd
                    else if (space4.getText() == "X" && space5.getText() == "X" && space6.getText() == "X")
                    {
                        space4.setStyle("-fx-background-color:#90EE90");
                        space5.setStyle("-fx-background-color:#90EE90");
                        space6.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 1 has won, click reset to play again.");
                        timer.cancel();
                    }
                    else if (space4.getText() == "O" && space5.getText() == "O" && space6.getText() == "O")
                    {
                        space4.setStyle("-fx-background-color:#90EE90");
                        space5.setStyle("-fx-background-color:#90EE90");
                        space6.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 2 has won, click reset to play again.");
                        timer.cancel();
                    }
                    //Horizontal 3rd
                    else if (space7.getText() == "X" && space8.getText() == "X" && space9.getText() == "X")
                    {
                        space7.setStyle("-fx-background-color:#90EE90");
                        space8.setStyle("-fx-background-color:#90EE90");
                        space9.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 1 has won, click reset to play again.");
                        timer.cancel();
                    }
                    else if (space7.getText() == "O" && space8.getText() == "O" && space9.getText() == "O")
                    {
                        space7.setStyle("-fx-background-color:#90EE90");
                        space8.setStyle("-fx-background-color:#90EE90");
                        space9.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 2 has won, click reset to play again.");
                        timer.cancel();
                    }
                    //Diagonal 2nd
                    else if (space3.getText() == "X" && space5.getText() == "X" && space7.getText() == "X")
                    {
                        space3.setStyle("-fx-background-color:#90EE90");
                        space5.setStyle("-fx-background-color:#90EE90");
                        space7.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 1 has won, click reset to play again.");
                        timer.cancel();
                    }
                    else if (space3.getText() == "O" && space5.getText() == "O" && space7.getText() == "O")
                    {
                        space3.setStyle("-fx-background-color:#90EE90");
                        space5.setStyle("-fx-background-color:#90EE90");
                        space7.setStyle("-fx-background-color:#90EE90");
                        space1.setDisable(true);
                        space2.setDisable(true);
                        space3.setDisable(true);
                        space4.setDisable(true);
                        space5.setDisable(true);
                        space6.setDisable(true);
                        space7.setDisable(true);
                        space8.setDisable(true);
                        space9.setDisable(true);
                        winnerLabel.setText("Player 2 has won, click reset to play again.");
                        timer.cancel();
                    }
                }
            }
        };
        timer.schedule(task, 1000, 1000);
    }
}


/*
This method is the part of the program that will get which of the 9 buttons was clicked and based on who's player turn it is will change the text of the button to either an
X for player 1 or an O for player 2. afterwards the second player will go
 */
public void playTile(ActionEvent e)
{
    Button temp = (Button)e.getSource();
    Image tempImageX = new Image(getClass().getResource("X.jpg").toString());
    Image tempImageO = new Image(getClass().getResource("O.png").toString());

    if(temp.getText().equals("X"))
    {
        try
        {
            Stage screen1 = new Stage();
            Parent root = FXMLLoader.load(getClass().getResource("errorScreen.fxml"));
            screen1.setTitle("Error!");
            screen1.setScene(new Scene(root, 300, 275));
            screen1.show();
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
    else if (temp.getText().equals("O"))
    {
        try
        {
            Stage screen1 = new Stage();
            Parent root = FXMLLoader.load(getClass().getResource("errorScreen.fxml"));
            screen1.setTitle("Error!");
            screen1.setScene(new Scene(root, 300, 275));
            screen1.show();
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
    else
    {
        if (!temp.isDisable())
        {
            if (playerLabel.getText().equals("Player 1"))
            {
                playerLabel.setText("Player 2");
                tempImageView.setImage(tempImageX);
                temp.setGraphic(tempImageView);
                tempImageView.setId("X");
            }
            else
            {
                playerLabel.setText("Player 1");
                tempImageView.setImage(tempImageO);
                temp.setGraphic(tempImageView);
                tempImageView.setId("O");

            }
        }
    }
}
/*
This method is the functionality of the reset button when clicked it will 
reset all the 9 "Tiles" buttons text to blank and from that also reset the 
player label back to "Player 1:
to continue the game.
*/
public void resetButton(ActionEvent event)
{

    playerLabel.setText("Player 1");
    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            initialize();
            timer.cancel();
        }
    };
    timer.schedule(task, 1000, 1000);
    winnerLabel.setText("");
    space1.setDisable(false);
    space2.setDisable(false);
    space3.setDisable(false);
    space4.setDisable(false);
    space5.setDisable(false);
    space6.setDisable(false);
    space7.setDisable(false);
    space8.setDisable(false);
    space9.setDisable(false);
    space1.setTextFill(Paint.valueOf("000000"));
    space2.setTextFill(Paint.valueOf("000000"));
    space3.setTextFill(Paint.valueOf("000000"));
    space4.setTextFill(Paint.valueOf("000000"));
    space5.setTextFill(Paint.valueOf("000000"));
    space6.setTextFill(Paint.valueOf("000000"));
    space7.setTextFill(Paint.valueOf("000000"));
    space8.setTextFill(Paint.valueOf("000000"));
    space9.setTextFill(Paint.valueOf("000000"));
    space1.setGraphic(null);
    space2.setGraphic(null);
    space3.setGraphic(null);
    space4.setGraphic(null);
    space5.setGraphic(null);
    space6.setGraphic(null);
    space7.setGraphic(null);
    space8.setGraphic(null);
    space9.setGraphic(null);
   }
}

2 个答案:

答案 0 :(得分:0)

据我所知,您不想将文本设置为按钮,而是要根据其具有的图形(X或O)检查按钮是什么。

如果这是问题,我建议您根据所持图像/图形的类型来设置/更新按钮的属性,例如

button.getProperties().put("TYPE","X"); //  For X button
button.getProperties().put("TYPE","O"); //  For O button

您可以直接检查类型,而不用访问图形。喜欢..

if(space1.getProperties().get("TYPE").equals("X") && space2.getProperties().get("TYPE").equals("X") && ...){
...
}

或者,您可以利用Node的setUserData()方法,该方法仅在内部使用上述逻辑。如果与userData一起使用,您的代码也将不再那么冗长。

button.setUserData("X");

if(space1.getUserData().equals("X") && space2.getUserData().equals("X") && ...){
...
}

答案 1 :(得分:0)

无法将文件名信息保留在'/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hadoop-0.20-mapreduce/sbin/Linux/task-controller'ImageView中。当然,您始终可以从这两个类中的任意一个扩展并将文件名存储为字段,但是您可能不需要它。

您还可以保留两个Image实例的引用,并检查引用。

Image

这里最有趣的是,您要做的只是检查“平铺”是否已填充。实际上,最简单的方法是进行Image imageX = new Image(getClass().getResource("X.jpg").toString()); Image imageO = new Image(getClass().getResource("O.png").toString()); public void playTile(ActionEvent e) { // Other stuff Image currentImage = tempImageView.getImage(); if (currentImage == imageX || currentImage == imageO) // Checking for reference { // Your logic } else { // Your logic } }