Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相互更新的javafx文本字段_Java_Javafx - Fatal编程技术网

相互更新的javafx文本字段

相互更新的javafx文本字段,java,javafx,Java,Javafx,我正在编写一个基本的GUI应用程序,其中包含一个文本字段窗格,表示将字节输入程序缓冲区的5种方式。其思想是,当您编辑其中一个文本字段时,其他4个字段将使用您正在编辑的文本字段的翻译值进行更新。例如,将十六进制字段更改为“FF”将使十进制字段立即更改为“255”,依此类推 问题是,我不知道如何避免在更改时出现无限的更新循环:十六进制字段被更改,这会修改十进制字段,然后尝试再次更新十六进制字段,等等,从而产生堆栈溢出错误 以下是定义字段及其侦听器的代码: TextField Inputcha

我正在编写一个基本的GUI应用程序,其中包含一个文本字段窗格,表示将字节输入程序缓冲区的5种方式。其思想是,当您编辑其中一个文本字段时,其他4个字段将使用您正在编辑的文本字段的翻译值进行更新。例如,将十六进制字段更改为“FF”将使十进制字段立即更改为“255”,依此类推

问题是,我不知道如何避免在更改时出现无限的更新循环:十六进制字段被更改,这会修改十进制字段,然后尝试再次更新十六进制字段,等等,从而产生堆栈溢出错误

以下是定义字段及其侦听器的代码:

    TextField Inputchar = new TextField();
    Inputchar.setPromptText("Enter " + Program.BYTES_OF_BUFFER + " character(s)...");
    Inputchar.setMinWidth(250);

    TextField Inputhex = new TextField();
    Inputhex.setPromptText("Enter a value between 0 and " + Program.BUFFER_SIZE.toString(16) + "...");

    TextField Inputdec = new TextField();
    Inputdec.setPromptText("Enter a value between 0 and " + Program.BUFFER_SIZE.toString(10) + "...");

    TextField Inputoct = new TextField();
    Inputoct.setPromptText("Enter a value between 0 and " + Program.BUFFER_SIZE.toString(8) + "...");

    TextField Inputbin = new TextField();
    Inputbin.setPromptText("Enter a value between 0 and " + Program.BUFFER_SIZE.toString(2) + "...");

    Inputchar.textProperty().addListener(c -> {
        char[] cs = Inputchar.getText().toCharArray();
        byte[] b = new byte[cs.length];
        for (int i = 0; i < cs.length; i++) {
            b[i] = (byte) cs[i];
        }
        BigInteger B = new BigInteger(b);
        Inputhex.setText(B.toString(16));
        Inputdec.setText(B.toString(10));
        Inputoct.setText(B.toString(8));
        Inputbin.setText(B.toString(2));
    });

    Inputhex.textProperty().addListener(c -> {
        BigInteger B = BigInteger.valueOf(Integer.parseInt(Inputhex.getText(), 16));
        Inputchar.setText(BF_Program.bytestochars(B.toByteArray()));
        Inputdec.setText(B.toString(10));
        Inputoct.setText(B.toString(8));
        Inputbin.setText(B.toString(2));
    });

    Inputdec.textProperty().addListener(c -> {
        BigInteger B = BigInteger.valueOf(Integer.parseInt(Inputdec.getText(), 10));
        Inputchar.setText(BF_Program.bytestochars(B.toByteArray()));
        Inputhex.setText(B.toString(16));
        Inputoct.setText(B.toString(8));
        Inputbin.setText(B.toString(2));
    });

    Inputoct.textProperty().addListener(c -> {
        BigInteger B = BigInteger.valueOf(Integer.parseInt(Inputoct.getText(), 8));
        Inputchar.setText(BF_Program.bytestochars(B.toByteArray()));
        Inputhex.setText(B.toString(16));
        Inputdec.setText(B.toString(10));
        Inputbin.setText(B.toString(2));
    });

    Inputbin.textProperty().addListener(c -> {
        BigInteger B = BigInteger.valueOf(Integer.parseInt(Inputbin.getText(), 2));
        Inputchar.setText(BF_Program.bytestochars(B.toByteArray()));
        Inputhex.setText(B.toString(16));
        Inputdec.setText(B.toString(10));
        Inputoct.setText(B.toString(8));
    });
TextField Inputchar=new TextField();
Inputchar.SetPrompText(“输入”+Program.BYTES\u OF_BUFFER+“字符…”);
Inputchar.setMinWidth(250);
TextField Inputhex=新的TextField();
输入一个介于0和“+Program.BUFFER_SIZE.toString(16)+”之间的值;
TextField Inputdec=新的TextField();
Inputdec.SetPrompText(“输入一个介于0和“+Program.BUFFER_SIZE.toString(10)+”之间的值);
TextField Inputoct=新的TextField();
输入putoct.setPrompText(“输入一个介于0和“+程序.缓冲区大小.toString(8)+”之间的值);
TextField Inputbin=新的TextField();
Inputbin.SetPrompText(“输入一个介于0和“+Program.BUFFER_SIZE.toString(2)+”之间的值);
Inputchar.textProperty().addListener(c->{
char[]cs=Inputchar.getText().tocharray();
字节[]b=新字节[cs.length];
对于(int i=0;i{
biginger B=biginger.valueOf(Integer.parseInt(inputex.getText(),16));
Inputchar.setText(BF_程序.bytestochars(B.toByteArray());
输入dec.setText(B.toString(10));
Inputoct.setText(B.toString(8));
Inputbin.setText(B.toString(2));
});
Inputdec.textProperty().addListener(c->{
biginger B=biginger.valueOf(Integer.parseInt(Inputdec.getText(),10));
Inputchar.setText(BF_程序.bytestochars(B.toByteArray());
Inputhex.setText(B.toString(16));
Inputoct.setText(B.toString(8));
Inputbin.setText(B.toString(2));
});
InputAct.textProperty().addListener(c->{
biginger B=biginger.valueOf(Integer.parseInt(Inputoct.getText(),8));
Inputchar.setText(BF_程序.bytestochars(B.toByteArray());
Inputhex.setText(B.toString(16));
输入dec.setText(B.toString(10));
Inputbin.setText(B.toString(2));
});
Inputbin.textProperty().addListener(c->{
biginger B=biginger.valueOf(Integer.parseInt(Inputbin.getText(),2));
Inputchar.setText(BF_程序.bytestochars(B.toByteArray());
Inputhex.setText(B.toString(16));
输入dec.setText(B.toString(10));
Inputoct.setText(B.toString(8));
});

我如何更改此设置,以便编辑一个字段将更新其他字段一次而不是循环?谢谢。

事实证明,我的lamba表达式实现了错误的类:invalizationListener,而它本应使用ChangeListener:

    Inputchar.textProperty().addListener((observable, oldValue, newValue) -> {
        char[] cs = Inputchar.getText().toCharArray();
        byte[] b = new byte[cs.length];
        for (int i = 0; i < cs.length; i++) {
            b[i] = (byte) cs[i];
        }
        BigInteger B = new BigInteger(b);
        Inputhex.setText(B.toString(16));
        Inputdec.setText(B.toString(10));
        Inputoct.setText(B.toString(8));
        Inputbin.setText(B.toString(2));
    });

    Inputhex.textProperty().addListener((observable, oldValue, newValue) -> {
        BigInteger B = BigInteger.valueOf(Integer.parseInt(Inputhex.getText(), 16));
        Inputchar.setText(BF_Program.bytestochars(B.toByteArray()));
        Inputdec.setText(B.toString(10));
        Inputoct.setText(B.toString(8));
        Inputbin.setText(B.toString(2));
    });

    Inputdec.textProperty().addListener((observable, oldValue, newValue) -> {
        BigInteger B = BigInteger.valueOf(Integer.parseInt(Inputdec.getText(), 10));
        Inputchar.setText(BF_Program.bytestochars(B.toByteArray()));
        Inputhex.setText(B.toString(16));
        Inputoct.setText(B.toString(8));
        Inputbin.setText(B.toString(2));
    });

    Inputoct.textProperty().addListener((observable, oldValue, newValue) -> {
        BigInteger B = BigInteger.valueOf(Integer.parseInt(Inputoct.getText(), 8));
        Inputchar.setText(BF_Program.bytestochars(B.toByteArray()));
        Inputhex.setText(B.toString(16));
        Inputdec.setText(B.toString(10));
        Inputbin.setText(B.toString(2));
    });

    Inputbin.textProperty().addListener((observable, oldValue, newValue) -> {
        BigInteger B = BigInteger.valueOf(Integer.parseInt(Inputbin.getText(), 2));
        Inputchar.setText(BF_Program.bytestochars(B.toByteArray()));
        Inputhex.setText(B.toString(16));
        Inputdec.setText(B.toString(10));
        Inputoct.setText(B.toString(8));
    });
Inputchar.textProperty().addListener((可观察、旧值、新值)->{
char[]cs=Inputchar.getText().tocharray();
字节[]b=新字节[cs.length];
对于(int i=0;i{
biginger B=biginger.valueOf(Integer.parseInt(inputex.getText(),16));
Inputchar.setText(BF_程序.bytestochars(B.toByteArray());
输入dec.setText(B.toString(10));
Inputoct.setText(B.toString(8));
Inputbin.setText(B.toString(2));
});
Inputdec.textProperty().addListener((可观察、旧值、新值)->{
biginger B=biginger.valueOf(Integer.parseInt(Inputdec.getText(),10));
Inputchar.setText(BF_程序.bytestochars(B.toByteArray());
Inputhex.setText(B.toString(16));
Inputoct.setText(B.toString(8));
Inputbin.setText(B.toString(2));
});
InputAct.textProperty().addListener((可观察、旧值、新值)->{
biginger B=biginger.valueOf(Integer.parseInt(Inputoct.getText(),8));
Inputchar.setText(BF_程序.bytestochars(B.toByteArray());
Inputhex.setText(B.toString(16));
输入dec.setText(B.toString(10));
Inputbin.setText(B.toString(2));
});
Inputbin.textProperty().addListener((可观察、旧值、新值)->{
biginger B=biginger.valueOf(Integer.parseInt(Inputbin.getText(),2));
Inputchar.setText(BF_程序.bytestochars(B.toByteArray());
Inputhex.setText(B.toString(16));
输入dec.setText(B.toString(10));
Inputoct.setText(B.toString(8));
});
这个确实有效。保持联系以备将来参考