2014-05-03 4 views
0

Я пытаюсь сделать «модальный» JDialog (я надеюсь, что так оно и должно быть), я хочу ввести свой пароль и пароль в свой диалог, и если это правильно, тогда откройте мой основной JFrame где я разбираю некоторую информацию. Моя проблема возникает, когда я делаю кнопку входа в систему, я не могу ссылаться на текущий объект (это) с его текстовыми полями и т. Д .; Это код, а вот ошибка:JDialog логин с JFrame

image error

Кроме того, я немного путают, потому что, когда у меня будет успешной регистрации, я должен открыть JFrame не ..... конечно, как действовать, потому что я должен работать только с одним JFrame и переключать свои панели. Заранее спасибо

package test_area; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JPasswordField; 
import javax.swing.JTextField; 




public class jpanel1 extends JFrame{ 

    static boolean loginBool = false; //if this goes true, then I go to my frame 




    // JPANEL--------------------------------------------- 
    public static class panel1 extends JPanel implements ActionListener{ 


     //simple constructor 
    public panel1(){ 

     JPanel a = this; 

     a.setLayout(new GridLayout(5,1,5,5)); 

     JLabel username = new JLabel("Username"); 
     JTextField usernameTxt = new JTextField(8); 
     JLabel password = new JLabel("Password"); 
     JPasswordField passwordTxt = new JPasswordField(55); 
     JButton doIt = new JButton("Log In"); 

     doIt.addActionListener(this); 

     a.add(username); 
     a.add(usernameTxt); 
     a.add(password); 
     a.add(passwordTxt); 
     a.add(doIt); 


     a.setSize(200,200); 
     a.setVisible(true); 


    } 

     //constructor with param 
    // public panel1(JLabel a, JTextField b, JLabel c, JPasswordField d, JButton e){ 

    //} 


    //@Overwritten method 

     @Override 
     public void actionPerformed(ActionEvent ae) { 
      String user; 
      String pw; 

      user = a.usernameTxt.getText(); 
      pw = a.passwordTxt.getText(); 

      // package does not exist 
     } 

} 
    // JPANEL--------------------------------------------- 




    //JFrame 
    public jpanel1(){ 

     JFrame frame = new JFrame("Login Pane"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new panel1()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

    } 


    public static void main(String[] args) 
    { 
     jpanel1 gg = new jpanel1(); //frame; 


    } 

} 

Заявленный статический булево, который должен умереть, как только Войти правильно, то каким-то образом открыть новый JFrame ...

+1

'JPanel a = this;' не имеет смысла, просто используйте 'this' и создайте' usernameTxt' и 'passwordTxt' переменные класса, а не локальные переменные. – DSquare

+0

Большое спасибо за эту коррекцию, отлично работающую. – ExtremeSwat

+0

См. [Пример] (http://stackoverflow.com/a/20286447/2587435) –

ответ

2

Ваш код не имеет даже ссылку JDialog ...

Предполагая, что frame является главным окном вашего приложения типа JFrame и dialog вашего диалога входа типа JDialog. На начальном этапе отобразится модальный диалог входа в систему.

frame.setVisible(true); 
dialog.setModal(true); 
dialog.setVisible(true); 

Когда Войти удается скрыть диалог с

dialog.setVisible(false); 

Вы не должны изменить модальность.

+0

Где я должен ввести эти строки кода? Поскольку, если я ввожу их в конструктор Jframe, я получаю сообщение об ошибке, я не могу ссылаться на мой Jpanel. – ExtremeSwat

+0

Редактировать: setModal (true) не работает. – ExtremeSwat

+0

Посмотрите учебники JAVA http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html – ka3ak

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