【发布时间】:2014-08-17 19:27:43
【问题描述】:
我一直在开发 GUI,但在使用 JMenu 时遇到了一些问题。 GUI 位于一个单独的类中,该类从其余类中获取程序的所有操作。我使用菜单的问题是我希望它做两件事:首先,根据用户选择显示正确的面板,其次,等待用户输入以完成所选任务。
根据用户的选择,我已经将它安排成 13 个不同的 if.. else 子句,这部分与显示用户需要输入数据的必要输入选项(面板)一起正常工作。
第二部分,当用户看到正确的面板并想要输入信息(int 和字符串)时,事情并没有按预期进行。程序不会等待用户输入然后根据这些数据采取行动,而是向前推进并继续。由于没有输入数据,不用说,输出不是预期的。
我会提供部分课程,因为它很大。
class Employee implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("1"))
{
panelB.setVisible(false);
panelC.setVisible(false);
panelD.setVisible(false);
display.setText(bank.infoBank()); }
else if(e.getActionCommand().equals("2"))
{
panelB.setVisible(true); //Show all panels
panelC.setVisible(true);
panelD.setVisible(true);
label2.setText("Accountnumber: ");
text2.setText("");
display.setText("");
}
...
else if(e.getActionCommand().equals("5"))
{
panelB.setVisible(true);
panelC.setVisible(false);
panelD.setVisible(true);
display.setText("");
if(e.getActionCommand().equals("Ok") && !pNrText.getText().isEmpty()) //This is a JButton that when pressed should send the data to the method
{
if(checkInput(pNrText) == true) //Method to validate input
{
pNr = Long.parseLong(pNrText.getText()); //pNr is an input field
bank.addSavingsAccount(pNr); //this is a method from another class
}
else
{
JOptionPane.showMessageDialog(null, "Only digits permitted!");
}
}
最后一部分(actioncommand 等于 5)是程序在继续之前不等待用户输入任何内容的地方之一,因此根本不会接收任何输入来处理。
这是围绕不同 JMenu 构建的 ATM 程序的一部分,在另一个使用 JRadioButton 的地方,它按预期工作,但我无法使用 JMenu 让它工作,我不想使用 JRadioButton有很多选择(13)。
非常感谢任何输入! /约翰
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。见How to create a Minimal, Complete, and Verifiable example。
-
Use Actions for menuitems, rather than ActionListener。或者至少为您的菜单项使用单独的 ActionListener。
-
鉴于文本不包含?,它提示我问 - 我们的问题是什么? +1 也向@DavidPostill 提出 MCVE 建议。
-
@DavidPostill 所需的输出是使用用户输入来处理信息,输入是金额或银行帐号或社会保险号(所有整数)。换句话说,为方法提供参数。最常见的“错误行为”是编译器将空白输入解释为无效输入,因此无法正确执行该方法。
标签: java swing user-interface jmenu