首页 > 解决方案 > 单击按钮时如何正确生成标签

问题描述

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

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) 
        {

        }
    }
}

标签: javajavafx

解决方案


首先,您需要添加myLabel场景图中。然后,在事件处理程序中,您可以设置myLabel.

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

  • 添加了这一行
  • 改变这里

我还在handle类中添加了方法的代码ButttonClickHandler

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

后


推荐阅读