2014-04-10 174 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'列表获取国家列表。 –