I'm having a problem with radiobuttons and adding them to my gui layout. I am trying to load a group of buttons to my panel, "orderPanel," and position the group next to the description header and text area space. I am trying to position it below the header I made named "probLabel."

public class AmhPhGui extends JFrame {

/* set up for GUI */

public AmhPhGui() throws ParseException {

    // title bar text
    super("Albert Huntermark Plumbing & Heating");

    // corner exit button action
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // declare main panel
    mainPanel = new JPanel();

    // declare header panel
    headerPanel = new JPanel();

    // declare name panel
    namePanel = new JPanel();

    // declare input panel
    infoPanel = new JPanel();

    // declare order panel
    orderPanel = new JPanel();

    // declare button panel
    buttonPanel = new JPanel();

    // panel build manager
    headerPanel();
    custNamePanel();
    custInfoPanel();
    orderPanel();
    buttonPanel();

    // add panel to gui
    this.add(mainPanel);

    // add BagLayout manager to main panel
    mainPanel.setLayout(new GridBagLayout());

    // change background color
    mainPanel.setBackground(Color.BLACK);

    // declare GridBagConstaints vaariable
    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);

    // resize GUI to fit text
    this.pack();
    // display window
    setVisible(true);

}


/* main method */

public static void main(String[] args) throws ParseException {

    AmhPhGui customInfo = new AmhPhGui();

}


/* build header panel */

private void headerPanel() {

    // set panel layout
    headerPanel.setLayout(new GridLayout(1, 1));

    // change background color
    headerPanel.setBackground(Color.BLACK);

    // declare header panel 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);

    // declare fName label variable
    fNameLabel = new JLabel("FIRST NAME:");

    // set color of fName label text
    fNameLabel.setForeground(Color.white);

    // declare mName label variable
    mNameLabel = new JLabel("MI (Not Required):");

    // set color of mNameLabel text
    mNameLabel.setForeground(Color.white);

    // declare lName label variable
    lNameLabel = new JLabel("LAST NAME:");

    // set color of mNameLabel text
    lNameLabel.setForeground(Color.white);

    // declare text field for each name label
    fNameTF = new JTextField(8);
    mNameTF = new JTextField(1);
    lNameTF = new JTextField(8);

    // // 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() throws ParseException {

    infoPanel.setLayout(new GridLayout(4, 2));

    // change background color
    infoPanel.setBackground(Color.BLACK);

    // initialize addressLabel variable
    addressLabel = new JLabel("ADDRESS:");

    // set color of address label text
    addressLabel.setForeground(Color.white);

    // declare text field variable
    addressTF = new JTextField(5);

    // declare phone label variable
    phoneLabel = new JLabel("PHONE NUMBER:");

    // set color of phoneLabel text
    phoneLabel.setForeground(Color.white);

    // declare formatter variable
    mf = new MaskFormatter("### - ### - ####");

    // formatter does not 
    // allow invalid characters
    mf.setAllowsInvalid(false);

    // Declare JFormattedTextField &
    // initialize format
    phoneTF = new JFormattedTextField(mf);

    // declare email label variable
    emailLabel = new JLabel("EMAIL:");

    // set color of emailLabel text
    emailLabel.setForeground(Color.white);

    // declare text field variable
    emailTF = new JTextField(5);

    // add components to panel
    infoPanel.add(addressLabel);
    infoPanel.add(addressTF);
    infoPanel.add(phoneLabel);
    infoPanel.add(phoneTF);
    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);

    // declare order label variable
    probLabel = new JLabel("ORDER:");

    // set color of prob label
    probLabel.setForeground(Color.white);

    // declare script label variable
    scriptLabel = new JLabel("DESCRIPTION:");

    // set color of script label
    scriptLabel.setForeground(Color.white);

    /*Something here*/
    GroupButton();

    // declare JTextArea variable
    description = new JTextArea(3, 20);
    description.setEditable(false);

    // allow word wrap
    description.setLineWrap(true);

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

    // declare JButton 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) {

        // declare JTextPane variable
        dialog = new JTextPane();

        // declare and define 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.";

        // declare and define 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.";

        // declare 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() {

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

    // declare new ButtonGroup
    ButtonGroup butgro = new ButtonGroup();

    // add three buttons to ButtonGroup
    butgro.add(rInstall);
    butgro.add(rProject);
    butgro.add(rMaintain);

}
}

I have a hunch that this below text is not being used properly. I believe that the whole button group may have to be in its own panel. I'm not sure.

private void GroupButton() {

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

// declare new ButtonGroup
ButtonGroup butgro = new ButtonGroup();

// add three buttons to ButtonGroup
butgro.add(rInstall);
butgro.add(rProject);
butgro.add(rMaintain);

}

Anyway, Iwould like to know how I can put my group into the infoPanel(), or should I make separate panels for each peice inside the infoPanel()?

有帮助吗?

解决方案

The reason the JRadioButtons don't show up is because you are adding them to this (the JFrame) which puts them in the center of its BorderLayout, then they get replaced by the mainPanel, since BorderLayout only allows one component in each of its regions.

You're right: they need to be in a panel of their own. Add a new field, orderTypesPanel, then alter GroupButton() to this:

private void GroupButton() {
    orderTypesPanel = new JPanel(new GridLayout(3, 1));
    orderTypesPanel.setOpaque(false);

    // declare 3 JRadioButton variables
    JRadioButton rInstall = new JRadioButton("Installation");
    JRadioButton rProject = new JRadioButton("Project");
    JRadioButton rMaintain = new JRadioButton("Maintenance");

    rInstall.setForeground(Color.white);
    rInstall.setOpaque(false);

    rProject.setForeground(Color.white);
    rProject.setOpaque(false);

    rMaintain.setForeground(Color.white);
    rMaintain.setOpaque(false);

    orderTypesPanel.add(rInstall);
    orderTypesPanel.add(rProject);
    orderTypesPanel.add(rMaintain);

    // declare new ButtonGroup
    ButtonGroup butgro = new ButtonGroup();

    // add three buttons to ButtonGroup
    butgro.add(rInstall);
    butgro.add(rProject);
    butgro.add(rMaintain);

}

Then in orderPanel(), add that one third:

    orderPanel.add(probLabel);
    orderPanel.add(scriptLabel);
    orderPanel.add(orderTypesPanel);
    orderPanel.add(vert_scroll);

I think that's what you want.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top