Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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
Java 如何返回按下的按钮的值_Java_Loops_Javafx_Eventhandler - Fatal编程技术网

Java 如何返回按下的按钮的值

Java 如何返回按下的按钮的值,java,loops,javafx,eventhandler,Java,Loops,Javafx,Eventhandler,嗨,我知道这应该是基本的,但我真的卡住了 我想返回被点击的按钮的int值并关闭对话框 public static int showButtonDialog(String title, String label, String[] button) { ArrayList<Button> buttons = new ArrayList<>(); Stage dialog = new Stage(); boolean value = false;

嗨,我知道这应该是基本的,但我真的卡住了 我想返回被点击的按钮的int值并关闭对话框

public static int showButtonDialog(String title, String label, String[] button)
{
    ArrayList<Button> buttons = new ArrayList<>();
    Stage dialog = new Stage();

    boolean value = false;
    GridPane pain = new GridPane();
    Scene layer = new Scene(pain);
    dialog.setScene(layer);
    dialog.initModality(Modality.APPLICATION_MODAL);
    dialog.setTitle(title);
    pain.add(new Label(label), 0, 0);

    for (int i = 0; i < button.length; i++)
    {
        final int finalI = i;

        buttons.add(new Button(button[i].toString()));
        pain.add((buttons.get(i)), i, 1);

        buttons.get(i).setOnAction(new EventHandler<ActionEvent>()
        {

            @Override
            public void handle(ActionEvent event)
            {
                changeint(finalI);
                change(value);
                dialog.close();
            }

        });

    }
    dialog.showAndWait();
    if (value)
    {
        return temp;
    }
    else
    {
        return -1;
    }
}
public static int showButtonDialog(字符串标题、字符串标签、字符串[]按钮)
{
ArrayList按钮=新建ArrayList();
阶段对话框=新阶段();
布尔值=假;
GridPane=新建GridPane();
场景层=新场景(疼痛);
dialog.setScene(层);
dialog.initmodel(model.APPLICATION\u model);
对话框。设置标题(标题);
添加(新标签,0,0);
对于(int i=0;i
但是,我如何使方法句柄返回int,它是一个覆盖方法。

2件事:

-您需要创建可变变量i的最终副本,以便在代码中引用它

final int finalI = i;
buttons.get(i).setOnAction(new EventHandler<ActionEvent>()
... the rest of your code...
祝你好运

2件事:

-您需要创建可变变量i的最终副本,以便在代码中引用它

final int finalI = i;
buttons.get(i).setOnAction(new EventHandler<ActionEvent>()
... the rest of your code...

祝你好运

您需要在按钮处理程序方法中设置一个值,并从
showButtonDialog
方法返回该值。由于您正在调用
showAndWait()
,执行将在该点停止,这将允许在方法返回之前设置值

这里唯一棘手的部分是不能从lambda表达式中修改局部变量,因此需要创建一个包装器类来保存该值。最不冗长的方法是本地内部类:

public static int showButtonDialog(String title, String label, String[] button)
{
    ArrayList<Button> buttons = new ArrayList<>();
    Stage dialog = new Stage();

    boolean value = false;
    GridPane pain = new GridPane();
    Scene layer = new Scene(pain);
    dialog.setScene(layer);
    dialog.initModality(Modality.APPLICATION_MODAL);
    dialog.setTitle(title);
    pain.add(new Label(label), 0, 0);

    class ValueHolder { int value ; }
    ValueHolder valueHolder = new ValueHolder();
    valueHolder.value = -1 ;

    for (int i = 0; i < button.length; i++)
    {
        final int finalI = i;

        buttons.add(new Button(button[i].toString()));
        pain.add((buttons.get(i)), i, 1);

        buttons.get(i).setOnAction(new EventHandler<ActionEvent>()
        {

            @Override
            public void handle(ActionEvent event)
            {
                valueHolder.value = finalI ;
                dialog.close();
            }

        });

    }
    dialog.showAndWait();
    return valueHolder.value ;
}
public static int showButtonDialog(字符串标题、字符串标签、字符串[]按钮)
{
ArrayList按钮=新建ArrayList();
阶段对话框=新阶段();
布尔值=假;
GridPane=新建GridPane();
场景层=新场景(疼痛);
dialog.setScene(层);
dialog.initmodel(model.APPLICATION\u model);
对话框。设置标题(标题);
添加(新标签,0,0);
类值持有者{int value;}
估价师估价师=新估价师();
valueHolder.value=-1;
对于(int i=0;ibuttons.get(i).setOnAction(新的EventHandler类:使用该类而不是创建自己的对话框可能更好。

您需要在按钮处理程序方法中设置一个值,并从
showButtonDialog
方法返回该值。因为您正在调用
showAndWait()
,执行将在该点停止,这将允许在方法返回之前设置值

这里唯一棘手的部分是不能从lambda表达式中修改局部变量,因此需要创建一个包装类来保存该值。最不详细的方法是局部内部类:

public static int showButtonDialog(String title, String label, String[] button)
{
    ArrayList<Button> buttons = new ArrayList<>();
    Stage dialog = new Stage();

    boolean value = false;
    GridPane pain = new GridPane();
    Scene layer = new Scene(pain);
    dialog.setScene(layer);
    dialog.initModality(Modality.APPLICATION_MODAL);
    dialog.setTitle(title);
    pain.add(new Label(label), 0, 0);

    class ValueHolder { int value ; }
    ValueHolder valueHolder = new ValueHolder();
    valueHolder.value = -1 ;

    for (int i = 0; i < button.length; i++)
    {
        final int finalI = i;

        buttons.add(new Button(button[i].toString()));
        pain.add((buttons.get(i)), i, 1);

        buttons.get(i).setOnAction(new EventHandler<ActionEvent>()
        {

            @Override
            public void handle(ActionEvent event)
            {
                valueHolder.value = finalI ;
                dialog.close();
            }

        });

    }
    dialog.showAndWait();
    return valueHolder.value ;
}
public static int showButtonDialog(字符串标题、字符串标签、字符串[]按钮)
{
ArrayList按钮=新建ArrayList();
阶段对话框=新阶段();
布尔值=假;
GridPane=新建GridPane();
场景层=新场景(疼痛);
dialog.setScene(层);
dialog.initmodel(model.APPLICATION\u model);
对话框。设置标题(标题);
添加(新标签,0,0);
类值持有者{int value;}
估价师估价师=新估价师();
valueHolder.value=-1;
对于(int i=0;ibuttons.get(i).setOnAction(新的EventHandler类:使用该类而不是创建自己的对话框可能更好。

你不能。
句柄
方法是
无效
。你会在哪里收到返回值?@James\u D是对的,
句柄()
方法是无效的,但如何返回按钮的值呢?我单击了按钮,这是一个如此简单的问题,我已经尝试在内部匿名类中编写另一个方法,但他只启动句柄,不返回任何内容…我也想知道为什么我的问题会被否决是的,我现在用简单的问题来乞讨…而不是重新开始从
handle
方法中打开一个值,只需调用另一个方法
按钮。setOnAction(event->doSomeThingMethod());
@Mralladin,我不想告诉你一个坏消息,但是这个方法永远不会返回你想要的值。它的工作是设置EventHandler,然后立即返回,甚至在按下按钮之前就会返回。所以你必须重新思考你的代码,并在按下按钮时调用一个方法来做你想做的事情,请参阅Colns Abt在上面的评论,或者我在下面的回答,来获取一些想法。祝你好运!你不能。
handle
方法是
void
。你会在哪里收到返回值?@James_D是对的,
handle()
方法是无效的,但如何返回按钮的值呢?我单击了按钮,这是一个如此简单的问题,我已经尝试在内部匿名类中编写另一个方法,但他只启动句柄,不返回任何内容…我也想知道为什么我的问题会被否决是的,我现在用简单的问题来乞讨…而不是重新开始从
handle
方法中打开一个值,您只需调用另一个方法
按钮。setOnAction(event->doSomeThingMethod());
@Mralladin,我不想告诉您坏消息,但此方法永远不会返回