List 更改列表中标签的值。

List 更改列表中标签的值。,list,javafx,binding,List,Javafx,Binding,我想做一个猜谜游戏,程序一次显示一个数字序列。我有从列表中随机生成的序列,但我无法一次一个地显示列表中的值。我想用bind更改标签,但似乎无法使其正常工作 public class Tutorial extends Application { Stage window; Scene scene1, scene2; Label label; public static void main(String[] args) { launch(arg

我想做一个猜谜游戏,程序一次显示一个数字序列。我有从列表中随机生成的序列,但我无法一次一个地显示列表中的值。我想用bind更改标签,但似乎无法使其正常工作

public class Tutorial extends Application {

    Stage window; 
    Scene scene1, scene2; 
    Label label; 
    public static void main(String[] args) {
        launch(args);

    }

    public void start(Stage primaryStage) throws Exception {
        window = primaryStage; 

        //Scene 1
        Label welcome = new Label("Welcome to the Guessing Game. Press Start to Enter");
        Button start =  new Button("Start"); 
        VBox firstlayout = new VBox(10); 
        firstlayout.getChildren().addAll(welcome, start); 
        firstlayout.setAlignment(Pos.CENTER);

        start.setOnAction(e -> window.setScene(scene2));

        scene1 = new Scene(firstlayout, 450, 300); 
        window.setScene(scene1);


            ArrayList<Integer> guessList = numbergen(); 




         Label label = new Label(Integer.toString(getValues(guessList)));


            label.setStyle("-fx-text-fill: red; -fx-padding: 10px; -fx-font-size: 50px");

            FadeTransition fader = createFader(label);

            SequentialTransition Fader = new SequentialTransition(
                    label,
                    fader
            );


            StackPane layout = new StackPane(); 
            layout.getChildren().addAll(label); 


           scene2 = new Scene(layout, 250, 300); 

            Fader.play();



    window.setTitle("Program Close");
    window.setScene(scene1);

    window.show(); 

    }

private FadeTransition createFader(Node node) {
    FadeTransition fade = new FadeTransition(Duration.seconds(5), node);
    fade.setFromValue(1);
    fade.setToValue(0);

    return fade;
}

     public ArrayList<Integer> numbergen(){ 
            ArrayList<Integer> numb = new ArrayList<Integer>(); 
            Random rand = new Random();

            for(int i = 0; i<4; i++){

            int n = rand.nextInt(5) + 1; 
                numb.add(n); 
            }   
            return numb; 
        }

        public boolean result(ArrayList<Integer> solnList, ArrayList<Integer> guessList){ 

            if(solnList.size() != guessList.size()){ 
                return false; 
            }else{ 
                for(int i = 0; i<solnList.size(); i++){ 
                    if(solnList.get(i) != guessList.get(i)){ 
                        return false; 
                    }
                }
                return true; 
            }



        }

        public int getValues(ArrayList<Integer> list){ 
            for(int i = 0; i<list.size(); i++){ 

                return list.get(i); 
            }
            return 0; 
        }





} 
公共类教程扩展应用程序{
舞台窗口;
场景1、场景2;
标签;
公共静态void main(字符串[]args){
发射(args);
}
public void start(Stage primaryStage)引发异常{
窗口=初级阶段;
//第一场
Label welcome=新标签(“欢迎参加猜谜游戏。按开始进入”);
按钮启动=新按钮(“启动”);
VBox firstlayout=新的VBox(10);
firstlayout.getChildren().addAll(欢迎,开始);
firstlayout.setAlignment(位置中心);
start.setOnAction(e->window.setScene(scene2));
scene1=新场景(firstlayout,450300);
窗口设置场景(场景1);
ArrayList guessList=numbergen();
Label Label=新标签(Integer.toString(getValues(猜测列表));
label.setStyle(“-fx文本填充:红色;-fx填充:10px;-fx字体大小:50px”);
FadeTransition fader=createFader(标签);
顺序过渡音量控制器=新的顺序过渡(
标签,
推子
);
StackPane布局=新建StackPane();
layout.getChildren().addAll(标签);
场景2=新场景(布局,250300);
Fader.play();
设置标题(“程序关闭”);
窗口设置场景(场景1);
window.show();
}
专用FadeTransition createFader(节点){
FadeTransition fade=新的FadeTransition(持续时间。秒(5),节点);
淡入淡出值(1);
淡入淡出。设置值(0);
回波衰减;
}
公共阵列列表编号(){
ArrayList numb=新的ArrayList();
Random rand=新的Random();

对于(int i=0;i如果希望绑定到整数列表元素,可以使用:

例如:

label.textProperty().bind(
    Bindings.integerValueAt(observableList, observableIndex).asString()
);
其中,IntegerProperty中的observableIndex指的是列表中要绑定其值的元素的当前索引


调用
observeIndex.add(1)
时,绑定值将相应更改。

如果要绑定到整数列表元素,可以使用:

例如:

label.textProperty().bind(
    Bindings.integerValueAt(observableList, observableIndex).asString()
);
其中,IntegerProperty中的observableIndex指的是列表中要绑定其值的元素的当前索引


调用
observeIndex.add(1)时
,则绑定值将相应更改。

为什么还要在前面生成一个序列列表?为什么不在需要时生成一个新的随机数并使用它?我如何在需要时生成一个随机数?我对Java相当陌生,所以这让我很困惑。与您当前生成随机数的方式相同成员调用
rand.nextInt(5)+1
,但只在需要的时候才做。我不知道什么时候,你必须确定它。我的建议是,因为你是Java新手,不要开始尝试编写UI或使用绑定。首先学习Java,只有在精通基本Java后才开始尝试创建UI。对于你的数字猜测游戏,编写核心引擎用junit测试代码验证它。当引擎工作时,向它添加一个基于命令行控制台的接口。为什么还要在前面生成一个序列列表?为什么不在需要时生成一个新的随机数并使用它呢?我如何在需要时生成一个随机数?我对java是相当陌生的这让我很困惑。就像你现在生成随机数的方法一样。调用
rand.nextInt(5)+1
,但只在需要的时候才做。我不知道什么时候,你必须确定它。我的建议是,因为你是Java新手,不要开始尝试编写UI或使用绑定。首先学习Java,只有在精通基本Java后才开始尝试创建UI。对于你的数字猜测游戏,编写核心引擎使用junit测试代码验证它。当引擎工作时,向它添加一个基于命令行控制台的界面。我将在哪里实现这一点?您只需在start方法中粘贴绑定,因为它永远不会更改。可观察到的索引更改可能会发生在某些用户交互上,例如,在用户访问之后设置最后一个正确的数字,然后增加索引,以便用户可以猜到下一个数字。我这样做了。我做了一个循环,并使用label.textProperty().bind(Bindings.integerValueAt(observeList,observeIndex.asString());但现在它只给我最后一个值。循环不是这样做的方法。你想在用户交互上更改索引,而不是在循环中。我将在何处实现这一点?你可以在开始方法中粘贴绑定,因为它永远不会更改。可观察到的索引更改可能会发生在某些用户交互上,例如,在用户gues之后设置最后一个正确的数字,然后增加索引,以便用户可以猜到下一个数字。我这样做了。我做了一个循环,并使用label.textProperty().bind(Bindings.integerValueAt(observeList,observeIndex.asString());但现在它只给我最后一个值。循环不是实现这一点的方法。您希望更改用户交互的索引,而不是在循环中。