为什么要双击而不是单击?

时间:2017-05-27 09:46:31

标签: java swing jframe

我有一个JFrame,我在其中输入矩阵的参数,在输入这​​些参数后,用户应该单击按钮开始模拟。问题是,按钮应该被点击两次而不是一次,以便打开写入消息的JOption窗格。我只是想不通为什么会这样。这是从模拟按钮的动作执行功能调用的函数:

private void setMatrixParameters(){
    if(tfTouristNumber.getText().equals("") || tfRowNumber.getText().equals("") || tfColumnNumber.getText().equals("") || tfMinimal.getText().equals("")){
        JFrame frame = new JFrame();
        JOptionPane.showMessageDialog(frame, "All fields must be filled", "Error!", JOptionPane.ERROR_MESSAGE);
    }

    //check the matrix dimensions
    else if(min + touristNumber > Integer.parseInt(tfRowNumber.getText()) * Integer.parseInt(tfColumnNumber.getText())){
        int dimension= min + touristNumber;
        JFrame frame = new JFrame();
        JOptionPane.showMessageDialog(frame, "Matrix dimensions too small. Need to be at least:" + dimension, "Enlarge matrix!", JOptionPane.ERROR_MESSAGE);
    }

    else{
        this.touristNumber = Integer.parseInt(tfTouristNumber.getText());
        int row = Integer.parseInt(tfRowNumber.getText());
        int column = Integer.parseInt(tfColumnNumber.getText());
        this.matrix = new Object[row][column];
        this.min = Integer.parseInt(tfMinimal.getText());
    }
}

1 个答案:

答案 0 :(得分:1)

在这种情况下,您的问题是您没有检查第二个if条件中的文本字段值。以下应该可以解决问题。

private void setMatrixParameters(){
    if(tfTouristNumber.getText().equals("") || tfRowNumber.getText().equals("") || tfColumnNumber.getText().equals("") || tfMinimal.getText().equals("")){
        JFrame frame = new JFrame();
        JOptionPane.showMessageDialog(frame, "All fields must be filled", "Error!", JOptionPane.ERROR_MESSAGE);
      return;
    }

    // Read values here. (Should probably add a try-catch block around this, in case it can't be parsed as number)
    int inTouristNumber = Integer.parseInt(tfTouristNumber.getText());
    int inRow = Integer.parseInt(tfRowNumber.getText());
    int inColumn = Integer.parseInt(tfColumnNumber.getText());
    int inMin = Integer.parseInt(tfMinimal.getText());

    //check the matrix dimensions
    if(inMin + inTouristNumber > inRow * inColumn){
        int dimension= inMin + inTouristNumber;
        JFrame frame = new JFrame();
        JOptionPane.showMessageDialog(frame, "Matrix dimensions too small. Need to be at least:" + dimension, "Enlarge matrix!", JOptionPane.ERROR_MESSAGE);
    }
    else{
        this.touristNumber = inTouristNumber;
        this.matrix = new Object[inRow][inColumn];
        this.min = inMin;
    }
}