2012-12-04 4 views
0

J'essaie d'apprendre Swing par moi-même. Je joue avec un programme jouet qui demande à l'utilisateur d'entrer son nom. J'ai mis un JLabel et JTextfield dans un JPanel où l'utilisateur peut entrer leur nom et soumettre. Cependant mon JTextfield est écrasé et invisible et je n'arrive pas à le montrer (j'ai essayé "setSize" en vain).Simple programme JFrame mais ne peut pas voir JTextfield

Invisible JTextField

Ceci est mon code:

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 


public class NamePrompt extends JFrame{ 


    private static final long serialVersionUID = 1L; 

    String name; 

    public NamePrompt(){ 

     setLayout(new BorderLayout()); 

     JLabel enterYourName = new JLabel("Enter Your Name Here:"); 
     JTextField textBoxToEnterName = new JTextField(); 
     textBoxToEnterName.setSize(40, 10); 
     JPanel panelTop = new JPanel(); 
     panelTop.add(enterYourName); 
     panelTop.add(textBoxToEnterName); 

     JButton submit = new JButton("Submit"); 
     submit.addActionListener(new SubmitButton()); 
     JPanel panelBottom = new JPanel(); 
     panelBottom.add(submit); 

     //Add panelTop to JFrame 
     add(panelTop, BorderLayout.NORTH); 
     add(panelBottom, BorderLayout.SOUTH); 

     //JFrame set-up 
     setTitle("Name Prompt Program"); 
     setSize(300, 150); 
     setLocationRelativeTo(null); 


    } 



    public static void main(String[] args) { 
     NamePrompt promptForName = new NamePrompt(); 
     promptForName.setVisible(true); 


    } 
+0

'textBoxToEnterName.setSize (40, 10);' voir [ce fil] (http://stackoverflow.com/questions/7229226/should-i-avoid-the-use- of-setpreferredmaximumminimumsize-methods-in-java-swi). –

+0

Ne fonctionne pas du tout ... – CodyBugstein

Répondre

2
JTextField textBoxToEnterName = new JTextField(20); 

Voir new JTextField(columns) pour explication. PAR EXEMPLE.

NamePrompt

import java.awt.BorderLayout; 
import javax.swing.*; 

public class NamePrompt extends JFrame{ 

    private static final long serialVersionUID = 1L; 

    String name; 

    public NamePrompt(){ 

     setLayout(new BorderLayout()); 

     JLabel enterYourName = new JLabel("Enter Your Name Here:"); 
     JTextField textBoxToEnterName = new JTextField(21); 
     //textBoxToEnterName.setSize(40, 10); 
     JPanel panelTop = new JPanel(); 
     panelTop.add(enterYourName); 
     panelTop.add(textBoxToEnterName); 

     JButton submit = new JButton("Submit"); 
     //submit.addActionListener(new SubmitButton()); 
     JPanel panelBottom = new JPanel(); 
     panelBottom.add(submit); 

     //Add panelTop to JFrame 
     add(panelTop, BorderLayout.NORTH); 
     add(panelBottom, BorderLayout.SOUTH); 

     //JFrame set-up 
     setTitle("Name Prompt Program"); 
     //setSize(300, 150); 
     pack(); 
     setLocationRelativeTo(null); 
    } 

    public static void main(String[] args) { 
     NamePrompt promptForName = new NamePrompt(); 
     promptForName.setVisible(true); 
    } 
} 
+0

Maintenant, je reçois une ligne plus longue mais vraiment mince (je peux voir un petit peu du haut du texte que je suis en train de taper) – CodyBugstein

+1

N'appelez pas 'setSize()' (n'importe où dans le code)! Voir la mise à jour. –

+0

Ça marche! Pouvez-vous expliquer pourquoi ne pas appeler setSize()? Et aussi, comment puis-je déplacer la zone de texte à positionner sous le texte? – CodyBugstein

Questions connexes