如何在while循环中使用一个按钮的动作监听器?

时间:2015-10-24 15:29:04

标签: java swing loops while-loop do-while

我正在制作一个拍卖游戏,我将显示一个供用户出价的项目。如果用户不喜欢该项目,则通过单击下一个项目按钮来竞标另一个项目。然后显示另一个项目。这就是问题所在。当我在动作监听器中为按钮写一个continue语句时,它表示继续不能在循环之外使用。

1 个答案:

答案 0 :(得分:1)

同样,我非常怀疑你在这种情况下会想要使用while循环。相反,您可能会将项目保存在集合中,例如ArrayList或简单数组,具有int索引变量,并在按下按钮时递增索引,然后使用新的高级索引检索集合中的下一个项目。例如

import java.awt.event.ActionEvent;
import javax.swing.*;

@SuppressWarnings("serial")
public class NextItem extends JPanel {
    private static final String[] ITEMS = { "Sun", "Mon", "Tues", "Wed",
            "Thurs", "Fri", "Sat" };
    private JTextField displayField = new JTextField(10);
    private JButton nextBtn = new JButton(new NextAction("Next"));
    private int itemsIndex = 0;

    public NextItem() {
        displayField.setText(ITEMS[itemsIndex]);
        displayField.setFocusable(false);
        add(displayField);
        add(nextBtn);
    }

    private class NextAction extends AbstractAction {
        public NextAction(String name) {
            super(name); // give button its text
            int mnemonic = (int) name.charAt(0);
            putValue(MNEMONIC_KEY, mnemonic);  // give button a hot key
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            itemsIndex++; // advance index
            itemsIndex %= ITEMS.length; // renormalize it -- set to 0 if too large
            displayField.setText(ITEMS[itemsIndex]);
        }
    }

    private static void createAndShowGui() {
        NextItem mainPanel = new NextItem();

        JFrame frame = new JFrame("NextItem");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }
}