我已经在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();
}
}
}
答案 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);
(将所有组件添加到面板后)