2013-05-03 3 views
0

Я начал программу в JAVA и SOMETIMES, когда я запустил ее или отлаживал, она показывает пустое белое окно. Я понятия не имею, почему, но я переопределяю его, и он правильно показывает окно. Btw, это не имеет ничего общего с mysql connect void в конце.Программа показывает пустое окно

Вот код:

package com.hinx.client; 

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
import java.sql.*; 


public class Main { 

public static void main(String [] args) 
{ 
    createWindow(); 
} 


static void createWindow() 
{ 


    //Create panel 
    JPanel content = new JPanel(); 
    content.setLayout(null); 
    //Build the frame 
    JFrame frame = new JFrame("Hinx - A marketplace for apps - Client ALPHA_0.0.1"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(700, 233); 
    frame.setResizable(false); 
    frame.setLocationRelativeTo(null); 
    frame.add(content); 
    frame.setVisible(true); 

    //Create username label 
    JLabel username = new JLabel("Username:"); 
    username.setFont(new Font("Arial", Font.BOLD, 15)); 
    username.setForeground(Color.white); 
    username.setBounds(34, 8, 100, 50); 

    //Create password label 
    JLabel password = new JLabel("Password:"); 
    password.setFont(new Font("Arial", Font.BOLD, 15)); 
    password.setForeground(Color.white); 
    password.setBounds(36, 85, 100, 50); 

    //Create username field 
    JTextField usernamet = new JTextField(20); 
    usernamet.setBounds(12, 50, 125, 30); 
    usernamet.setBorder(javax.swing.BorderFactory.createEmptyBorder()); 

    //Create password field 
    JTextField passwordt = new JTextField(20); 
    passwordt.setBounds(12, 125, 125, 30); 
    passwordt.setBorder(javax.swing.BorderFactory.createEmptyBorder()); 

    //Add the login button 
    JButton login = new JButton("Login"); 
    login.setBounds(0, 175, 150, 30); 
    login.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e) { 

     } 
    }); 

    //Create login panel 
    JPanel loginpanel = new JPanel(); 
    loginpanel.setLayout(null); 
    loginpanel.setBounds(0, 0, 150, 400); 
    loginpanel.setBackground(Color.gray); 

    //Add the items to the loginpanel 
    loginpanel.add(username); 
    loginpanel.add(password); 
    loginpanel.add(usernamet); 
    loginpanel.add(passwordt); 
    loginpanel.add(login); 

    //Add the items to the content panel 
    content.add(loginpanel); 
} 

protected void connect() 
{ 
    String driver = "com.mysql.jdbc.Driver"; 
    String dbadress = ""; 
    String dbname = ""; 
    String username = ""; 
    String password = ""; 
    try 
    { 
     Class.forName(driver).newInstance(); 
     Connection conn = DriverManager.getConnection(dbadress+dbname, username,password); 
     Statement st = conn.createStatement(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

} 
+2

'content.setLayout (NULL);' Разве мы не решить, что в вашей ** последний ** вопрос? –

+2

Usin null-Layout действительно борется с системой. Это приводит к ужасному коду, очень трудно поддерживать, невозможным ошибкам и т. Д. ... Используйте их надлежащим образом, и они облегчат ваш день. –

+1

Я только что понял, что размер рамки слишком мал, чтобы отображать компоненты, где вы их разместили. Больше топлива для «использования макетов и' pack() аргумент «GUI». –

ответ

2
frame.setVisible(true); 

сделать это последнее утверждение, после добавления всех компонентов к JFrame.


Кроме того, это вообще лучшая практика, чтобы делать какую-либо свинг-коду, связанными в GUI-потоке (EDT):

public static void main(String[] args) 
{ 
    SwingUtilities.invokeLater(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      createWindow(); 
     } 
    }); 
} 
+0

Я вижу фрейм, но иногда я не вижу содержание в нем. Я просто вижу все белое. –

+0

Я добавил набор, видимый в конце. Похоже, он работает. Спасибо! –

2

распашных ГПИ должны быть запущены на событие диспетчерской темы. См. Initial Threads для получения более подробной информации.

1

Invoke frame.setVisible(true); в конце вашего метода (после добавления всех компонентов в панели)

+0

oops ... пока я печатаю Eng.Fouad ответил на вопрос;) –

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