java - 输入对话框验证

时间:2013-10-08 09:19:58

标签: java swing validation input a-star

我正在尝试在java中实现 A *算法。要求用户键入要成为网格的宽度和高度。我的问题是验证输入。这是我的代码:

public class Map extends java.awt.Panel implements Serializable
{
JFrame frame = new JFrame();
String rows =  JOptionPane.showInputDialog(frame,
                "Συμπληρώστε τον αριθμό γραμμών του πλέγματος: \n",
                "Δημιουργία πλέγματος",
                JOptionPane.PLAIN_MESSAGE);
String cols =  JOptionPane.showInputDialog(frame,
                "Συμπληρώστε τον αριθμό στηλών του πλέγματος: \n",
                "Δημιουργία πλέγματος",
                JOptionPane.PLAIN_MESSAGE);

int rowsnum = Integer.parseInt(rows); 
int colsnum = Integer.parseInt(cols);
GridCell gridCell[][] = new GridCell[rowsnum][colsnum];

public Map()
{
        super();

    setLayout(new GridLayout(rowsnum,colsnum)); 
    for(int i=0;i<rowsnum;i++){ 
        for(int j=0;j<colsnum;j++){
           gridCell[i][j] = new GridCell();
           gridCell[i][j].setPosition(new Point(i,j));
           add(gridCell[i][j]);
        }
    }
}

我尝试使用新方法检查输入,但我的问题是我需要访问其他类中的rowsnumcolsnumgridcell[]程序。

我是Java的新手,我非常感谢任何帮助。 : - )

3 个答案:

答案 0 :(得分:1)

现在你的rowsnum,colsnum和GridCells是你的“Map”类中的变量。

为了从其他类中访问它作为实例变量,

public int rowsnum = // something
public int colsnum = // something
public GridCell girdCell[][] = //something

“public”表示可以从班级外部访问该变量。

在Map类之外,

Map m = new Map();
int rowsnum = m.rowsnum
int colsnum = m.colsnum
// access instance variables

但是,最好为实例变量创建getter和setter。

即创建用于获取和设置这些变量的单独方法。

public int getRowsNum() {
    return rowsnum;
}

等。

答案 1 :(得分:1)

您可以通过Map类对象访问它们(将访问修饰符更改为公开这些变量)

示例:在B类中

public class Test {
    public static void  main(String args[]){
        Map someMap = new Map();

        //Access gridCell 
        someMap.gridCell;

        //Access rowsnum
        someMap.rowsnum;

        //Access colsnum
        someMap.colsnum;
    }
}

或者您可以将它们设为静态,并使用类名

访问它们

示例:     Map.rowsnum;

答案 2 :(得分:0)

我能想到的最简单的解决方案

使用If

验证宽度/高度数字
public class Map extends java.awt.Panel implements Serializable
    {      
    String width =  JOptionPane.showInputDialog("Give Width (>5 , <30)");
    int w = Integer.parseInt(width);

    String height =  JOptionPane.showInputDialog("Give height (>5 , <30)");
    int h = Integer.parseInt(height);

    GridCell gridCell[][] = new GridCell[w][h];

    public Map()
    {
    super();
    setLayout(new GridLayout(w,h)); 

    if ( w < 5)
    {JOptionPane.showMessageDialog ( null, "Number out of Limits ,application closing" );
     System.exit(0);}
    if ( w > 30)
    {JOptionPane.showMessageDialog ( null, "Number out of Limits ,application closing" );
     System.exit(0);}
    if ( h < 5)
    {JOptionPane.showMessageDialog ( null, "Number out of Limits ,application closing" );
     System.exit(0);}
    if ( h > 30)
    {JOptionPane.showMessageDialog ( null, "Number out of Limits ,application closing" );
     System.exit(0);}


        for(int i=0;i<w;i++){ 

            for(int j=0;j<h;j++){
               gridCell[i][j] = new GridCell();
               gridCell[i][j].setPosition(new Point(i,j));
               add(gridCell[i][j]);
            }
        }
    }

使用public main上的try-catch验证字符串输入错误

public static void main(String[] argv) {

try{    
AStar2 test = new AStar2();                   
test.setLocationRelativeTo(null);
test.setDefaultCloseOperation(test.EXIT_ON_CLOSE);}
catch(NumberFormatException e){JOptionPane.showMessageDialog ( null, "BLOODY HELL DONT PUT STRINGS FOR INPUT, APPLICATION IS CLOSING , TRY BETTER NEXT TIME" );}

    }

}