单击按钮时如何正确生成标签

How to properly produce a label when a button is clicked

在下面的代码中,我有一个项目创建了 3 个按钮,分别称为 sinister、medium 和 dexter。按钮显示正确但不起作用。如何让程序中名为sinister的按钮在点击时显示“left”标签?

package application;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.control.Label;
import javafx.scene.control.Button;
import javafx.geometry.Pos;
import javafx.event.EventHandler;
import javafx.event.ActionEvent;

public class latinTranslator extends Application
{
    private Label myLabel;

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

    @Override
    public void start(Stage primaryStage) {
        Button leftButton = new Button("Sinister");
        Button centerButton = new Button("Medium");
        Button rightButton = new Button("Dexter");

        //align centerbutton
        centerButton.setAlignment(Pos.CENTER);

        //event handler
        leftButton.setOnAction(new ButttonClickHandler());
        centerButton.setOnAction(new ButttonClickHandler());
        rightButton.setOnAction(new ButttonClickHandler());

        //label, button and its spacing;
        VBox Vbox = new VBox(20,leftButton, centerButton,rightButton );

        //create scene
        Scene scenebox = new Scene(Vbox,300,500);
        //alignment
        Vbox.setAlignment(Pos.CENTER);

        primaryStage.setScene(scenebox);
        //set scene to stage
        primaryStage.setTitle("Latin Translator");

        //window
        primaryStage.show();
    }

    class ButttonClickHandler implements EventHandler<ActionEvent>
    {
        @Override
        public void handle(ActionEvent event) 
        {

        }
    }
}

首先需要在scene graph. Then, in the event handler中添加myLabel,可以设置myLabel的文字。

在下面的代码中,我用注释指出了我在方法 start 中所做的更改。查找以下评论:

  • 添加了这一行
  • 在此处更改

我还在 class ButttonClickHandler

中添加了方法 handle 的代码
package application;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.control.Label;
import javafx.scene.control.Button;
import javafx.geometry.Pos;
import javafx.event.EventHandler;
import javafx.event.ActionEvent;

public class LatinTranslator extends Application {
    private Label myLabel;

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

    @Override
    public void start(Stage primaryStage) {
        myLabel = new Label(); // ADDED THIS LINE

        Button leftButton = new Button("Sinister");
        Button centerButton = new Button("Medium");
        Button rightButton = new Button("Dexter");

        // align centerbutton
        centerButton.setAlignment(Pos.CENTER);

        // event handler
        leftButton.setOnAction(new ButttonClickHandler());
        centerButton.setOnAction(new ButttonClickHandler());
        rightButton.setOnAction(new ButttonClickHandler());

        // label, button and its spacing;
        VBox Vbox = new VBox(20, myLabel, leftButton, centerButton, rightButton); // CHANGE HERE

        // create scene
        Scene scenebox = new Scene(Vbox, 300, 500);
        // alignment
        Vbox.setAlignment(Pos.CENTER);

        primaryStage.setScene(scenebox);
        // set scene to stage
        primaryStage.setTitle("Latin Translator");

        // window
        primaryStage.show();
    }

    class ButttonClickHandler implements EventHandler<ActionEvent> {

        @Override
        public void handle(ActionEvent event) {
            Object source = event.getSource();
            if (source instanceof Button) {
                Button button = (Button) source;
                String text = button.getText();
                if ("Sinister".equals(text)) {
                    myLabel.setText("left");
                }
            }
        }
    }
}

运行 代码并点击按钮 Sinister 按钮上方会出现 left 字样。

这是点击按钮之前的样子 Sinister

这是点击按钮后的样子 Sinister