Java JFrame不';直到窗口大小最大化后才更新

Java JFrame不';直到窗口大小最大化后才更新,java,swing,user-interface,interface,jframe,Java,Swing,User Interface,Interface,Jframe,我正在使用JFrame为一个使用mySQL连接到数据库的java程序创建一个GUI 我有12个SQL操作,我想为它们创建一个GUI 首先,它将要求输入一个从1到12的数字,然后它将转到12个开关箱 所以当我运行这个,然后输入1,然后确定 除非我最大化或更改窗口大小,否则更新按钮和文本字段不会显示 我看到了其他类似的问题,但我不明白,所以请大家提供一个示例代码 import java.awt.BorderLayout; import java.awt.EventQueue; import java

我正在使用JFrame为一个使用mySQL连接到数据库的java程序创建一个GUI

我有12个SQL操作,我想为它们创建一个GUI

首先,它将要求输入一个从1到12的数字,然后它将转到12个开关箱

所以当我运行这个,然后输入1,然后确定 除非我最大化或更改窗口大小,否则更新按钮和文本字段不会显示

我看到了其他类似的问题,但我不明白,所以请大家提供一个示例代码

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
//import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.sql.DriverManager;
import java.awt.event.ActionEvent;
import java.sql.*;
import java.awt.Color;
//import java.awt.FlowLayout;
import java.util.*;
import javax.swing.JToggleButton;
import javax.swing.JTextArea;
//import java.util.Date;

public class ProjectInterface extends JFrame {
static Scanner read = new Scanner(System.in);
static Connection connect = null;
static Statement statement = null;
static PreparedStatement preparedStatement = null;
static ResultSet resultSet = null;
static String uname;
static String aname;
static String res;
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JTextField ANtextField;
    private JTextField c1textField;
    private JTextField c11textField;
    //private JLabel lblNewLabel;
    //private JLabel lblNewLabel_1;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ProjectInterface frame = new ProjectInterface();
                    frame.setVisible(true);

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

    /**
     * Create the frame.
     */
    public ProjectInterface() {
        setTitle("Database");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 378, 495);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        panel.setBackground(new Color(186, 85, 211));
        panel.setForeground(new Color(0, 0, 0));
        contentPane.add(panel, BorderLayout.CENTER);
        panel.setLayout(null);

        JLabel lblEnter = new JLabel("Enter 1-12");
        lblEnter.setBounds(26, 8, 116, 14);
        panel.add(lblEnter);
        //RestextField.setHorizontalAlignment(SwingConstants.LEFT);
        //label.setHorizontalAlignment(SwingConstants.LEFT);

        ANtextField = new JTextField();
        //panel.add(ANtextField);
        ANtextField.setBounds(152, 5, 86, 20);  
        ANtextField.setColumns(10);
        panel.add(ANtextField);

        JButton btnOk = new JButton("OK");
        btnOk.setBounds(248, 4, 63, 23);
        panel.add(btnOk);


        btnOk.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                /*
                String uname;
                String aname;
                String res;*/

                try {
                    /*
                    Connection connect = null;
                    Statement statement = null;
                    PreparedStatement preparedStatement = null;
                    ResultSet resultSet = null;*/
                Class.forName("com.mysql.jdbc.Driver");
                connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/project?useSSL=false","root","R1234");
                statement = connect.createStatement();

                String s = ANtextField.getText();
                int x = Integer.parseInt(s);
                switch(x) {
                //customer
                case 1:

                //update customer set Password = 999 where Username = 'Raghad';
                //System.out.println(" (PK)");
                JLabel lblc1 = new JLabel("Enter username you wish to update its password:");
                lblc1.setBounds(30, 104, 300, 14);
                panel.add(lblc1);

                c1textField = new JTextField();
                c1textField.setBounds(350, 104, 86, 20);
                c1textField.setColumns(10);
                panel.add(c1textField);

                JLabel lblc11 = new JLabel("Enter new password:");
                lblc11.setBounds(30, 140, 200, 14);
                panel.add(lblc11);

                c11textField = new JTextField();
                c11textField.setBounds(350, 140, 86, 20);
                c11textField.setColumns(10);
                panel.add(c11textField);

                JButton btnUpdate = new JButton("Update");
                btnUpdate.setBounds(200, 200, 86, 20);
                panel.add(btnUpdate);

                btnUpdate.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent arg0) {
                try {
                preparedStatement = connect.prepareStatement("update customer set Password = ? where Username = ?");
                preparedStatement.setString(1, c11textField.getText());
                preparedStatement.setString(2, c1textField.getText());
                preparedStatement.executeUpdate();
                    }catch(Exception e) {System.out.println("Exception in case1");}
                }});

                break;

                case 2:
                //update location
                System.out.println("Enter username you wish to update its location (PK)");
                uname = read.next(); //or nextLine?
                System.out.println("Enter new city");
                String city = read.nextLine();
                System.out.println("Enter new street");
                String st = read.nextLine();
                System.out.println("Enter new ZIP code");
                int zip = read.nextInt();
                preparedStatement = connect.prepareStatement("update customer set City = ? where Username = ?");
                preparedStatement.setString(1, city);
                preparedStatement.setString(2, uname);
                preparedStatement.executeUpdate();
                preparedStatement = connect.prepareStatement("update customer set Street = ? where Username = ?");
                preparedStatement.setString(1, st);
                preparedStatement.setString(2, uname);
                preparedStatement.executeUpdate();
                preparedStatement = connect.prepareStatement("update customer set ZIPcode = ? where Username = ?");
                preparedStatement.setInt(1, zip);
                preparedStatement.setString(2, uname);
                preparedStatement.executeUpdate();
                break;

                case 3: 
                //read or retrieve? customer info
                    JTextArea textArea_1 = new JTextArea();
                    textArea_1.setBounds(10, 78, 326, 357);
                    panel.add(textArea_1);
                resultSet = statement.executeQuery("select * from customer ");
                while(resultSet.next()) {
                    String username = resultSet.getString("Username");
                    String FName = resultSet.getString("FName");
                    String LName = resultSet.getString("LName");
                    int PhoneNo = resultSet.getInt("PhoneNo");
                    String Password = resultSet.getString("Password");
                    String Email = resultSet.getString("Email");
                    String City = resultSet.getString("City");
                    String Street = resultSet.getString("Street");
                    int ZIPcode = resultSet.getInt("ZIPcode");
                    String AName = resultSet.getString("AName");
                    //textArea_1.append("%10s %10s %10s %10s %10s %10s %10s\n","Username","FName","LName","PhoneNo","Password","Email","City","Street","ZIPcode","AName");
                    textArea_1.append("Username: " + username + "\n");
                    textArea_1.append("FName: " + FName + "\n");
                    textArea_1.append("LName: " + LName + "\n");
                    textArea_1.append("PhoneNo: " + PhoneNo + "\n");
                    textArea_1.append("Password: " + Password + "\n");
                    textArea_1.append("Email: " + Email + "\n");
                    textArea_1.append("City: " + City + "\n");
                    textArea_1.append("Street: " + Street + "\n");
                    textArea_1.append("ZIPcode: " + ZIPcode + "\n");
                    textArea_1.append("AName: " + AName + "\n\n");} 
                    break;

                    case 4:
                    //delete
                    System.out.println("Enter the username you wish to delete its info (PK)");
                    String an = read.nextLine();
                    connect.prepareStatement("delete from customer where Username = " + "'" + an + "'").executeUpdate();
                    break;

                    // admin
                    case 5:
                    //update Responsibility
                    System.out.println("Enter admin name (PK");
                    aname = read.nextLine();
                    System.out.println("Enter new Responsibility");
                    res = read.nextLine();
                    preparedStatement = connect.prepareStatement("update admin set Responsibility = ? where AName = ?");
                    preparedStatement.setString(1, res);
                    preparedStatement.setString(2, aname);
                    preparedStatement.executeUpdate();
                    break;

                    case 6:
                    //delete customer from admin
                    System.out.println("Enter the admin name you wish to delete their customer (PK)");
                    aname = read.nextLine();
                    connect.prepareStatement("delete from customer where AName = " + "'" + aname + "'").executeUpdate();
                    break;

                    case 7:
                    //insert an admin
                    //read.next();
                    System.out.println("Enter admin name");
                    aname = read.nextLine();
                    System.out.println("Enter responsibility");
                    res = read.nextLine();
                    preparedStatement = connect.prepareStatement("insert into admin(AName,Responsibility) values(?,?)");
                    preparedStatement.setString(1,aname);
                    preparedStatement.setString(2,res);
                    preparedStatement.executeUpdate();
                    break;

                    case 8:
                    //retrieve first row admin name
                    resultSet = statement.executeQuery("select * from admin ");
                    if(resultSet.next()) {
                    aname = resultSet.getString("AName");
                    System.out.println("Username: " + aname + "  ");}
                    break;

                    case 9:

                    //supplier
                    System.out.println("");

                    case 10:


                }//switch

                //JOptionPane.showMessageDialog(null, "");
                }catch(Exception e) {
                    e.printStackTrace();
                }

            }
        });
    }



}

不要使用空布局。不要使用后退(…)

Swing设计用于布局管理器。将组件动态添加到可见GUI时,基本代码为:

panel.add(....);
panel.revalidate();
panel.repaint();
revalidate()将调用面板上的布局管理器,布局管理器将根据布局管理器的规则为每个组件提供一个大小/位置


按照设计的方式使用Swing。

不要自己设置边界,使用布局管理器。如果您的问题仅发生在1个案例中,请仅向我们展示-发布一个。