2014-11-13 3 views
1

사용자가 다른 부분에 액세스 할 수있는 프로그램을 만들려고합니다. 이 설정을 통해 사용자의 2 암호가 일치하지 않으면 정보를 다시 입력해야합니다. 또한 사용자가 아무 것도 입력하지 않으면 모든 정보를 다시 입력해야합니다. 어떻게해야 사용자가 좋은 정보를 입력 할 때까지 계속 반복 할 수 있습니까?좋은 입력이 될 때까지 루프를 계속 하시겠습니까?

if (e.getSource() == okButton) { 
     if(!passString.equals(passStringConfirm) || userName.equals(null) || passString.equals(null) || passStringConfirm.equals(null)){ 
       enterUsername.setText(""); 
       enterPassword.setText(""); 
       enterConfirmPassword.setText(""); 
       } 
      } 

이것은 내가 지금까지 가지고있는 것이며, 하나의 반복에만 적용됩니다. 나는 잠시 동안 노력했다. 그리고 JOptionPane에서 인쇄하려고하는 경고 메시지를 계속해서 출력했다.

import java.awt.Color; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPasswordField; 
import javax.swing.JTextField; 
import javax.swing.border.Border; 

public class CreateAccount extends JFrame implements ActionListener { 

    JLabel username = new JLabel("Enter your username"); 
    JTextField enterUsername = new JTextField(null, 15); 
    JLabel password = new JLabel("Enter your password"); 
    JPasswordField enterPassword = new JPasswordField(null, 15); 
    JLabel passwordConfirm = new JLabel("Confirm your password."); 
    JPasswordField enterConfirmPassword = new JPasswordField(null, 15); 
    JButton okButton = new JButton("OK"); 

    String userName; 
    double initialDeposit; 

    public CreateAccount() { 

     add(username); 
     add(enterUsername); 
     add(password); 
     add(enterPassword); 
     add(passwordConfirm); 
     add(enterConfirmPassword); 
     add(okButton); 

     okButton.addActionListener(this); 

     setTitle("New Bank Account Creation"); 
     setVisible(true); 
     setLocationRelativeTo(null); 
     setSize(270, 300); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLayout(new FlowLayout()); 

    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     char[] pass = enterPassword.getPassword(); 
     String passString = new String(pass); 
     char[] passConfirm = enterConfirmPassword.getPassword(); 
     String passStringConfirm = new String(passConfirm); 

     userName = enterUsername.getText(); 

     if (e.getSource() == okButton) { 
      if(userName == null || userName.isEmpty() || passString == null || passString.isEmpty() || !passString.equals(passStringConfirm)) { 
        enterUsername.setText(""); 
        enterPassword.setText(""); 
        enterConfirmPassword.setText(""); 
        Border redLine = BorderFactory.createLineBorder(Color.red); 
        enterUsername.setBorder(redLine); 
        enterPassword.setBorder(redLine); 
        enterConfirmPassword.setBorder(redLine); 
        repaint(); 
        } 
       } 
      super.dispose(); 

      int response = 0; 
      String firstDesposit = JOptionPane.showInputDialog("Welcome " + userName + ". Enter your initial deposit."); 
      initialDeposit = Double.parseDouble(firstDesposit); 
      if (response == JOptionPane.OK_OPTION) { 
       new Menu(); 
      } 
     } 
    } 
+5

버튼을 클릭하면? 그러면 UI가 잠길 것입니다. 또한 ** nothing **'.equals (null)'입니다. 만약'null'이라면'equals' 메소드를 호출했을 때'NullPointerException'을 얻을 것입니다. –

+1

루프가 어디에 있습니까? – redFIVE

+0

루프를 구현하는 데 도움이 필요합니다. 나는 사용자의 오류를 말하는 JOptionPane 메시지로 do를 시도했지만, 창을 닫을 때 계속 인쇄 할 것이다. JOptionPane 경고를 한 번만 인쇄하면서이 루프 기능을 만들 수 있습니까? – AlecR

답변

0

if 테스트가 올바르지 않을 수 있습니다. String (s)가 null 인 경우 NullPointerException이 표시됩니다. 당신이 원했던 것 같아요

if (userName == null || userName.isEmpty() || passString == null 
      || passString.isEmpty() 
      || !passString.equals(passStringConfirm)) { 
    enterUsername.setText(""); 
    enterPassword.setText(""); 
    enterConfirmPassword.setText(""); 
} 

그런 다음 UI 코드가 비어 있는지 확인한 후 사용자가 계속 진행하도록해야합니다. 마지막으로, 위의 코드에서 나는 그 필드에 빨간색 테두리를 부여하기 위해 setBorder()을 사용할 것이라고 생각합니다.

if (userName == null || userName.isEmpty() || passString == null 
      || passString.isEmpty() 
      || !passString.equals(passStringConfirm)) { 
    Border redLine = BorderFactory.createLineBorder(Color.red); 
    enterUsername.setText(""); 
    enterPassword.setText(""); 
    enterConfirmPassword.setText(""); 
    enterUsername.setBorder(redLine); 
    enterPassword.setBorder(redLine); 
    enterConfirmPassword.setBorder(redLine); 
} 

편집

사용자가 제공 한 코드를 기반으로

,하지만 당신은 그것을가 다른 필요한!

if(userName == null || userName.isEmpty() || passString == null 
     || passString.isEmpty() || !passString.equals(passStringConfirm)) { 
    enterUsername.setText(""); 
    enterPassword.setText(""); 
    enterConfirmPassword.setText(""); 
    Border redLine = BorderFactory.createLineBorder(Color.red); 
    enterUsername.setBorder(redLine); 
    enterPassword.setBorder(redLine); 
    enterConfirmPassword.setBorder(redLine); 
    repaint(); 
} else { // <-- add this 
    super.dispose(); 
    int response = 0; 
    String firstDesposit = JOptionPane.showInputDialog(
      "Welcome " + userName + ". Enter your initial deposit."); 
    initialDeposit = Double.parseDouble(firstDesposit); 
    if (response == JOptionPane.OK_OPTION) { 
     new Menu(); 
    } 
} 
+0

어떻게 프레임이 잠기는 것을 방지합니까? – AlecR

+0

while 루프가 멈추는 것을 알아 냈습니다. 창을 잠그지 않고 다시 나타나게하려면 어떻게해야합니까? – AlecR

+0

@AlecR 루프를 사용하여 수행 할 수 없습니다. 로그인 화면을 계속 진행하기 전에 비밀번호를 확인하기 위해 게시하지 않은 UI에 메소드를 구현해야합니다. 당신이 게시 한 것은 버튼 클릭 이벤트를 * 반복 * UI를 잠글 버튼에 대한 콜백 핸들러입니다. –

-1

e.getSource()가 차단 호출이라고 가정합니다.

while(true){ 
if (e.getSource() == okButton) { 
     if(!passString.equals(passStringConfirm) || userName.equals(null) || passString.equals(null) || passStringConfirm.equals(null)){ 
       enterUsername.setText(""); 
       enterPassword.setText(""); 
       enterConfirmPassword.setText(""); 
       } 
      } 
else 
    break; //correct password 

} 
관련 문제