JavaFX:单击时在按钮上设置重叠文本

时间:2017-03-26 17:55:26

标签: javafx

我正在创建一个简单的彩票游戏,我可以选择1到42之间的数字。我想用红色“X”标记所选数字(而不是使用效果),但用户仍应看到所选数字数字在“X”下面。当用户再次点击标记的号码时,“X”应该消失。 GUI看起来像这样: enter image description here

如何以第一个文字仍然可见的方式在按钮上显示第二个文字?

感谢您的帮助

亲切的问候

乔尔

1 个答案:

答案 0 :(得分:0)

您可以将按钮的图形设置为StackPane,然后将一个元素添加到StackPane。由于StackPane的子项都显示在彼此之上,因此产生了您想要的效果。我的例子只显示了这个概念,我可能会在你的使用场景中编写一个扩展Button的新类:)

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;


public class NewFXMain extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Pane pane = new Pane();

        StackPane buttonPane = new StackPane();
        Label label = new Label("42");
        buttonPane.getChildren().add(label);
        Button button = new Button();
        button.setGraphic(buttonPane);
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                if(buttonPane.getChildren().size() == 1){
                    Label labelX = new Label("X");
                    labelX.setStyle("-fx-text-fill: red;");
                    buttonPane.getChildren().add(labelX);
                }
                else 
                    buttonPane.getChildren().remove(1);
            }
        });

        pane.getChildren().addAll(button);
        primaryStage.setScene(new Scene(pane, 300, 275));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}