【问题标题】:Adding a GUI to my application向我的应用程序添加 GUI
【发布时间】:2012-03-13 14:21:07
【问题描述】:

我有这个库应用程序,它的控制器类中有几个不同的方法。其中之一称为 checkOut,用于签出库项目。

我正在尝试在现在按下“结帐”按钮时实现这一点,并希望它可以从我创建的 txt 字段中获取所有必要的信息。

我做了以下操作,当我在运行时按“结帐”时,到处都是红色错误。感谢任何帮助,谢谢!

if (source == checkoutButton)
    {
        /*JDialog checkout = new JDialog(checkoutContent, "Checkout", true);
        JPanel panel = new JPanel();
        checkout.setBounds(750, 300, 350, 190);
        checkout.setResizable(false);
        checkout.add(panel);
        checkout.setVisible(true);*/

        String borrowerID = userIDTxtField.getText();
        String code = itemIDField.getText();
        String date = dateField.getText();
        String copyString = code.substring(1);
        int copy=Integer.valueOf(copyString);

if (ctrl.checkBorrower(borrowerID))
            {

        boolean valid = false;
        SimpleDateFormat sdf1= new SimpleDateFormat("M/dd/yyyy");
        sdf1.setLenient(false);

                   while (!valid)
                   {

                   try
                   {
                       sdf1.parse(date);
                       catalogArea.setText(ctrl.checkOut(borrowerID, code, copy, date));
                       valid = true;

                   }
                   catch (Exception e)
                   {
                       catalogArea.setText("Date is not valid. Please try again.");
                       continue;
                   }

                   }
            }
            else
            {
                catalogArea.setText("Sorry Invalid ID");
            }

    }

【问题讨论】:

  • “到处都是红色错误” 那一定很漂亮。 :)
  • 如需尽快获得更好的帮助,请发布SSCCE。如果我有 SSCCE,就没有理由“假设”或“猜测”——这是我不太擅长的。 ;)

标签: java swing user-interface date button


【解决方案1】:
while (!valid)
{
try
{
   sdf1.parse(date);
   catalogArea.setText(ctrl.checkOut(borrowerID, code, copy, date));
   valid = true;
}
catch (Exception e)
{
   catalogArea.setText("Date is not valid. Please try again.");
   continue;
}
}

如果日期无效,此代码将导致有效的无限循环。 GUI 很可能会被阻止(如果在 EDT 上发生这种情况 - 如果不是在 EDT 上,则 GUI 更新不正确),因此将阻止用户更改导致循环的无效日期。


为了解决这个问题,我会查看循环中未显示的第一个更改代码。基本上,dateField(大概是JTextField)应该是JSpinner

请参阅教程中的 How to Use Spinners 以获取该屏幕截图、工作代码和更多提示。

如果文本字段是微调器,则整个验证恶作剧都是多余的。微调器将提供有效(但不一定正确 - 需要用户智能 API)日期。

【讨论】:

  • @mKorbel 我经常读到一些让我思考“为什么在需要螺丝刀时使用锤子?”的问题。这是“适合工作的正确工具”将大有帮助的事情之一。 :)
  • ......... 我将 GUI 编程视为 Visual Arts 的 non_accepted 部分
  • @mKorbel 如果我能像The Church at Auvers 那样塑造我的框架,我可以成为第三个千年的..Van GUIph。 ;)
  • brrrrr,非常糟糕的例子,......嗯,这个 Van Gulph 不是......在???的一生中也很有名:-)
  • 哇,谢谢大家的所有提示。我肯定会尝试 JSpinner Andrew,谢谢!
猜你喜欢
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多