gpt4 book ai didi

java - 如果按钮被读取为节点,如何在 JavaFX 中获取按钮的文本?循环遍历按钮组/VBox。将其作为节点返回

转载 作者:行者123 更新时间:2023-12-01 15:28:55 27 4
gpt4 key购买 nike

我正在学习 JavaFX,这只是一个小编程问题。

我的 VBox 中有 3 个按钮。我想在将所有按钮放入 Vbox 后对它们应用相同的 3 个效果。但是当我在 VBox 上使用 for 循环和 getChildren() 时,它们会作为“节点”返回。我无法使用 Button.getText() 来查找按钮的文本。

有没有办法获取节点的文本?或者也许将当前节点转换为按钮并以这种方式获取文本?

VBox vbox = new VBox();

Button option1 = new Button("Single Player");
Button option2 = new Button("Network Player");
Button option3 = new Button("View Rules");

vbox.getChildren().add(option1);
vbox.getChildren().add(option2);
vbox.getChildren().add(option3);

for (final Node button : vbox.getChildren()) {
button.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent arg0) {
button.setEffect(addEffect(Color.web("#53CFA6"), .8, 10));
}
});
button.setOnMouseExited(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent arg0) {
button.setEffect(addEffect(Color.web("#FF6800"), .8, 10));
}
});

button.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent arg0) {
button.setEffect(addEffect(Color.web("#E62800"), .8, 10));

//Need to use button.getText()
//Button button; button.getText() works

}
});
}

最佳答案

有两个选项:

<强>1。转换类型。简单,但不安全。

如果您确定不会向此 VBox 添加其他子项,您可以将 Node 转换为 Button:

for (Node node : vbox.getChildren()) {
if (node instanceof Button) {
final Button button = (Button) node;

// all your logic
}

<强>2。使用工厂模式。最好的套件,恕我直言。

引入方法createButton,它将根据您的需要设置按钮:

private Button createButton(String name) {
final Button button = new Button(name);
button.setOnMouseEntered(...);
button.setOnMouseExited(...);
button.setOnMouseClicked(...);
return button;
}

您的代码将如下所示:

Button option1 = createButton("Single Player");
Button option2 = createButton("Network Player");
Button option3 = createButton("View Rules");

vbox.getChildren().addAll(option1, option2, option3);

<强>3。引入您自己的 Button 类。如果您计划扩展按钮逻辑,那就更好了。

public void FancyButton extends Button {
public FancyButton(String name) {
super(name);
//handlers logic here
}
}

关于java - 如果按钮被读取为节点,如何在 JavaFX 中获取按钮的文本?循环遍历按钮组/VBox。将其作为节点返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9816568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com