2014-04-10 176 views
0

我正在尋找一種很好的方法來檢查用戶的輸入,通過JOptionPane showConfirmDialog,確保它包含一個字符串和一個可信的年齡。這個想法是使用這些輸入並將它們添加到一個對象,然後將其添加到一個ArrayList。JOptionPane輸入驗證

的問題是在下面的」「NyLis」級。 名稱= NAMN,與土地=國家。阿爾德=年齡。年齡應在18到100之間

  1. 有沒有一種方法來檢查該字符串是一個實際的字符串?
  2. 有沒有辦法返回窗口,如果輸入無效,並保持前面的輸入,所以使用可以拿起它出錯的地方?
  3. 是try和catch塊a這裏有很好的選擇,我將如何實施它們?

我一直在玩while循環,並嘗試catch塊,但我無法將我的愚蠢的頭包裹在一起。

任何幫助非常感謝。

// JOptionPane的窗口

 Form(){ 

     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 

     JPanel rad0 = new JPanel(); 
     rad0.add(new JLabel("StartNr: "+ list.size()+1+"")); 
     add(rad0); 

     JPanel rad1 = new JPanel(); 
     rad1.add(new JLabel("Namn: ")); 
     namnFält = new JTextField(15); 
     rad1.add(namnFält); 
     add(rad1); 

     JPanel rad2 = new JPanel(); 
     rad2.add(new JLabel("Land: ")); 
     landFält = new JTextField(15); 
     rad2.add(landFält); 
     add(rad2); 

     JPanel rad3 = new JPanel(); 
     ålderFält = new JTextField(5); 
     rad3.add(ålderFält); 
     rad3.add(new JLabel("Ålder: ")); 

     rad3.add(ålderFält); 
     add(rad3); 


    } 

} 

//監聽

class NyLis implements ActionListener{ 
    public void actionPerformed(ActionEvent ave){ 

     Form f = new Form();    

     int svar = JOptionPane.showConfirmDialog(null, f); 
     if (svar != JOptionPane.OK_OPTION) 

      return; 

      String namn = f.namnFält.getText(); 
      String land = f.landFält.getText(); 
      int ålder = Integer.parseInt(f.ålderFält.getText()); 

      boolean success=false; 

      while(!success){ 
      JOptionPane.showMessageDialog(null, "Fel. Försök igen."); 
      int svar2 = JOptionPane.showConfirmDialog(null, f); 
      if (svar2 != JOptionPane.OK_OPTION) 

      return; 

      if(!namn.isEmpty() && !land.isEmpty()&&!(ålder<18 || ålder>100)){   
      success=true; 

      int startNr = list.size()+1; 


      Tävlande tv = new Tävlande (namn,land,ålder,startNr,Double.MAX_VALUE); 
      list.add(tv); 
      visa.setEnabled(true); 

        } 

         } 



       } 
     } 

//對象

public class Tävlande implements Comparable<Tävlande>{ 



    private String namn; 
    private String land; 
    private int ålder; 
    private int startNr; 
    private double tid; 

    public Tävlande (String namn, String land,int ålder,int startNr, double tid){ 
     this.namn = namn; 
     this.land = land; 
     this.ålder = ålder; 
     this.startNr = startNr; 
     this.tid = tid; 
    } 

    public String getNamn(){ 
     return namn; 
    } 


    public String getLand(){ 
     return land; 
    } 

    public int getÅlder(){ 
     return ålder; 
    } 

    public int getStartNr(){ 
     return startNr; 
    } 

    public double getTid(){ 
     return tid; 
    } 

    public void setTid(Double tid) { 
     this.tid = tid; 
    } 

    public String toString(){ 
     String str = namn +" " + ", Land: "+land + ", Ålder: " +ålder+ ", Startnummer: " + " "+startNr; 
     return str; 

    } 
    public String toString2(){ 
     String str = namn +" " + ", Land: "+land + ", Ålder: " +ålder+ ", Startnummer: " + " "+startNr+ ", Tid: "+tid; 
     return str; 

    } 
    public boolean equals(Object other){ 
     if (other instanceof Tävlande){ 
      Tävlande t = (Tävlande) other; 
      if (startNr == t.startNr) 
       return true; 

      else 
       return false; 

     } 
     else{ 
      return false; 
     } 
    } 

    @Override 

    public int compareTo(Tävlande other) { 
     if(startNr < other.startNr) 
      return -1; 
     else if (startNr > other.startNr) 
      return 1; 
     else 
      return 0; 

    } 

} 

enter image description here

+0

爲了更好地幫助越早,張貼[MCVE(http://stackoverflow.com/help/mcve)(最小完備和可驗證例)。 –

回答

0

那麼有幾種方法你可以去這樣做它。對於日期,您可以嘗試使用一些方法,如字符串拆分將日期分解爲「/」,並查看日期是否在相關範圍內。

String string = "4/10/2014"; 
String[] parts = string.split("/"); 
String part1 = parts[0]; // 4 
String part2 = parts[1]; // 10 
String part3 = parts[2]; // 2014 

然後做一個while循環和循環用戶回到開始的新的輸入,如果值不誠信的或者是高還是低。

繼承人約詮釋驗證前一個問題的鏈接:Link!

2
SpinnerNumberModel ageModel = new SpinnerNumberModel(25, 18, 100, 1); 
JSpinner ageSpinner = new JSpinner(ageModel); 
JOptionPane.showMessageDialog(
    frame, ageSpinner, "Age?", JOptionPane.QUESTION_MESSAGE); 
System.out.println(ageSpinner.getValue()); 
+0

此外,可以從所有國家(或其子集)的「JComboBox」中選擇「Land」。 – dic19

+1

@ dic19好點。 [This answer](http://stackoverflow.com/a/9760438/418556)通過使用JVM的'Locale'列表獲取國家列表。 –