【问题标题】:How to use an action Listener for a button inside a while loop?如何在while循环中为按钮使用动作监听器?
【发布时间】:2015-10-24 15:29:04
【问题描述】:

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

【问题讨论】:

  • 请问您的代码?很大程度上取决于您的代码、错误和未显示的错误消息。请注意,我非常怀疑在这种情况下您是否需要使用 while 循环。相反,您可能会将项目保存在 ArrayList 等集合中,有一个 int 索引变量,并在按下按钮时递增索引,然后使用新的高级索引检索集合中的下一个项目。
  • 另外,请浏览tour、help center 和how to ask a good question 部分,了解本网站的运作方式并帮助您改进当前和未来的问题,这可以帮助您获得更好的答案。

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


【解决方案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();
            }
        });
    }
}

【讨论】:

  • 非常感谢。我会立即尝试代码。抱歉耽搁了
猜你喜欢
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 2021-05-05
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
相关资源
最近更新 更多