2013-09-09 3 views
0

Это работало хорошо раньше, но я немного отложил проект, и когда я решил снова его забрать, панели не отображаются в кадре. Я пробовал много разных возможных решений и провел дни, пытаясь исправить это, ничего не работая. Кто-нибудь видит, что может привести к тому, что кадр будет отображаться пустым?панели не отображаются в кадре

// imports 
import java.sql.DriverManager; 
import java.sql.Connection; 
import java.sql.SQLException; 
import java.util.Scanner; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 



public class login extends JFrame { 

    // create variables 
    JFrame login = new JFrame(); 
    private JTextField userTF; 
    private JPasswordField passwordField; 
    private JLabel userL; 
    private JLabel passL; 
    private JLabel updateOne; 
    private JLabel updateTwo; 
    private JLabel error; 
    private JLabel welcome; 
    private JButton submit; 
    String password = ""; 
    String username = ""; 
    JPanel panel1 = new JPanel(new GridBagLayout()); 
    JPanel panel2 = new JPanel(new GridBagLayout()); 
    JPanel panel3 = new JPanel(new GridBagLayout()); 

    GridBagConstraints c = new GridBagConstraints(); 

// constructor 
public login(){ 
    // set and add all GUI components 
    welcome = new JLabel("PLA LOGIN"); 
    c.gridx = 0; 
    c.gridy = 0; 
    panel1.add(welcome, c); 

    userL = new JLabel("Username: "); 
    c.gridx = 0; 
    c.gridy = 1; 
    c.anchor = GridBagConstraints.WEST; 
    panel2.add(userL, c); 

    userTF = new JTextField(15); 
    userTF.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.gray)); 
    userTF.setOpaque(false); 
    c.gridx = 0; 
    c.gridy = 2; 
    panel2.add(userTF, c); 

    passL = new JLabel("Password: "); 
    c.gridx = 0; 
    c.gridy = 3; 
    panel2.add(passL, c); 

    passwordField = new JPasswordField(15); 
    passwordField.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.gray)); 
    passwordField.setOpaque(false); 
    c.gridx = 0; 
    c.gridy = 4; 
    panel2.add(passwordField, c); 

    submit = new JButton("Sign In"); 
    c.gridx = 0; 
    c.gridy = 5; 
    c.insets = new Insets(10, 0, 0, 0); // add top padding 
    c.ipadx = 93; 
    panel2.add(submit, c); 

    updateOne = new JLabel("MySQL JDBC Driver Registered!"); 
    c.gridx = 0; 
    c.gridy = 4; 
    panel3.add(updateOne,c); 
    updateOne.setVisible(false); 

    updateTwo = new JLabel("You are now connected to your database."); 
    c.gridx = 1; 
    c.gridy = 4; 
    panel3.add(updateTwo); 
    updateTwo.setVisible(false); 

    login.add(panel1); 
    login.add(panel2); 
    login.add(panel3); 

// call text handler constructor to complete correct actions depending on user action 
    TextHandler handler = new TextHandler(); 
    userTF.addActionListener(handler); 
    passwordField.addActionListener(handler); 
    submit.addActionListener(handler); 
} 

// inner class TextHandler 
private class TextHandler implements ActionListener{ 

    public void actionPerformed(ActionEvent e){ 
    // check if user hit to submit with userTF, passwordField, or submit button 
    if(e.getSource() == userTF){ 
       username = e.getActionCommand(); 
    } else if(e.getSource() == passwordField){ 
     password = e.getActionCommand(); 
    } else if(e.getSource() == submit){ 
     // try to access mysql driver 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException s) { 
      error = new JLabel("Where is your MySQL JDBC Driver?"); // if driver not found output label 
     s.printStackTrace(); 
     c.gridx = 0; 
     c.gridy = 3; 
     add(error, c); 
     return; 
     } // end try 

    updateOne.setVisible(true); // make label visible 
    Connection connection = null; 

    // try to login to mysql database 
    try { 
     connection = DriverManager 
     .getConnection("jdbc:mysql://localhost/PLA", username, password); // fetch username and password 

    } catch (SQLException s) { 
     error = new JLabel("Connection Failed! Check output console"); // error if login failed 
     s.printStackTrace(); 
c.gridx = 0; 
       c.gridy = 3; 
       add(error, c); 
       return; 
      } // end try 

      // if login was successful output label 
      if (connection != null) { 
       updateTwo.setVisible(true); 

      } else { 
       error = new JLabel("Failed to make connection!"); // if login failed, output label 
       c.gridx = 0; 
       c.gridy = 3; 
       add(error, c); 
      } // end if 
     } // end submit else if 
    } // end action performed 
} // end private class text handler } // end class login 

ответ

2

Я не уверен, если это вы намерения, но это странно для меня ...

Во-первых, вы объявляете класс, который простирается от JFrame ...

public class login extends JFrame { 

Затем вы объявляете переменную экземпляра того же класса ...

JFrame login = new JFrame(); 

Вы, чем добавить все свои компоненты к этому Экземпляр ...

login.add(panel1); 
login.add(panel2); 
login.add(panel3); 

Теперь, я не могу видеть, как вы используете, но я полагаю, вы делаете что-то вроде ...

login login = new login() 
login.setVisible(true); 

Что в принципе, ничего не показывают ...

Вместо этого. Вместо того, чтобы простираться от JFrame, я бы простирался от JPanel и отбрасывал переменную экземпляра login.

Создать экземпляр login, а затем добавить его к JFrame, например, что вы создали ...

Я также рекомендую вам взглянуть на Code Conventions for the Java Programming Language

+0

Спасибо! это сработало. Я не знаю, что я сделал, потому что он отлично работал до расширения JFrame, но потом остановился. Также благодарим вас за ссылку на условные обозначения кода, я прочитал ее раньше, но думаю, я должен снова взглянуть на нее. – user2713086

+0

Вы меня (именования);) – MadProgrammer

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