2013-12-09 26 views
0

問題我在與單選按鈕的問題,並將它們添加到我的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); 

} 

反正想再去讀知道我怎麼可以把我組到信息面板(),或者我應該做單獨的面板爲每個peice的的信息面板中()?

+1

注:請記住標記您正在使用或您的問題將會少看到的編程語言。 – Boann

回答

1

的JradioButton將不露面的原因是因爲你把它們添加到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); 

認爲這就是你想要的。

+0

謝謝,那就是我的意思。對不起,如果不是很清楚。你非常有幫助。 –