java - 单击按钮时如何正确生成标签
问题描述
在下面的代码中,我有一个创建 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)
{
}
}
}
解决方案
首先,您需要添加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
推荐阅读
- fiware-sth-comet - STH Comet - mongo 数据库中的原始插入
- python - Python-opencv:'ASSERT:文件 qasciikey.cpp 中的“false”'在俄语按键上
- flutter - Flutter:将一行切成“一半”
- typescript - 如何对包括子数组在内的对象值进行深度扫描
- python - pathlib Path 解析包的安装路径目录而不是源代码目录
- javascript - 如何使用 nock 拦截请求而不考虑 body
- sql-server - 巨大的 SQL 文件中的语法错误:如何找到它?
- php - 配置 Apache2 以在新的 MacBook Pro 10.14 上工作
- php - 从 WooCommerce 电子邮件中删除订单日期
- r - 无法访问 Retrosheet 包中的 URL