Les éléments d'interface graphique ne montre pas jusqu'à ce redimensionnement de la fenêtre
J'ai fait des expériences avec le fait de faire des Interfaces graphiques en java, contrairement à l'aide de "statique" de tous les temps et de trouver l' "SwingUtilities.invokeLater()" la méthode. J'ai réussi à obtenir tout ce que l'installation, mais quand il s'agit de l'exécution de l'application, rien ne s'affiche sur le Composite jusqu'à ce que je redimensionner la fenêtre. Est-il un correctif pour cela ou suis-je tout faux?
Voilà mon code:
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();
}
});
}
}
EDIT: je sais que le mot de passe component swing jtextfield est destiné à être un JPasswordField.. donc l'ignorer 😛
S'il vous plaît, s'il vous plaît ne pas empêcher le redimensionnement d'un conteneur inutilement; veuillez utiliser
setSize()
avec parcimonie; certaines plates-formes ont la taille différente des polices de caractères, certaines langues ont la taille différente des mots. Veuillez utiliser pack()
.OriginalL'auteur Andrei0427 | 2012-09-06
Vous devez vous connecter pour publier un commentaire.
Vous n'avez jamais ajouter votre contenu à la JFrame. L'ensemble minimal de changements dont vous avez besoin:
Et ensuite modifier
initComponents
de prendre unmain
objet:main
n'est pas bon.Est-il possible d'utiliser la même instance de "principal", qui a été déclaré avant de la invokeLater() la méthode à l'intérieur de la initComponents() la méthode? Ou dois-je créer deux instances par la force?
oui. vous pouvez utiliser la même instance.
OriginalL'auteur sjr
Deux conseils de base:
1.) Lorsque vous utilisez swing, de trucs et de ne pas montrer/mise à jour, vous devez appeler
JPanel.revalidate()
etJPanel.repaint()
Ces deux fonctions de mise à jour de votre panneau.Si vous utilisez une JFrame et vous n'avez pas de place supplémentaire des panneaux à elle, alors vous pouvez obtenir le panneau contenu par
JFrame.getContentPane()
2.) Lorsque vous avez terminé d'ajouter des Composants à un panneau et le cadre que vous devez également appeler
pack()
sur le cadre, cela permettra d'assurer que tous les Composants ont la préférence de taille.OriginalL'auteur Balázs Édes
pour intégré
FlowLayout
(pourJPanel
) je vous suggère de ne pas utiliserpack()
pourJFrame
, assurez-vous de manière correcte pourrait être d'utiliser correctement et de mieuxLayoutManager
pour ce travail,GridBagLayout
ouSpringLayout
sortie en utilisant
JFrame#setSize()
et sanspack()
par exemple
OriginalL'auteur mKorbel