按钮的问题

时间:2013-12-09 00:27:50

标签: java swing layout jradiobutton

我遇到了radiobuttons的问题并将它们添加到我的gui布局中。我正在尝试将一组按钮加载到我的面板“orderPanel”,并将该组放在描述标题和文本区域空间旁边。我试图将它放在我命名为“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);

}
}

我预感到下面的文字没有正确使用。我相信整个按钮组可能必须在自己的面板中。我不确定。

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

}

无论如何,我想知道如何将我的组放到infoPanel()中,还是应该为infoPanel()中的每个peice创建单独的面板?

1 个答案:

答案 0 :(得分:1)

JRadioButtons没有显示的原因是你将它们添加到this(JFrame),将它们放在BorderLayout的中心,然后它们被mainPanel取代,因为BorderLayout只允许每个区域中有一个组件。

你是对的:他们需要成为他们自己的小组。添加新字段orderTypesPanel,然后将GroupButton()更改为:

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

}

然后在orderPanel()中添加三分之一:

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

认为这就是你想要的。