为什么双击而不是单个?

问题描述:

我有一个输入矩阵参数的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()); 
    } 
} 
+0

您发布的任何代码都与点击无关。 –

+0

@ CrushaK.Rool我知道,但我没有别的从动作执行功能调用。它应该只需点击一下,就像我应用程序中的其他按钮一样。我无法弄清楚问题所在。 – ivana14

+0

我不清楚你想要发生什么。从您发布的代码中,该按钮的点击只不过是验证并将某些文本字段的输入读入本地字段。无论您点击那个按钮多少次,这就是发生的一切。 –

你在这种情况下,问题是,你不检查第二,如果条件的文本字段值。以下应该做的伎俩。

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; 
    } 
} 
+0

它的工作原理!谢谢! – ivana14