我的gui中的文本字段出现问题占用了我的custNamePanel()中的整个网格部分。我想知道如何解决这个问题。我的信息面板似乎很好,其JTextField的大小正常。
public class CustomInfo extends JFrame {
/* set up for GUI */
public CustomInfo() {
// title bar text
super("Albert Huntermark Plumbing & Heating");
// corner exit button action
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// create main panel
mainPanel = new JPanel();
// create header panel
headerPanel = new JPanel();
// create name panel
namePanel = new JPanel();
// create input panel
infoPanel = new JPanel();
// create order panel
orderPanel = new JPanel();
// create button panel
buttonPanel = new JPanel();
// panel build manager
headerPanel();
custNamePanel();
custInfoPanel();
orderPanel();
buttonPanel();
// add GridLayout manager to main panel
mainPanel.setLayout(new GridLayout(5, 1));
// add panel to gui
this.add(mainPanel);
mainPanel.add(headerPanel);
mainPanel.add(namePanel);
mainPanel.add(infoPanel);
mainPanel.add(orderPanel);
mainPanel.add(buttonPanel);
// resize GUI to fit text
this.pack();
// display window
setVisible(true);
}
/* main method */
public static void main(String[] args) {
CustomInfo customInfo = new CustomInfo();
}
/* build header panel */
private void headerPanel() {
// set panel layout
headerPanel.setLayout(new GridLayout(1, 1));
// change background color
headerPanel.setBackground(Color.BLACK);
// initialize variable
headerLabel = new JLabel("Please Provide the Following");
// set color of headerLabel
headerLabel.setForeground(Color.white);
// add component to panel
headerPanel.add(headerLabel, BorderLayout.CENTER);
}
/*
*
*/
private void custNamePanel() {
// set panel layout
namePanel.setLayout(new GridLayout(1, 6));
// change background color
namePanel.setBackground(Color.BLACK);
// initialize label variable
fNameLabel = new JLabel("FIRST NAME:");
// set color of fNameLabel text
fNameLabel.setForeground(Color.white);
// initialize label variable
mNameLabel = new JLabel("MI (Not Required):");
// set color of mNameLabel text
mNameLabel.setForeground(Color.white);
// initialize label variable
lNameLabel = new JLabel("LAST NAME:");
// set color of mNameLabel text
lNameLabel.setForeground(Color.white);
// create text field for each name label
fNameTF = new JTextField(10);
mNameTF = new JTextField(1);
lNameTF = new JTextField(10);
// // add components to panel
namePanel.add(fNameLabel);
namePanel.add(fNameTF);
namePanel.add(mNameLabel);
namePanel.add(mNameTF);
namePanel.add(lNameLabel);
namePanel.add(lNameTF);
}
/* build input panel */
private void custInfoPanel() {
infoPanel.setLayout(new GridLayout(4, 2));
// change background color
infoPanel.setBackground(Color.BLACK);
// initialize variable
phoneLabel = new JLabel("PHONE #:");
// set color of phoneLabel text
phoneLabel.setForeground(Color.white);
//
phoneTF = new JTextField(5);
// initialize address label variable
addressLabel = new JLabel("Address:");
// set color of addressLabel text
addressLabel.setForeground(Color.white);
//
addressTF = new JTextField(5);
// initialize email label variable
emailLabel = new JLabel("EMAIL:");
// set color of emailLabel text
emailLabel.setForeground(Color.white);
//
emailTF = new JTextField(5);
// add components to panel
infoPanel.add(phoneLabel);
infoPanel.add(phoneTF);
infoPanel.add(addressLabel);
infoPanel.add(addressTF);
infoPanel.add(emailLabel);
infoPanel.add(emailTF);
}
/* build order panel */
private void orderPanel() {
orderPanel.setLayout(new GridLayout(2, 2));
// change background color of panel
orderPanel.setBackground(Color.BLACK);
// initialize order label variable
probLabel = new JLabel("Order:");
// set color of probLabel
probLabel.setForeground(Color.white);
// initialize variable
// initialize variable
scriptLabel = new JLabel("Description:");
// set color of scriptLabel
scriptLabel.setForeground(Color.white);
/*Something here*/
GroupButton();
// initialize text area variable
description = new JTextArea(3, 20);
description.setEditable(false);
// allow word wrap
description.setLineWrap(true);
// initialize scroll pane variable
vert_scroll = new JScrollPane(description);
// specify scroll pane function
vert_scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
// add components to panel
orderPanel.add(probLabel);
orderPanel.add(scriptLabel);
orderPanel.add(vert_scroll);
}
/* build button panel */
private void buttonPanel() {
// change background color
buttonPanel.setBackground(Color.BLACK);
// initialize variable
submitButton = new JButton("Submit Order");
// add ActionListener
submitButton.addActionListener(new SubmitButtonListener());
// add components to panel
buttonPanel.add(submitButton);
}
/* build action listener
* for button panel */
private class SubmitButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e) {
// create JTextPane variable
dialog = new JTextPane();
// create string variable for confirmation
String msg = "Thank You for using \nThe Albert"
+ " Huntermark Pulmbing & Heating Application. \nYou will"
+ " recieve a Confirmation Email shortly with the \nnext"
+ " available appointment.";
// create String variable for error
String error = "We're Sorry\nthe information below is either invalid"
+ " or insufficient.\nPlease look over your information and"
+ " try again.";
// create email variable
String EMAIL_REGEX = "^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]"
+ "+[\\w]$";
// format JTextPane
StyledDocument doc = dialog.getStyledDocument();
SimpleAttributeSet center = new SimpleAttributeSet();
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
doc.setParagraphAttributes(0, doc.getLength(), center, false);
// boolean variable for email format verification
if(emailTF.getText().matches(EMAIL_REGEX))
{
// set JTextPane content
dialog.setText(msg);
// clear text fields
fNameTF.setText("");
mNameTF.setText("");
lNameTF.setText("");
phoneTF.setText("");
emailTF.setText("");
description.setText("");
}
else
dialog.setText(error);
// display dialog message
JOptionPane.showMessageDialog(null, dialog);
}
}
/* method for JRadioButton
* creation */
private void GroupButton()
{
// create 3 JRadioButton variables
JRadioButton rInstall = new JRadioButton("Installation");
JRadioButton rProject = new JRadioButton("Project");
JRadioButton rMaintain = new JRadioButton("Maintenance");
this.add(rInstall);
this.add(rProject);
this.add(rMaintain);
// create new ButtonGroup
ButtonGroup butgro = new ButtonGroup();
// add three buttons to ButtonGroup
butgro.add(rInstall);
butgro.add(rProject);
butgro.add(rMaintain);
}
}
答案 0 :(得分:1)
您有这种效果,因为您使用GridLayout
它会将组件的大小调整为网格的所有单元格。
尝试为LayoutManager
使用另一个mainPanel
,例如GridBagLayout
,您可以使用它来管理容器中组件的大小调整,尝试将添加代码更改为{{1}使用下一个代码,它可以帮助您:
mainPanel
它看起来像:
另外,我建议您检查不同的LayoutManager
's,并在将来组合使用它们而不是使用一个this.add(mainPanel);
mainPanel.setLayout(new GridBagLayout());
mainPanel.setBackground(Color.BLACK);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1;
c.insets = new Insets(5, 5, 5, 5);
c.gridy = 1;
mainPanel.add(headerPanel,c);
c.gridy++;
mainPanel.add(namePanel,c);
c.gridy++;
mainPanel.add(infoPanel,c);
c.gridy++;
mainPanel.add(orderPanel,c);
c.gridy++;
mainPanel.add(buttonPanel,c);
。