【问题标题】:Waiting for a button press within a for loop?等待 for 循环中的按钮按下?
【发布时间】:2017-04-03 16:38:08
【问题描述】:

我不确定如何解决这个问题,但我的代码的目的是遍历一个 csv 文件,然后用户搜索某个项目。我使用 CSVReader 通过列表类型的字符串数组读取我的项目,所以这不是问题。

当用户搜索一个项目时,我创建了一个 for 循环来遍历我的 csv 文件的行和列,一旦找到就会输出一些代码。

我想要做的是,一旦找到该项目,它将打开另一个框架,并且用户将再次通过使用文本字段进行输入。然后按下另一个按钮,从而继续我们在另一个 for 循环中中断的地方,以便执行一些进行更改的代码。我只能遍历 for 循环一次,否则行和列的值会在这样做两次时加倍。

这是我的代码:

    editTigerFrame obj = new editTigerFrame();

    String getLocation = obj.editLocationField.getText();
    javax.swing.JButton saveButt = obj.saveEditButton;


    try{

        String strSearch = searchSerialField.getText();

        CSVReader reader = new CSVReader(new FileReader("test.txt"), ',');
        List<String[]> myEntries = reader.readAll();
        reader.close();

        for (int row = 0; row < myEntries.size(); row++)
        {
            for (int column = 0; column < myEntries.get(row).length; column++)
            {
                if (myEntries.get(row)[column].trim().equalsIgnoreCase(strSearch))
                {
                        System.out.println("Found - Your item is on row: " + row + ", column: " + column);

                        //If serial is found, open the editTigerFrame to edit details
                        new editTigerFrame().setVisible(true);

                        //Replace with user input
                        //When button is pressed in other class, execute this code
                        System.out.println("Saved");
                        String newLocation = getLocation;

正如您在代码sn-p底部附近看到的那样,一旦按下另一个表单上的按钮,执行代码以更改字符串。

有没有办法在 for 循环中暂停和继续?

感谢您的帮助,如果您还有其他需要,请告诉我,我会提供。

【问题讨论】:

  • 对循环和按钮单击使用通用flag 会很方便。在按钮单击处理程序上更新flag,并在您想要break 的最内层循环中使用相同的flag。使用新的Thread 将使其生效。

标签: java swing csv for-loop pause


【解决方案1】:

您可以使用 break; 离开 for 循环。在离开之前记住行、列等,并使用记住的值开始循环。

我认为将 for 循环放入自己的方法中是个好主意。这同样适用于输入的“弹出”。然后你可以在必要时给他们打电话。 ^^-d

编辑:一些示例代码:

        package pauseLoop;


public class pauseLoop {
        int rows;
        int columns;
        int something;
        static int[] a;

    public static void main(String[] gnarrr){
        pauseLoop myLoop = new pauseLoop();

        myLoop.Loop();

        myLoop.Loop();
    }

    public pauseLoop(){
        this.rows = 0;
        this.columns = 0;
        this.something = 11; //just random data
    }

    public void Loop(){
        System.out.println("starting loop with: rows = " + rows + " columns = " + columns + " something = " + something);

        for(int count = rows; count < 99999 ;count++){
            /* do some black magic ;) */

            if(count % 23 == 22){ // !condition to pause the loop! i chose something that can occur more than once
                this.rows += count; //remember rows
                this.columns += 5; // columns got 5 more by some black magic (nested loop or so)
                this.something += 31; //just some data needed to be remembered for later
                System.out.println("leaving loop with: rows = " + rows + " columns = " + columns + " something = " + something+ "\n");
                break; //leave loop!
            }
        }
    }

}

如果运行会产生以下输出:

开始循环:rows = 0 columns = 0 something = 11

离开循环:行 = 22 列 = 5 东西 = 42

开始循环:行 = 22 列 = 5 个东西 = 42

离开循环:行 = 44 列 = 10 东西 = 73

编码愉快!

【讨论】:

  • 如何使用记住的值重新启动循环?
  • @juiceb0xk 调整了代码,使循环真正以“行”恢复 - 原则保持不变^^
【解决方案2】:

有没有办法在 for 循环中暂停和继续?

也许显示JOptionPane 要求使用输入?

查看 How to Make Dialogs 上的 Swing 教程部分,了解更多信息和示例。

如果您要收集更复杂的数据,则可以使用模态 JDialog

【讨论】:

  • 一旦对话框打开并要求用户输入,我仍然需要暂停 for 循环,否则代码将继续执行,就好像我没有在文本字段中输入任何内容一样。
  • @juiceb0xk,是的,当 JOptionPane/JDialog 可见时循环会暂停,并会在对话框关闭后立即重新启动。因此,在继续循环之前,您需要在对话框关闭时获取数据并对其进行处理。
猜你喜欢
  • 1970-01-01
  • 2010-11-03
  • 2013-08-02
  • 2013-03-31
  • 2021-12-25
  • 2023-04-07
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多