2012-02-23 13 views
1

コントローラクラスにいくつかの異なるメソッドを持つこのライブラリアプリケーションがあります。それらの1つはcheckOutと呼ばれ、ライブラリ項目のチェックアウトに使用されます。アプリケーションにGUIを追加する

「チェックアウト」ボタンが押されたときにこれを実行しようとしています。作成したtxtフィールドから必要な情報をすべて取得できることを願っています。

私は以下のことをしました。実行中に「チェックアウト」を押すと、どこでも赤いエラーで爆発しています。どんな助けもありがとう、thx!

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"); 
      } 

    } 
+0

エラーは何ですか? –

+0

*「どこでも赤いエラーで爆発する」*それはとてもきれいでなければならない。 :) –

+1

すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。私がSSCCEを持っていれば、私が特にうまく行っていないことを「推測」や「推測」する理由はありません。 ;) –

答えて

4
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である必要があります。

SpinnerDemo

は、そのスクリーンショットのためのチュートリアル、作業コード、さらにヒントにHow to Use Spinnersを参照してください。

テキストフィールドがスピナーの代わりに使用されていた場合、検証のすべての偽名が冗長化されます。スピナーは、有効な(ただし必ずしも正しい - ユーザーインテリジェンスAPIが必要です)日付を提供します。

+1

for JSpinner +1 – mKorbel

+0

@mKorbel私は「なぜドライバーが必要なときにハンマーを使用するのですか」と思っている質問を頻繁に読んでいます。これは「仕事のための適切なツール」が大いに役立つものの1つです。 :) –

+0

.........と私は[視覚芸術]のnon_accepted部分としてGUIプログラミングを取る(http://en.wikipedia.org/wiki/Visual_arts) – mKorbel