2012-02-21 92 views
0

如何在下面的腳本中獲取返回的值,而不是println,我無法讀取它? 我在Filemaker內部使用Groovy,所以需要一個明確的返回'答案',即密碼或TRUE,我似乎不懂如何讓代碼等待,直到它終於到達輸入正確密碼的地步。從swingbuilder返回值

import groovy.swing.SwingBuilder 
import java.awt.event.ActionListener 
import java.awt.event.ActionEvent 
import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE 

count = 2 
def answer 

SwingBuilder.build{ 
    frame(id:'root', title:'Enter your PASSWORD', location:[100,100], show:true, pack:true, defaultCloseOperation:DISPOSE_ON_CLOSE){ 
     //lookAndFeel 'nimbus' 
     flowLayout() 
     label('Password') 
     passwordField(id:'pass', columns:12) 
     button('click', actionPerformed:{ 
     ActionEvent e-> 
      if (pass.text == 'password'){ 
      optionPane().showMessageDialog(root, 'OK') 

      //RETURN something at this point only when I get here 

      dispose() 
      } else if (count == 1) { 
      optionPane().showMessageDialog(root, 'INCORRECT PASSWORD\nPROCEDURE HALTED', 'PASSWORD', 2) 
      dispose() 
      } else { 
      count-- 
      message = count ==1 ?'try':'tries' 
      optionPane().showMessageDialog(root, "${count} ${message} left", 'NOT VALID', 0) 
      }// end if 
      pass.text='' 
     }// end action 
     )// end button 
    } 
} 

回答

1

添加名爲successfulLogin一個布爾字段,並將它設置爲truepass.text.equals("password")

當你真的讓你的框架可見?您可能想要使用JOptionPane。

import javax.swing.JComponent 
import javax.swing.JPasswordField 
import javax.swing.JLabel 
import javax.swing.JOptionPane 

public boolean loginSuccessful() throws Exception { 
    final JPasswordField passwordField = new JPasswordField(); 
    final JComponent[] components = [new JLabel("Password"), passwordField]; 
    if (JOptionPane.showConfirmDialog(null, components, "Enter your PASSWORD", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) == JOptionPane.OK_OPTION) { 
     // user clicked ok 
     if (new String(passwordField.getPassword()).equals("password")) { 
      // password matches 
      return true; 
     } 
    } 
    return false; 
}