我遇到了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创建单独的面板?
答案 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);
我认为这就是你想要的。