6

私は常に「静的」を使用するのではなく、Java で GUI を作成する実験を行っており、「SwingUtilities.invokeLater()」メソッドに出くわしました。私はすべてをセットアップすることができましたが、アプリケーションの実行に関しては、ウィンドウのサイズを変更するまで JPanel に何も表示されません。これに対する修正はありますか、それとも間違っていますか?

私のコードは次のとおりです。

public class main extends JPanel implements ActionListener{ 
public JLabel userLabel;
public JLabel passLabel;
public JTextField userField;
public JTextField passField;
public JButton login;
public JButton closeLogin;
public JButton help;

public main(){
    userLabel = new JLabel("Username: ");
    passLabel = new JLabel("Password: ");
    userField = new JTextField(16);
    passField = new JTextField(16);

    login = new JButton("Login");
    login.setActionCommand("login");
    login.setMnemonic(KeyEvent.VK_L);
    closeLogin = new JButton("Close");
    closeLogin.setActionCommand("closeLogin");
    closeLogin.setMnemonic(KeyEvent.VK_E);
    help = new JButton("Help");
    help.setActionCommand("helpLogin");
    help.setMnemonic(KeyEvent.VK_H);

    login.addActionListener(this);
    closeLogin.addActionListener(this);
    help.addActionListener(this);

    add(userLabel);
    add(userField);
    add(passLabel);
    add(passField);
    add(login);
    add(help);
    add(closeLogin);

}
public void actionPerformed(ActionEvent e){ 
}
public static void initComponents(){
    JFrame loginFrame = new JFrame("Encrypted Chat - Login");
    loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    main loginPanel = new main();
    loginPanel.setLayout(new FlowLayout());
    loginFrame.setSize(300, 125);
    loginFrame.setResizable(false);
    loginFrame.setVisible(true);        
}
public static void main(String args[]){
    SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            initComponents();
        }
    });
}

}

編集:パスワード JTextField が JPasswordField であることを知っているので、無視してください:P

4

3 に答える 3

8

2つの基本的なアドバイス:

1.) swingを使用していて、ものが表示/更新されない場合は、を呼び出す必要がJPanel.revalidate()ありJPanel.repaint()ます。これら2つの関数は、パネルを更新します。JFrameを使用していて、それにパネルを追加しなかった場合は、次の方法でコンテンツパネルを取得できます。JFrame.getContentPane()

2.)パネル/フレームへのコンポーネントの追加が終了したらpack()、フレームも呼び出す必要があります。これにより、すべてのコンポーネントが適切なサイズになるようになります。

于 2012-09-06T07:44:03.783 に答える