2014-04-10 4 views
0

JOptionPane showConfirmDialog를 통해 사용자의 입력을 확인하고 문자열에 신뢰할 수있는 연령이 포함되어 있는지 확인하는 좋은 방법을 찾고 있습니다. 아이디어는 이러한 입력을 사용하여 객체에 추가 한 다음 객체를 ArrayList에 추가하는 것입니다.JOptionPane 입력 유효성 검사

문제는 "아래의"NyLis "클래스입니다. 확인하는 방법이 있나요

    1. (18) 사이에서 100 이름 =보기 이름, 토지 = 국가. 오리는 = 세. 나이가되어야한다 문자열이 실제 문자열입니까?
    2. 입력이 유효하지 않은 경우 창을 반환하고 이전 입력을 유지하므로 잘못 사용 된 곳을 선택할 수 있습니다.
    3. 블록을 시도하고 catch합니까? 좋은 옵션은 무엇이며 어떻게 구현합니까?

    나는 while 루프를 사용하여 놀고 있었고 블록을 잡으려고했지만 모두 내 어리석은 머리를 감쌀 수는 없다.

    도움이된다면 대단히 감사하겠습니다.

    // 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 Split과 같은 몇 가지 메소드를 사용해 볼 수 있습니다. 값이없는 지능의를하거나 높거나 낮은 경우

    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 루프와 루프를 않습니다. Heres는

    지능 검증에 대한 이전 질문에서 링크 : 더 나은 도움을 빨리 들어 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

    또한 'Land'는 모든 국가 (또는 하위 집합)가있는'JComboBox '에서 선택할 수 있습니다. – dic19

    +1

    @ dic19 좋은 지적. [이 답변] (http://stackoverflow.com/a/9760438/418556)은 JVM의'Locale' 목록을 사용하여 국가 목록을 얻습니다. –