2016-11-29 4 views
0

ここで何をすべきかについては分かりません。私はinput1とinput2を2つの別々のフィールドにする必要があります。任意のアイデアをいただければ幸いです。それはinput1/input2である必要はありませんが、それがそのように保たれていれば素晴らしいでしょう。出力作業で私のユーザー/ pwd検証を行う方法

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.PrintStream; 
import java.util.Scanner; 
import javax.swing.*; 
import static jdk.nashorn.tools.ShellFunctions.input; 

public class JOptionPaneMultiInput { 

public static void main(String[] args) throws FileNotFoundException { 

    Scanner keyboard = new Scanner(System.in); 
    String input1; 
    String input2; 

    JTextField UsernameField = new JTextField(10); 
    JTextField PwdField = new JTextField(10); 

    JPanel myPanel = new JPanel(); 
    myPanel.add(new JLabel("Username: ")); 
    myPanel.add(UsernameField); 
    myPanel.add(Box.createVerticalStrut(20)); // a spacer 
    myPanel.add(new JLabel("Password: ")); 
    myPanel.add(PwdField); 

    input1 = (UsernameField); //<<<--- Error. 
    input2 = (PwdField);  //<<<--- Error. 

    if (usernamefield(input1)) { 

     System.out.println("Username verified."); 

    } else if (pwdfield(input2)) { 

     System.out.println("Password verified."); 

    } else { 
     System.out.println("Error: Wrong username/password."); 
    } 
} 

private static boolean usernamefield(String user1) { 

    return ((user1.length() == 6) 
      && (user1.matches("user")) 
      && (user1.matches("user")) 
      && (user1.matches("user"))); 
} 

private static boolean pwdfield(String password1) { 

    return ((password1.length() == 6) 
      && (password1.matches("pwd")) 
      && (password1.matches("pwd")) 
      && (password1.matches("pwd"))); 
} 
} 
+0

あなたのコードと間違って多くのものがあります。規則は変数名は小文字(すなわち 'PwdField'の代わりに開始すべきであると言うが、 'PwdField')。テキストフィールドの* content *を取得するには 'pwdField.getText()'を使います。あなたのコードはそのままコンパイルされません。同じ定数の各フィールドを3回テストする理由は何ですか? – Matthieu

+0

if/elseプロパティを使用するという考え方は、後でマージしてバックエンド検証を形成するinput1(user1)とinput2(password1)の2つの別々のファイルを出力することによって軽量暗号化の形式を開始することでした。 – NumaNuma

+0

私は言及を忘れた。私はJavaが初めてです。 – NumaNuma

答えて

1

Read the fine manual

input1 = UsernameField.getText(); 
input2 = PwdField.getText(); 

また、あなたのJPanelが順番に表示設定する必要がありJFrameに追加する必要があります。

JFrame frm = new JFrame(); 
frm.getContentPane().add(myPanel); 
frm.pack(); 
frm.setVisible(true); 

次にあなたもにJButtonを追加する必要がありますログインアクションをmain()に入れずにトリガします。

Java tutorial on Swingを読むことを強くお勧めします。

編集:ここでは、将来の参照のために使用することができますMCVEです:

public class Test extends JFrame { 
    private static final long serialVersionUID = 1L; 

    private JTextField tfUsername; 
    private JPasswordField tfPwd; 

    public Test() { 
     super(); 
     JPanel myPanel = new JPanel(); 
     getContentPane().add(myPanel); 
     myPanel.add(new JLabel("Username: ")); 
     tfUsername = new JTextField(10); 
     myPanel.add(tfUsername); 
     myPanel.add(Box.createHorizontalStrut(20)); // a horizontal spacer 
     myPanel.add(new JLabel("Password: ")); 
     tfPwd = new JPasswordField(10); 
     myPanel.add(tfPwd); 
     JButton btnLogin = new JButton("Login"); 
     myPanel.add(btnLogin); 
     btnLogin.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent evt) { 
       String user = tfUsername.getText(); 
       if (usernamefield(user)) { 
        String pwd = tfPwd.getText(); // Deprecated (use "getPassword()" for better security, see https://stackoverflow.com/q/8881291/1098603) 
        if (pwdfield(pwd)) 
         JOptionPane.showMessageDialog(Test.this, "Password verified."); 
        else 
         JOptionPane.showMessageDialog(Test.this, "Error: Wrong username/password.", "Login error", JOptionPane.ERROR_MESSAGE); 
       } else 
        JOptionPane.showMessageDialog(Test.this, "Error: Unknown username.", "Login error", JOptionPane.WARNING_MESSAGE); 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     // You can do that outside of EDT (see https://stackoverflow.com/q/491323/1098603) 
     Test frm = new Test(); 
     frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Outside of Test class so close operation is defined by the user and not the class 
     frm.pack(); 
     frm.setVisible(true); 
    } 

    private static boolean usernamefield(String user) { 
     return "user".equals(user); 
    } 

    private static boolean pwdfield(String password) { // TODO: Change String to char[] to improve security 
     return "pwd".equals(password); 
    } 
} 
+0

ええと、このコードをイベントハンドラに入れてはいけませんか? –

+0

@ScaryWombatもちろんです。 JPanelはJFrameに埋め込まれて画面に表示されるべきです。 – Matthieu

+0

まあ、私はそれの周りに多くの構造を構築していないので、今は基本的な出力を得るようにしようとしているからです。 – NumaNuma

関連する問題