JTextField показывает только как щель Используя GridBagLayout, нужна помощь
Привет, спасибо заранее за любую помощь, я пытаюсь создать простую программу для изучения GUI, но когда я запускаю код ниже моего JTextFields, все отображаются в виде разреза, который недостаточно велик даже для одного символа.
не могу опубликовать изображение, но оно будет выглядеть примерно так: Label [|
где [| как выглядит текстовое поле
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");
}
*/
4 ответа
Попробуйте вызвать pack() на вашем JFrame после добавления всего и перед setVisible(true)
Кроме того, вы не забудете установить весовые и весовые поля GridBagConstraints. По крайней мере, дайте им значение, отличное от 0, например 1,0 для большинства полей и 0 для полей, размер которых вы не хотите менять, если размер графического интерфейса изменяется.
Добавление этих работ для меня:
c.weightx=1.;
c.fill=GridBagConstraints.HORIZONTAL;
В Swing также есть ошибка, которая может привести к тому, что JTextArea будет отображаться как щель, хотя Sun/Oracle говорит, что "это не ошибка, это особенность":
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4247013
Одним из возможных решений, которое кто-то предложил в этом потоке, является установка минимального размера JTextField... что-то вроде этого:
textField.setMinimumSize(textField.getPreferredSize());
Я предполагаю из названия lab6, что вы, возможно, не использовали GridBagLayout раньше. Это один из самых сложных и страшных инструментов Swing Layout. Если вы не использовали его, я бы предложил поработать над учебными пособиями, такими как: http://download.oracle.com/javase/tutorial/uiswing/layout/gridbag.html и подготовиться к вашему примеру.