2013-12-20 3 views
0

Я пытаюсь создать экран входа JFrame в Java. Я искал в Интернете и только нашел вещи на Netbeans, которые я не хочу использовать, потому что я хотел бы сделать это полностью в коде.Экран входа в JFrame

Необходимо, чтобы вы не могли видеть имена пользователей и пароли, просто просматривая код.

Я создал JFrame:

JFrame launcher = new JFrame("Login"); 

и некоторые виджеты:

JTextField User = new JTextField("Username"); 
JPasswordField Pass = new JPasswordField("Password"); 
JButton Login = new JButton("Login"); 

Но каждый раз, когда я делаю:

launcher.add(User) 
launcher.add(Pass) 
launcher.add(Login) 

Кнопка Логин будет coveer все окно.

Так вот псевдо-код, что я пытаюсь сделать:

Login = create new button 
Pass = create new Password Field 
User = create new Text Field 
Check = 0 

add User at top of window 
add Pass at middle of window 
add Login at bottom of window 

if Pass input == any password from list then { 
    Check = Check + 1 
} 

if User input == any username from list then { 
    Check = Check + 1 
} 

if Check == 2 { 
    Change to new class 
}else{ 
    Show on screen "INVALID" then restart 
} 
+1

Может быть [_this answer_] (http://stackoverflow.com/a/20286447/2587435) может дать вам некоторые идеи. Он использует JDialog для входа в программу JFrame –

ответ

1

У вас нет менеджера макетов, поэтому по умолчанию JFrame BorderLayout добавляет все в центр, а это означает, что при добавлении пароля он распространяется на пользователя, а затем, когда вы добавляете кнопку входа в систему, он покрывает проход, поэтому похоже, что у вас есть только кнопка входа в систему. Для того, чтобы получить то, что вы хотите:

add User at top of window 
add Pass at middle of window 
add Login at bottom of window 

Пример кода может быть:

launcher.setLayout(new BorderLayout()); 
launcher.add(user, BorderLayout.NORTH); 
launcher.add(pass, BorderLayout.CENTER); 
launcher.add(login, BorderLayout.SOUTH); 

Если вы хотите сделать это проверить логин при нажатии на кнопку добавьте ActionListener для входа.

login.addActionListener(new ActionListener(){ 

    public void actionPerformed(ActionEvent e){ 
     //Check login stuff here... 

     //with maybe something like this? 
     String sLogin = login.getText(); 
     String sPass = pass.getText(); 
     //Then compare with some other string/data you already have saved somewhere... 

    } 
}); 

Однако, если вы хотите более точное расположение, вы можете попробовать поиск до GridBagLayout

Если вы хотите узнать больше о макетах вообще идти здесь: LayoutManagers

+0

-1, этот ответ уже был задан на час раньше.Не нужно загромождать форум дублирующимися ответами. – camickr

2

Кнопка Логин будет coveer все окно.

Это потому, что диспетчер компоновки по умолчанию для JFrame является BorderLayout, и вы добавляете все компоненты в «CENTER» (по умолчанию), и отображается только последний добавленный компонент.

Поэтому вам нужно выбрать более подходящий менеджер макетов.

Для получения дополнительной информации и примеров ознакомьтесь с разделом из учебника Swing от Layout Managers.

0

Вы можете использовать GridBagLayout в Netbeans. этот макет является стабильным способом для сложной формы и панели.

tutorial for Netbeans

+0

Netbeans обманывает. Я хочу сделать это в затмении. – genfy

0
Try this code for login screen 



class Login extends JFrame implements ActionListener{ 
    Connection con=null; 
    Statement st=null; 
    ResultSet rs=null; 
    JLabel l1,l2; 
    JButton b1,b2; 
    JTextField t1; 
    JPasswordField pf; 
    Login(){  
     Toolkit tk=Toolkit.getDefaultToolkit(); 
    Image img=tk.getImage("C:/Image.jpg"); 
    setIconImage(img); 
     Icon icon1=new ImageIcon("C:/Image.jpg"); 
     JLabel i=new JLabel(icon1); 
    JPanel p; 
    p=(JPanel)getContentPane(); 
    p.add(i); 
     this.getContentPane().setBackground(new Color(243,67,226)); 
     setVisible(true); 
     setLocation(225,50); 
     //setLocationRelativeTo(null); 
     setSize(900,600); 
     setTitle("Login"); 
     setResizable(false); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new FlowLayout()); 
     l1=new JLabel("UserName"); 
     l2=new JLabel("Password"); 
     t1=new JTextField(10); 
     AbstractAction action = new AbstractAction() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      if(e.getSource() instanceof JButton){ 
      JButton button = (JButton) e.getSource(); 
      button.doClick();   
      } else if(e.getSource() instanceof JComponent){ 
       JComponent component = (JComponent) e.getSource(); 
       component.transferFocus(); 
      } 
     } 
     }; 

     t1.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "TransferFocus"); 
     t1.getActionMap().put("TransferFocus", action); 

     pf=new JPasswordField(10); 
     pf.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "TransferFocus"); 
     pf.getActionMap().put("TransferFocus", action); 
     ImageIcon ic=new ImageIcon("C:/key.gif"); 
     b1=new JButton("Login",ic); 
     b1.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "TransferFocus"); 
     b1.getActionMap().put("TransferFocus", action); 
     ImageIcon ic1=new ImageIcon("C:/cancel.jpg"); 
     b2=new JButton("Exit",ic1);   
     b2.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "TransferFocus"); 
     b2.getActionMap().put("TransferFocus", action); 
     b1.addActionListener(this); 
     b2.addActionListener(this); 
     JPanel p1=new JPanel(); 
     JPanel p2=new JPanel();  
     JPanel p3=new JPanel(); 
     JPanel p4=new JPanel(); 
     p1.setBackground(new Color(243,67,226)); 
     p2.setBackground(new Color(243,67,226)); 
     p3.setBackground(new Color(243,67,226)); 
     p4.setBackground(new Color(243,67,226)); 
     p1.add(l1); 
     p1.add(t1); 
     p2.add(l2); 
     p2.add(pf); 
     p3.add(b1); 
     p3.add(b2); 
     p4.setLayout(new GridLayout(3,1)); 
     p4.add(p1);  
     p4.add(p2); 
     p4.add(p3); 
     add(p4); 
     t1.requestFocus(); 
     //b1.requestFocus(); 
     //b1.requestFocusInWindow(); 
     validate(); 

    } //eof cons. 
    public void actionPerformed(ActionEvent ae){ 
     if(ae.getSource()==b1){ 
      try { 
       try{ 
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
        String url=null,url1=null,userID=null,password=null; 
        String dbFileName=null; 
        String dbFileName1=null; 
        String sql=null; 

        dbFileName = "C:/db.accdb"; 

        url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};"+ 
          "DBQ="+dbFileName+";"; 
        con=DriverManager.getConnection(url);//,"system","manager" 
        st=con.createStatement(); 
       }catch(Exception e){ 
        System.out.println(e); 
        dispose(); 
       } 
       if(t1.getText().trim().length()==0){ 
        JOptionPane.showMessageDialog(this,"Enter User Name"); 
        return; 
       } 
       if(pf.getText().trim().length()==0){ 
        JOptionPane.showMessageDialog(this,"Enter Password"); 
        return; 
       } 



       ResultSet rs=st.executeQuery("select password from LOGIN1 where uname='"+t1.getText().trim()+"'"); 

       if(rs.next()){ 
        if(rs.getString(1).equals(pf.getText())){ 
         String smess="WEL-COME "; 
         String ss="Congratulations......"; 
         int res=JOptionPane.INFORMATION_MESSAGE; 
         JOptionPane.showMessageDialog((Component) null,smess,ss,res); 
         JFrame frm=new JFrame("Title"); 
         className b=new className(frm); 
         frm.setSize(800,500); 
         frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         frm.setResizable(false); 
         frm.setLocationRelativeTo(null); 
         dispose(); 
         frm.show(); 
        }else{ 
         JOptionPane.showMessageDialog(this,"Invalid Password"); 
        } 

       }else{ 
        JOptionPane.showMessageDialog(this,"Invalid User name"); 
       } 

      } catch (SQLException ex) { 
       Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      }if(ae.getSource()==b2){ 
       dispose(); 
      } 
    } 
    public static void main(String args[]){ 
     new Login(); 
    } 

} 
+0

Либо вы используете netbeans, либо очень запутанный программист – genfy

+0

Я создал этот кадр Login только в Netbeans. И ваше второе мнение обо мне, так что мое имя подсказывает это. Спасибо! – Aarav

Смежные вопросы