Java GUI输入对话框显示两次

时间:2016-01-16 18:36:05

标签: java swing user-interface joptionpane

我有一个课程作业,我用Java制作了一个简单的Java会计程序。这是我第一次使用Java中的GUI,我不是一个好的程序员。

当程序运行时,用户可以选择五个JButton,点击它们时会将它们带到一个带有一些输入对话框的新JFrame,这些对话框保存为字符串和双打。 我的变量设置为

  

variable = JOptionPane.showInputDialog(" TEXTGOESHERE");

我的问题是,在对话框中输入值后,它们会再次弹出,就像在循环中一样。用户必须在每个对话框中输入两次输入。

  

其中一个按钮的代码:

pcButton.addActionListener(new ActionListener() 
{
  public void actionPerformed(ActionEvent e)
  {

    JFrame pcframe = new JFrame("Choosing a File Menu");
    pcframe.setSize(760,500);
         pcframe.add( new JPanel() 
         {
           public void paintComponent( Graphics g ) 
            {
              super.paintComponent(g);
              //ACTION BEGIN-----------------------------------------
  

显示两次的输入对话框:

              compName = JOptionPane.showInputDialog("What is the name of your business?");
              firstName = JOptionPane.showInputDialog("What is your first name?");
              lastName = JOptionPane.showInputDialog("What is your last name?");

              day = JOptionPane.showInputDialog("What is the day?");
              month = JOptionPane.showInputDialog("What is the month?");
              year = JOptionPane.showInputDialog("What is the year?");

              String filename = JOptionPane.showInputDialog("Would you like file 1, 2, or 3? (Type in 1, 2, or 3");

              filename = (filename + ".txt");

              //Storing File into array

              //Calculations

              g.drawString("" + compName, 330, 15);
              //More drawStrings


              //ACTION END-------------------------------------------
            }
         });
        pcframe.setVisible( true );

  }
});
modePanel.add(pcButton);

当按下pcButton时,用户应该输入他们的名字,文件等。但是,每个对话框输入都会显示两次。我希望输入只显示一次。

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

抱歉,但那都错了。您应该 从不 调用JOptionPanes,或者在paintComponent方法中执行除绘制之外的任何操作。您永远无法完全控制何时或甚至调用该方法,并且您的程序的感知响应能力部分取决于该方法完成其工作的速度。所以我的主要建议是 - 从该方法中获取所有非绘画代码,并使用您可以完全控制的方法。

我自己,而不是向用户抛出一堆JOptionPanes,我创建了一个JPanel,其中包含我希望用户填写的所有字段,然后显示一个保存此JPanel的单个JOptionPane,以及一次性获取所有输入。

接下来,你的辅助对话窗口应该是一个真正的对话框,对于Swing来说,这意味着一个JDialog(或JOptionPane,它是一种模态JDialog),而不是一个JFrame。