5 votes

JTextField ne s'affiche pas dans le JPanel au lancement

El JTextField est là parce que lorsque je déplace la souris sur l'endroit où il est censé être, l'icône de la souris se transforme en curseur, puis lorsque je clique, il s'affiche. Mais il est invisible au lancement. Qu'est-ce qui me manque ?

public class JavaSwingTextfield extends JFrame {
    private static final long serialVersionUID = 1L;

    JTextField myTextField;

    public JavaSwingTextfield(){

        /***** JFrame setup *****/

        // Set the size of the window
        setSize(600,600);

        // Make the application close when the X is clicked on the window
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        // Makes the JFrame visible to the user
        setVisible(true);

        /***** JFrame setup END *****/

        /***** JButton setup *****/

        // Create a JLabel and set its label to "Start"
        myTextField = new JTextField("Start");

        // Set the label's size
        myTextField.setSize(100, 50);

        // Put the label in a certain spot
        myTextField.setLocation(200, 50);

        // Set a font type for the label
        //Font myFont = new Font("Serif", Font.BOLD, 24);
        //myTextField.setFont(myFont);

        // Add the label to the JFrame
        add(myTextField);

        /***** JButton setup END *****/

    }

    /***** The main method *****/
    public static void main(String[] args){ 

        new JavaSwingTextfield();

    }

}

12voto

David Kroukamp Points 23503
  • Utilisez Event Dispatch Thread pour la création de composants GUI
  • Ne pas appeler setVisible(..) avant que tous les composants aient été ajoutés à la JFrame ( c'est l'erreur réelle des extraits de code ci-dessus +1 à @Clark)
  • Ne pas prolonger inutilement JFrame classe
  • Ne pas appeler setSize(..) plutôt que d'appeler simplement JFrame#pack() avant de régler le JFrame visible
  • Ne pas appeler setSize() en JTextField plutôt regarder son constructeur : JTextField(String text,int columns)
  • Utilisez des LayoutManager voir ici pour quelques exemples : Un guide visuel pour les responsables de la mise en page

Voici un exemple que j'ai réalisé (en gros, votre code avec des corrections) :

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class JavaSwingTextfield {

    private JTextField myTextField;

    public JavaSwingTextfield() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        myTextField = new JTextField("Start");
        
        // Add the label to the JFrame
        frame.add(myTextField);
        
        //pack frame to component preferred sizes
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Create UI on EDT
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JavaSwingTextfield();
            }
        });
    }
}

4voto

Clark Points 1339

Vous ajoutez le JTextfield à la JFrame APRÈS vous avez fait le JFrame visible . Il suffit d'ajouter le JTextField à l'avance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X