2017-01-30 1 views
-2

Mon JTextField ne montre pas, seul le paintComponentPourquoi ne puis-je pas insérer mon JTextField dans mon JPanel?

public static final int WIDTH = 800; 
public static final int HEIGHT = 600; 

private JTextField txt; 

public Painel(){ 
    super(); 
    setFocusable(true); 
    setPreferredSize(new Dimension(WIDTH, HEIGHT)); 
    setLayout(new FlowLayout()); 
    txt = new JTextField(); 
    txt.setBounds(400, 300, 50, 20); 
} 
+4

Tout ce que vous avez fait est de créer un objet 'JTextField', vous ne l'avez jamais ajouté à votre panneau. – CollinD

+4

Et 'setBounds' sera inutile sous le contrôle du gestionnaire de disposition – MadProgrammer

+1

Cette' setLayout (new FlowLayout()); '& this' txt.setBounds (400, 300, 50, 20); 'sont incompatibles. La position d'un champ de texte est contrôlée par la mise en page (+ remplissage de la mise en page et bordures). La taille d'un champ de texte est déterminée en partie par la mise en page, ainsi que par le nombre de colonnes définies et la taille de la police. –

Répondre

0

Vous devez définir le nombre de colonnes dans votre champ de texte ou de donner un texte par défaut à elle. Le code suivant devrait fonctionner pour vous. J'ai mis à jour la réponse précédente pour utiliser la disposition Gridbag. Cependant, vous devez toujours définir le nombre de colonnes dans JTextField pour le rendre.

public class TestFrame extends JFrame { 

    public static void main(String[] args) { 
     new TestFrame(); 
    } 

    private TestFrame() throws HeadlessException { 
     super(); 

     this.setLocationByPlatform(true); 
     JPanel contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     GridBagLayout gbl_contentPane = new GridBagLayout(); 
     gbl_contentPane.columnWidths = new int[] { 100, 0 }; 
     gbl_contentPane.rowHeights = new int[] { 0, 0, 0 }; 
     gbl_contentPane.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; 
     gbl_contentPane.rowWeights = new double[] { 0.0, 0.0, Double.MIN_VALUE }; 
     contentPane.setLayout(gbl_contentPane); 

     JTextField textField = new JTextField(); 
     GridBagConstraints gbc_textField = new GridBagConstraints(); 
     gbc_textField.insets = new Insets(0, 0, 5, 0); 
     gbc_textField.fill = GridBagConstraints.HORIZONTAL; 
     gbc_textField.gridx = 1; 
     gbc_textField.gridy = 0; 
     contentPane.add(textField, gbc_textField); 
     textField.setColumns(10); 

     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.pack(); 
     this.setVisible(true); 
    } 
} 

Espérons que cela aide. Codage heureux!

+0

IL A TRAVAILLÉ !!! Merci beaucoup !!! Comment puis-je vous remercier pour l'aide? Je suis nouveau sur ce site – Dormin

+0

'setPreferredSize (nouvelle dimension (WIDTH, HEIGHT));' c'est simplement une estimation à la taille requise. 'txt.setBounds (400, 300, 50, 20);' la disposition ignorera cela. –

+0

Si ma réponse a donné la solution à votre problème, vous pouvez la marquer comme la réponse en cliquant sur la coche de couleur verte ou alternativement vous pouvez la marquer comme utile en cliquant simplement sur le bouton upvote. De toute façon je suis content que tu l'aies fait. –