GridLayout中的JTextField

时间:2013-12-04 01:40:12

标签: java swing jtextfield layout-manager grid-layout

我的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);
}
}

1 个答案:

答案 0 :(得分:1)

您有这种效果,因为您使用GridLayout它会将组件的大小调整为网格的所有单元格。

尝试为LayoutManager使用另一个mainPanel,例如GridBagLayout,您可以使用它来管理容器中组件的大小调整,尝试将添加代码更改为{{1}使用下一个代码,它可以帮助您:

mainPanel

它看起来像:

enter image description here

另外,我建议您检查不同的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);