2014-10-28 56 views
0

所以我一直在編寫一個程序,該程序爲員工數據提供用戶輸入,並將其添加到ArrayList中進行顯示。該程序工作正常,除了兩點。首先是我試圖驗證用戶輸入6美元到160美元之間的小時費率。下面是該代碼:驗證一個double值在兩個值和GUI之間打開兩個JFrames

try{ 
     double r = Double.parseDouble(rate.getText()); 

     if (r >= 6 && r <= 150){ 
      test.setRate(r); 
     } 
    } catch(NumberFormatException e){ 
     JOptionPane.showMessageDialog(null, "Sorry, hourly rate must be between $6 and $150."); 
     return; 
    } 

它驗證它是這些值之間,但如果它是不是簡單地將其設置爲0,而不是顯示所述消息發送到所述用戶並返回的方法的。

我的第二個問題是更復雜一點,說實話我完全失去了。當我運行程序來測試或調試時,會打開兩個窗口。主窗口是完全空白的,但是控制着命令,而第二個窗口是我編寫的所有內容。我試圖搜索第二個JFrame,它可能已被初始化,但找不到一個。我有更大的代碼量,並不太清楚,可能需要什麼,但這裏要說的是,我相信基於關閉行爲是造成該問題的代碼:

face = new JFrame(); 
    face.setSize(300,300); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    GroupLayout design = new GroupLayout(face.getContentPane()); 
    face.setLayout(design); 
    face.setVisible(true); 

    design.setAutoCreateGaps(true); 
    design.setAutoCreateContainerGaps(true); 
    design.setVerticalGroup 
    (
     design.createSequentialGroup() 
      .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING) 
       .addComponent(fName) 
       .addComponent(first) 
       .addComponent(list)) 
      .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)      
       .addComponent(lName) 
       .addComponent(last)) 
      .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)      
       .addComponent(hWork) 
       .addComponent(hours)) 
      .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)      
       .addComponent(hRate) 
       .addComponent(rate)) 
      .addComponent(admin) 
      .addComponent(market) 
      .addComponent(account) 
      .addComponent(prod) 
      .addComponent(sales) 
      .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)      
       .addComponent(submit) 
       .addComponent(exit)) 
    ); 


    design.setHorizontalGroup 
    (
     design.createSequentialGroup() 
      .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING) 
       .addComponent(fName) 
       .addComponent(lName) 
       .addComponent(hWork) 
       .addComponent(hRate) 
       .addComponent(admin) 
       .addComponent(market) 
       .addComponent(account) 
       .addComponent(prod) 
       .addComponent(sales) 
       .addComponent(submit)) 
      .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING) 
       .addComponent(first) 
       .addComponent(last) 
       .addComponent(hours) 
       .addComponent(rate) 
       .addComponent(exit)) 
      .addComponent(list) 
    ); 
} 

除了創建單獨的控制,這是一切與GUI設計有關。任何有識之士都會在這裏受到歡迎!如果我忘了發帖子,我會很樂意這樣做。

+0

*「驗證一個雙待兩個值之間。」 *'JSpinner'用'SpinnerNumberModel' *「..和GUI打開兩個JFrames」*參見[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/q/9554636/418556)..有什麼問題嗎? – 2014-10-28 04:53:40

+0

@AndrewThompson我不認爲OP想要第二幀,但沒有一個可運行的例子,它是不可能知道它來自哪裏... – MadProgrammer 2014-10-28 04:57:43

+0

雖然我真的很喜歡使用JSpinner的想法(這將是一個有趣的功能)我必須驗證用戶的輸入。我在研究關於第二個窗口的問題時讀過那篇文章。實際上很難解釋。當我運行程序時,兩個窗口會自動運行,當我只打算一個。我不打算打開的那個是空白的,我看不到我告訴它打開的位置。 – 2014-10-28 05:02:31

回答

1

你的第一個問題發生,因爲如果r不在6與150之間,try塊不會拋出NumberFormatException,因此您的catch未執行。 您需要添加一條else語句才能顯示該消息。

boolean showError = false; 
try{ 
    double r = Double.parseDouble(rate.getText()); 

    if (r >= 6 && r <= 150){ 
     test.setRate(r); 
    }else{ 
     showError = true; 
    } 
} catch(NumberFormatException e){ 
    showError = true; 
} 

if(showError){ 
    JOptionPane.showMessageDialog(null, "Sorry, hourly rate must be between $6 and  $150."); 
} 

既然你是使用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);直接我想你是執行在擴展JFrame一類這個代碼,這意味着你有2 JFrame是你們等,當你調用認爲代碼的類創建一個和face

如果你有一個類,它擴展JFrame,不產生其他JFrame S,你應該刪除:

face = new JFrame(); 
+0

噢,天啊!我不敢相信我沒有看到,非常感謝。現在正在計算它應該是的方式。至於我的第二個問題,我會繼續努力,看看我能做些什麼。如果你想要一個可運行的例子,我會很樂意發佈它。我現在主要關心的是驗證。 – 2014-10-28 05:09:31

1

嘗試閱讀這讓...

if (r >= 6 && r <= 150){ 
    test.setRate(r); 
} 

如果你像我一樣你再結,去當值正確解析到double「?現在是什麼」 ......會發生什麼,但超出範圍...?

您將需要一個else條件添加到捕獲所有開出的條件的規定範圍的身邊...

if (r >= 6 && r <= 150){ 
    test.setRate(r); 
} else { 
    // Show error message here 
} 

至於你的第二個問題,考慮提供runnable example這表明你的問題。這會減少混淆和更好的反應。

在此同時,你也可能想看看How to Use Spinners,這將允許您定義組件,這將幾乎做你的代碼片段試圖做...