修复JOptionsPane循环

时间:2016-01-11 16:57:36

标签: java

我正在尝试修复程序中的循环并遇到一些严重的问题。更确切地说,我正在尝试添加一个循环。该计划非常复杂,所以我会尽力解释。让我先从问题区域开始:

public static void displayGUI(){//Method to display the GUI. 


//Creates a JOptionPane for the first GUI featuring 7 buttons and 2 lists..
int result = JOptionPane.showOptionDialog(null, getPanel(),"Return Builder", JOptionPane.OK_CANCEL_OPTION, 
        JOptionPane.PLAIN_MESSAGE, null, new String[]{"Confirm","Create Return"}, "default");

if(result == 1){//If the user selects clicks the "Create Return" button..

    initialScreenDecisions="NONE";//The user did not choose to add any entry details to the output list.
    MainWriter.finishedCounter=true;//The boolean counter to trigger that the return is finished goes to true.
    while(MainWriter.entryDetails.size()>0){//Removes all entry details from the input list.
        MainWriter.entryDetails.remove(0);
    }

    while(output.size()>0){//Removes all entry details from the output list..
        output.remove(0);
    }

}

}

上面的类创建了一个带有两个列表的GUI,其中内容可以使用箭头按钮以及标题为"确认"的两个标准JOptionPane按钮来回传送。和"创造回报"。当用户点击"创建回报"然后程序基本结束,并为它们生成一个文件。如果他们没有点击"创建回报"程序像往常一样继续,其他对话框出现。我遇到的问题是我被要求做到这一点,以便"创造回报"除非他们已达到程序中的某个点,否则按钮不起作用。 (这个程序通过上面的方法进行了几次循环,这取决于输入文件,因为它是一个缓冲的读写器。)

所以我真正需要的是根据变量将其设置在哪里,如果他们选择结果1,将出现错误消息并且程序不会前进。问题是,即使我在此阶段向程序中添加一个条件并带有错误消息,程序仍将继续运行。 "取消" JOptionsPane上的按钮将关闭该窗格,我的程序将照常继续。

如何让该选项显示消息,但在程序中不再进一步?将它视为具有活动侦听器而不是JOptionsPane按钮的JButton。

另一个按钮("确认")可以正常用作JOptionsButton,因为它可以像预期的那样推进程序。此外,"创造回报"按钮在满足变量检查的情况下工作正常。它改变了一些变量,程序继续照常进行。我只需要这样一个实例,其中按钮不会向前推进程序,用户可以选择另一个按钮。

1 个答案:

答案 0 :(得分:1)

您可以传递一组按钮,每个按钮都有自己的ActionListener,而不是将一个字符串数组传递给showOptionDialog()

final JButton button = new JButton("Something");
button.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(final ActionEvent ae) {
        // do something
    }
});

final Object[] options = new Object[] { button };

int result = JOptionPane.showOptionDialog(null, getPanel(),"Return Builder", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, "default");