JTextField only shows as a slit Using GridBagLayout, need help

17,092

Solution 1

Try calling pack() on your JFrame after adding everything and before setVisible(true)

Also, you'll not want to forget to set the GridBagConstraints weightx and weighty fields. At least give them a non-0 value such as 1.0 for most fields and 0 for fields whose size you don't want changed if the GUI changes size.

Solution 2

Adding those works for me:

    c.weightx=1.;
    c.fill=GridBagConstraints.HORIZONTAL;

Solution 3

There is also a bug in Swing that could result in a JTextArea showing up as a slit, although Sun/Oracle says "its not a bug, its a feature":

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4247013

One potential solution that someone suggested on that thread is to set the minimum size of the JTextField... something like this:

textField.setMinimumSize(textField.getPreferredSize());

Solution 4

I'm guessing from the name lab6 that you may not have used GridBagLayout before. It is one of the most difficult and feared of the Swing Layout tools. If you haven't used it I'd suggest working through tutorials such as: http://download.oracle.com/javase/tutorial/uiswing/layout/gridbag.html and building up to your example

Share:
17,092

Related videos on Youtube

Bill.Caffery
Author by

Bill.Caffery

college student looking for some help and or guidance into the industry... like the idea of building android apps and or some intros into gaming.

Updated on November 12, 2020

Comments

  • Bill.Caffery
    Bill.Caffery over 3 years

    Hi thank you in advance for any help, I'm trying to build a simple program to learn GUI's but when I run the code below my JTextFields all show as a slit thats not large enough for even one character.

    cant post an image but it would look similar to: Label [|

    where [| is what the text field actually looks like

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    
    import javax.swing.*;
    
    
    
    public class lab6start implements ActionListener
    {
        JTextField custNameTxt;
        JTextField acctNumTxt;
        JTextField dateCreatedTxt;
        JButton checkingBtn;
        JButton savingsBtn;
        JTextField witAmountTxt;
        JButton withDrawBtn;
        JTextField depAmountTxt;
        JButton depositBtn;
    
        lab6start()
        {
            JFrame bankTeller = new JFrame("Welcome to Suchnsuch Bank");
            bankTeller.setSize(500, 280);
            bankTeller.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            bankTeller.setResizable(false);
            bankTeller.setLayout(new GridBagLayout());
    
            bankTeller.setBackground(Color.gray);
    
            //bankTeller.getContentPane().add(everything, BorderLayout.CENTER);
    
            GridBagConstraints c = new GridBagConstraints();
    
            JPanel acctInfo = new JPanel(new GridBagLayout());
            c.gridx = 0;
            c.gridy = 0;
            c.gridwidth = 2;
            c.gridheight = 1;
            c.insets = new Insets(5,5,5,5);
            bankTeller.add(acctInfo, c);
            c.gridwidth = 1;
    
            //labels
            //name acct# balance interestRate dateCreated
            JLabel custNameLbl = new JLabel("Name");
            c.gridx = 0;
            c.gridy = 0;
            c.insets = new Insets(0,0,0,0);
            acctInfo.add(custNameLbl, c);
    
            custNameTxt = new JTextField("customer name",50);
            c.gridx = 1;
            c.gridy = 0;
            c.insets = new Insets(5,5,5,5);
            acctInfo.add(custNameTxt,c);
            custNameTxt.requestFocusInWindow();
    
            JLabel acctNumLbl = new JLabel("Account Number");
            c.gridx = 0;
            c.gridy = 1;
            c.insets = new Insets(5,5,5,5);
            acctInfo.add(acctNumLbl,c);
    
            acctNumTxt = new JTextField("account number");
            c.gridx = 1;
            c.gridy = 1;
            c.insets = new Insets(5,5,5,5);
            acctInfo.add(acctNumTxt,c);
    
            JLabel dateCreatedLbl = new JLabel("Date Created");
            c.gridx = 0;
            c.gridy = 2;
            c.insets = new Insets(5,5,5,5);
            acctInfo.add(dateCreatedLbl,c);
    
            dateCreatedTxt = new JTextField("date created");
            c.gridx = 1;
            c.gridy = 2;
            c.insets = new Insets(5,5,5,5);
            acctInfo.add(dateCreatedTxt,c);
    
            //buttons
            checkingBtn = new JButton("Checking");
            c.gridx = 0;
            c.gridy = 3;
            c.insets = new Insets(5,5,5,5);
            acctInfo.add(checkingBtn,c);
    
            savingsBtn = new JButton("Savings");
            c.gridx = 1;
            c.gridy = 3;
            c.insets = new Insets(5,5,5,5);
            acctInfo.add(savingsBtn,c);
    
    //end of info panel
    
            JPanel withDraw = new JPanel(new GridBagLayout());
            c.gridx = 0;
            c.gridy = 1;
            c.insets = new Insets(5,5,5,5);
            bankTeller.add(withDraw, c);
    
            witAmountTxt = new JTextField("Amount to Withdraw:");
            c.gridx = 0;
            c.gridy = 0;
            c.insets = new Insets(5,5,5,5);
            withDraw.add(witAmountTxt,c);
    
            withDrawBtn = new JButton("Withdraw");
            c.gridx = 1;
            c.gridy = 0;
            c.insets = new Insets(5,5,5,5);
            withDraw.add(withDrawBtn,c);
    
            //add check balance
    
    //end of withdraw panel
    
            JPanel deposit = new JPanel(new GridBagLayout());
            c.gridx = 1;
            c.gridy = 1;
            c.insets = new Insets(5,5,5,5);
            bankTeller.add(deposit, c);
    
            depAmountTxt = new JTextField("Amount to Deposit");
            c.gridx = 0;
            c.gridy = 0;
            c.insets = new Insets(5,5,5,5);
            deposit.add(depAmountTxt,c);
    
            depositBtn = new JButton("Deposit");
            c.gridx = 1;
            c.gridy = 0;
            c.insets = new Insets(5,5,5,5);
            deposit.add(depositBtn,c);      
    
            bankTeller.setVisible(true);
    
            // action/event 
            checkingBtn.addActionListener(this);
            savingsBtn.addActionListener(this);
            withDrawBtn.addActionListener(this);
            depositBtn.addActionListener(this);
    
        }
    
        public void actionPerformed(ActionEvent e) 
        {
            if (e.getSource()== checkingBtn)
            {
                witAmountTxt.requestFocusInWindow();
                //checking newcheck = new checking();
            }
    
        }
    }
    
    
    /*
            String accountType = null;
            accountType = JOptionPane.showInputDialog(null, "Checking or Savings?");
    
            if (accountType.equalsIgnoreCase("checking"))
            {
                checking c_Account = new checking();
            }
            else if (accountType.equalsIgnoreCase("savings"))
            {
            //  savings s_Account = new savings();
            }
            else
            {
                JOptionPane.showMessageDialog(null, "Invalid Selection");
            }
    
        */
    
  • Hovercraft Full Of Eels
    Hovercraft Full Of Eels over 13 years
    1+ for great suggestion. Also he should consider nesting JPanels each using one of the other easier to use simpler layout managers. Other options include miglayout.
  • peter.murray.rust
    peter.murray.rust over 13 years
    and +1 to you for the pack() and setVisible(). I would never use GBL by choice and unless the OP is required to do it for the Lab I would also go for nested JPanels
  • Bill.Caffery
    Bill.Caffery over 13 years
    awesome! ty! didnt know about pack() and thats exactly what is needed. i knew something was wrong in the sizing when it displayed i just didnt know how to fix it.
  • Bill.Caffery
    Bill.Caffery over 13 years
    i have actually but thank you. i just tried something a little more adventurous this time.
  • wonton
    wonton over 10 years
    +1 works great, a lot more efficient than a repack() or some hack
  • gcoulby
    gcoulby almost 9 years
    Yeah this is exactly what is needed. Excellent answer +1
  • John R Perry
    John R Perry almost 7 years
    Setting weightx to 1 fixed it for me. Thanks!
  • Nat Kuhn
    Nat Kuhn over 4 years
    This allowed me to fix a program that I wrote years ago that broke very quickly. I'm not supposed to just say thank you, so I won't, but you get the idea....

Related