JOptionPane输入验证

时间:2014-04-10 14:53:03

标签: java swing user-interface while-loop joptionpane

我正在寻找一种通过JOptionPane showConfirmDialog检查用户输入的好方法,确保它包含一个字符串和一个可靠的年龄。我们的想法是使用这些输入并将它们添加到一个对象,然后将其添加到ArrayList。

问题出在下面的“NyLis”课程中。 Name = Namn,Land = country。 Ålder=年龄。年龄应在18到100之间。

  1. 有没有办法检查字符串是否为实际字符串?
  2. 如果输入无效,有没有办法返回窗口,并保留以前的输入,这样用户可以在错误的地方找到它?
  3. 在这里尝试捕捉阻挡是一个不错的选择,我将如何实现它们?
  4. 我一直在玩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

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

有几种方法你可以去做。对于您可以尝试使用某些方法(如字符串拆分)将日期分解为&#39; /&#39;并查看日期是否在相关范围内。

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循环,如果值不是Int或者是高或低,则将用户循环回到新输入的开头。

以下是关于Int验证的问题的链接:Link!