gpt4 book ai didi

JavaFX 文本元素未在 UI 中反射(reflect)更改

转载 作者:行者123 更新时间:2023-11-29 04:07:39 24 4
gpt4 key购买 nike

问题:我试图点击一个图 block ,当点击图 block 时,它应该显示它的值(文本)直到点击第二个值。单击第二个图 block 时,它应该显示它的值,然后删除第一个和第二个图 block ,除非它们的值匹配。目前显示第一个值;但是,第二个值永远不会显示在 Pane 中。编辑:感觉 EventDispatchThread 可能会打败我,但我想不出一种轻量级的方法来安抚那个野兽。

瓷砖.java

public class Tile extends StackPane {
int val;
Text text = new Text();

Tile(int value) {
val = value;
text.setText(String.valueOf(value) );
text.setFont(Font.font(30));
text.setVisible(false);

setAlignment(Pos.CENTER);
getChildren().addAll(border, text);
setOnMouseClicked(event -> compgraphics.handleTiles(this));
}

public void toggleTile(){
if(text.isVisible()){
text.setVisible(false);
}
else{
text.setVisible(true);
}
}
}

handleTiles() 函数

public static void handleTiles(Tile t){
if (flip1 == null) {
flip1 = t;
flip1.toggleTile();
return;
}
if (flip2 == null) {
flip2 = t;
flip2.toggleTile();
if (flip1 != null && flip2 != null) {
if(!hasSameValue(flip1,flip2)) {
flip1.toggleTile();
flip2.toggleTile();
flip1 = null;
flip2 = null;
}
}
}
}

最佳答案

问题是您在第二次单击时会立即切换两个图 block 。如果方法在 JavaFX 应用程序线程上运行(事件处理程序就是这种情况),则只有当方法返回时 GUI 的状态才是重要的。由于这个原因,对于不匹配的图 block ,第二个图 block 在任何布局/渲染发生之前切换两次。

使用 PauseTransition 添加延迟:

public static void handleTiles(Tile t){
if (flip1 == null) {
flip1 = t;
flip1.toggleTile();
return;
}
if (flip2 == null) {
flip2 = t;
flip2.toggleTile();
if (flip1 != null && flip2 != null) {
if(!hasSameValue(flip1, flip2)) {
// hide text with delay
PauseTransition pause = new PauseTransition(Duration.seconds(2));
pause.setOnFinished(e -> {
flip1.toggleTile();
flip2.toggleTile();
flip1 = null;
flip2 = null;
});
pause.play();
}
}
}
}

顺便说一句:我建议遵守 java 命名约定。类型名称以大写字母开头的驼峰式命名。包含 handleTiles 的类型不符合此模式。

关于JavaFX 文本元素未在 UI 中反射(reflect)更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57387679/

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