java - JOptionPane 输入验证

标签 java swing user-interface while-loop joptionpane

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

问题出在下面的“NyLis”类中”。 名称 = Namn,土地 = 国家。奥尔德 = 年龄。年龄应在 18 至 100 岁之间。

  1. 有没有办法检查该字符串是否是实际字符串?
  2. 有没有办法在输入无效时返回窗口,并保留之前的输入,以便用户可以找到出错的地方?
  3. try 和 catch block 在这里是一个不错的选择吗?我将如何实现它们?

我一直在玩 while 循环和 try catch block ,但我无法用我愚蠢的头脑来理解这一切。

非常感谢任何帮助。

//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

最佳答案

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());

关于java - JOptionPane 输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22991590/

相关文章:

linux - 哪个开源程序类似于Linux "dialog"命令?

html - 我可以使用媒体查询有效地创建一个单独的移动站点吗?

java - 在Scala play框架中处理xml

java - 当泛型函数有两种返回类型时意味着什么?

Java - 如何 "unhide"JFrame

java - 在 Swing 中创建可重新排列的选项卡

java - 从字符串中查找时间戳模式

java - 使用 JAXB 解析 XML

java - 无法编辑 JTextField - Java Swing

java - 如何判断gui是否完全用java构建?