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

最佳答案

之所以具有这种效果,是因为使用GridLayout可以将组件的大小调整为网格的所有单元格。

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

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


它看起来像:



另外,我建议您检查不同的LayoutManager's,以后再结合使用它们而不是使用一个(GridLayout)。

10-06 05:39
查看更多