我是新来的JavaFX我做了一个网格,5X5.我希望当用户单击按钮时,它会判断字符串是否以a开头.如果是这样,我想把文本改成"X".除此之外,它什么也做不了.为了构建网格,我使用了一个按钮分配.只有当最后一个按钮以a开头时,我现在才能工作.我只需要单独制作每个按钮来做到这一点,还是有其他方法?

GID是如何制作的PS板是一个以前制作的字符串[][]

for(int i = 0; i < board.length; i++) {
    for(int j = 0; j < board[i].length; j++) {
        word = new Button(board[i][j]);
        grid.add(word, i, j);
    }
}
private class MouseClickedHandler implements EventHandler<MouseEvent>{
    @Override
    public void handle(MouseEvent arg0) {
        // TODO Auto-generated method stub
        String text = word.getText();
        if (text.charAt(0) == 'A' || text.charAt(0) == 'a') {
           word.setText("X");
        }       
    }

推荐答案

如何有条件地对按钮执行操作:

  1. 定义按钮的操作处理程序.
  2. 在操作处理程序中,测试以查看是否满足所需的条件.
  3. 如果测试通过,请执行所需的操作.

Short example

final Button button = new Button(word);
button.setOnAction(e -> {
    if (isRequiredWord(word)) {
        button.setText(MATCHED_VALUE);
    }
});

Sample application

显示带有文字的按钮网格.如果用户单击一个单词以字母"a"开头、不区分大小写的按钮,则按钮文本将从显示的单词更改为"X".

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class MatchingGameApp extends Application {
    private static final String MATCHED_VALUE = "X";
    private static final String[][] animalBoard = {
            { "cat", "ape" },
            { "aardvark", "dog" }
    };

    /**
     * Add actionable buttons to a grid.
     *
     * @param board A 2D array of words.
     * @param grid a GridPane to which buttons for each word will be added.
     */
    private void addButtons(String[][] board, GridPane grid) {
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++) {
                final String word = board[i][j];

                final Button button = new Button(word);
                button.setPrefWidth(80);
                button.setOnAction(e -> {
                    if (isRequiredWord(word)) {
                        button.setText(MATCHED_VALUE);
                    }
                });

                grid.add(button, i, j);
            }
        }
    }

    /**
     * A required word is any word starting with a letter "a" in any case.
     */
    public boolean isRequiredWord(String word) {
        return word != null && !word.isEmpty() &&
                word
                        .substring(0, 1)
                        .toLowerCase()
                        .startsWith("a");
    }

    @Override
    public void start(Stage stage) {
        GridPane layout = new GridPane(10, 10);
        layout.setPadding(new Insets(10));

        addButtons(animalBoard, layout);

        stage.setScene(new Scene(layout));
        stage.show();
    }

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

Java相关问答推荐

了解Android Studio中的调试器输出

上下文初始化期间遇到异常-使用Java配置配置HibernateTemplate Bean时

Kubernetes的Java客户端检索状态.处于终止状态的Pod的阶段';正在运行';

AssertJ Java:多条件断言

将关键字与正文中的_Allowed匹配,但带有__Signing可选后缀

在springboot 3中,当我调用api endpoint时,会出现404

CompleteableFuture是否运行在不同的内核上?

使用Mockito进行的Junit测试失败

当返回Mono<;Something>;时,不会调用Mono<;void>;.flatMap

格式中的特定回录键-值对

我如何解释这个错误?必需类型:供应商R,提供:收集器对象,捕获?,java.util.List java.lang.Object>>

%This内置函数示例

虚拟线程应该很快消亡吗?

扩展视图高度,并将其拖动到较低的视图上,而不是将其向下推?

Spring动态反序列化JSON可以是列表,也可以只是一个对象

如何在运行docker的应用程序中获取指定的配置文件

在打开搜索结果时,如何让Eclipse打开整个文件?

如何通过Java java.lang.Foreign API访问本机字节数组

如何使用jooq更新记录?

验证没有';t work on Hibernate Entity';s字段