程序显示一个空窗口

时间:2013-05-03 14:58:48

标签: java swing window

我已经在JAVA和SOMETIMES中启动了一个程序,当我运行它或调试它时,它会显示一个空的白色窗口。我不明白为什么,但我重新调整它,它正确显示窗口。顺便说一下,它与最后的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();
    }
}

}

3 个答案:

答案 0 :(得分:2)

frame.setVisible(true);

将所有组件添加到JFrame后,将其作为最后一个语句。


此外,在GUI线程(EDT)中执行任何与swing相关的代码通常是最佳做法:

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

答案 1 :(得分:2)

应在Event Dispatch Thread上启动Swing GUI。有关详细信息,请参阅Initial Threads

答案 2 :(得分:1)

在方法结束时调用frame.setVisible(true);(将所有组件添加到面板后)