Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JTextField not showing up in JPanel on launch

The JTextField is there because when I move the mouse over where it's supposed to be the mouse icon changes to a cursor, then when I click it shows up. But it's invisible at launch. What am I missing?

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();

    }

}
like image 309
tazboy Avatar asked Nov 05 '12 04:11

tazboy


2 Answers

  • Use Event Dispatch Thread for creating GUI components
  • Do not call setVisible(..) before all components have been added to the JFrame ( this is the above code snippets actual error +1 to @Clark)
  • Do not unnecessarily extend JFrame class
  • Do not call setSize(..), rather simply call JFrame#pack() before setting the JFrame visible
  • Do not call setSize() on JTextField rather look at its constructor: JTextField(String text,int columns)
  • Use appropriate LayoutManagers, see here for some examples: A Visual Guide to Layout Managers

Here is an example I made (basically your code with fixes):

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();
            }
        });
    }
}
like image 156
David Kroukamp Avatar answered Oct 23 '22 12:10

David Kroukamp


You're adding the JTextfield to the JFrame AFTER you've made the JFrame visible. Just add the JTextField before hand.

like image 21
Clark Avatar answered Oct 23 '22 10:10

Clark