【发布时间】:2014-12-10 03:09:28
【问题描述】:
我有一个简单的货币转换程序,允许用户输入三个文本字段之一,以便将其金额转换为美元。我希望用户能够根据需要多次输入信息,因此我创建了一个名为 continueButton 的 JButton,但我无法正确创建循环并重置程序。
问题:如何写一个循环语句让这个程序从头开始,让用户再次输入数字?
public class MoneyConversionPanel extends JPanel {
JLabel yenLabel = new JLabel();
JLabel poundLabel = new JLabel();
JLabel euroLabel = new JLabel();
JTextField yenText = new JTextField("Enter Yen amount here:");
JTextField poundText = new JTextField("Enter Pound amount here:");
JTextField euroText = new JTextField("Enter Euro amount here:");
JButton continueButton = new JButton("Click to reset");
JButton yenButton = new JButton("Convert");
JButton poundButton = new JButton("Convert");
JButton euroButton = new JButton ("Convert");
MoneyConversion userInput;
public MoneyConversionPanel()
{
Dimension dimension = new Dimension(1200,1000);
setPreferredSize(dimension);
setBackground(Color.cyan);
yenButton.addActionListener(new buttonListener());
add(yenLabel);
add(poundLabel);
add(euroLabel);
add(yenText);
add(poundText);
add(continueButton);
continueButton.setVisible(false);
add(euroText);
add(yenButton);
add(poundButton);
add(euroButton);
}
private class buttonListener implements ActionListener
{
double conversionDouble;
NumberFormat costFmt = NumberFormat.getCurrencyInstance();
@Override
public void actionPerformed(ActionEvent e) {
do {
for(int i = 0; i < 1; i++)
{
if(e.getSource() == yenButton)
{
userInput = new MoneyConversion(Double.parseDouble(yenText.getText()));
conversionDouble = userInput.convertYen();
yenLabel.setText("" + costFmt.format(conversionDouble));
continueButton.setVisible(true);
}
else if(e.getSource() == poundButton)
{
userInput = new MoneyConversion(Double.parseDouble(poundText.getText()));
conversionDouble = userInput.convertPounds();
poundLabel.setText("" + costFmt.format(conversionDouble));
continueButton.setVisible(true);
}
else if(e.getSource() == euroButton)
{
userInput = new MoneyConversion(Double.parseDouble(euroText.getText()));
conversionDouble = userInput.convertEuro();
euroLabel.setText("" + costFmt.format(conversionDouble));
continueButton.setVisible(true);
}
}
} while(e.getSource() == continueButton);
}
}
}
【问题讨论】:
-
您能缩小到您提出问题的部分吗?
-
摆脱 do-while 循环,因为它会占用您的 Swing 事件线程。这不是您想要进行事件驱动编程的方式。相反,为什么还要有一个“继续”按钮?只是在他们完成之前不要结束程序。不,不要像@Jonjongot 建议的那样“从一个while循环开始”——这同样糟糕,而且对于事件驱动的程序也不起作用。
-
我特指actionPerformed body所在部分的底部。
-
@HovercraftFullOfEels 好的。只是说。我什至没有阅读整篇文章-_-
-
@HovercraftFullOfEels,那么我该如何让这个 GUI 允许用户输入任意次数?
标签: java loops user-interface button text