Radio Button Help Please!
I am writing a program that prompts a user to enter the name of an item, the price of the item, and the percentage discount on that item. The program then calculates the sale price and spits that out in a display box.
The program is also supposed to contain a menu that lists "departments" that the user can choose from. The menu needs to be either in JComboBox format or using radio buttons. I failed miserably at getting the JComboBox option to work, so I did it using radio buttons.
When I run the program in NetBeans it works like a champ. The only issue is, NetBeans IDE is indicating a warning on each of the 5 radio button lines. The warning message is "Local variable hides a field". Using the Alt-Enter help feature, a menun pops up that says "Rename the local variable" and there are 3 sub-menu options where I can either Disable "Local variable hides a field" hint, Configure "Local variable hides a field" hint, or Suppress Warning - LocalVariableHidesMemberVariable.
i renamed the variables, and all that accomplished was renaming the variables. The warning messages still exist. I don't want to hide or suppress the warnings because that doesn't fix the underlying problem. Eventually, I want the radio buttons to actually work and not just appear on the menu.
So my question is, why am I getting this warning message, and how do I fix it?!
Please...If you respond, keep it WAY simple. I am not a Java developer! I am building this thing based on what I am reading in a book and finding online. So I am very new to this thing. Any other suggestions you may have to make thing thing more accurate/efficient/professional would be greatly appreciated.
Here is the code:
Code java:
package retail.price.calculator;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
/**
* Author: Rick Sebastian
*/
public class RetailPriceCalculator extends JFrame
{
private JPanel panel;
private JPanel selectedDeptPanel; //To hold department info
private JPanel deptList; // A list of departments
private JTextField selectedDept; // The selected department
private JLabel label; // To display a message
private JRadioButton meats, dairy, bakery, produce, pharmacy;
private JLabel messageLabelA;
private JTextField productNameTextField;
private JLabel messageLabelB;
private JTextField originalPriceTextField;
private JLabel messageLabelC;
private JTextField discountPercentageTextField;
private JButton calcButton;
public RetailPriceCalculator()
{
setTitle("Retail Price Calculator"); // Display name for frame
setLayout (new BorderLayout());
setSize(950,200); // Sets display box size to 400x400 pixels
setLocationRelativeTo(null); // Centers frame on the screen
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Ensures program terminates on exit
buildPanel(); // Builds the main panel
add(panel, BorderLayout.CENTER); // Centers items in the panel
setVisible(true); // makes it visible
JPanel p = new JPanel(); // Creates the panel for the radio buttons
JRadioButtonMenuItem meats = new JRadioButtonMenuItem();
meats.setText("Meats");
JRadioButtonMenuItem dairy = new JRadioButtonMenuItem();
dairy.setText("Dairy");
JRadioButtonMenuItem bakery = new JRadioButtonMenuItem();
bakery.setText("Bakery");
JRadioButtonMenuItem produce = new JRadioButtonMenuItem();
produce.setText("Produce");
JRadioButtonMenuItem pharmacy = new JRadioButtonMenuItem();
pharmacy.setText("Pharmacy");
ButtonGroup group = new ButtonGroup();
group.add(meats);
group.add(dairy);
group.add(bakery);
group.add(produce);
group.add(pharmacy);
panel.add(meats);
panel.add(dairy);
panel.add(bakery);
panel.add(produce);
panel.add(pharmacy);
}
private void buildPanel()
{
messageLabelA = new JLabel("Enter the product name");
productNameTextField = new JTextField(10);
messageLabelB = new JLabel("Enter the original price");
originalPriceTextField = new JTextField(10);
messageLabelC = new JLabel("Enter the percent to discount");
discountPercentageTextField = new JTextField(10);
calcButton = new JButton ("Calculate");
calcButton.addActionListener(new CalcButtonListener());
panel = new JPanel();
panel.add(messageLabelA);
panel.add(productNameTextField);
panel.add(messageLabelB);
panel.add(originalPriceTextField);
panel.add(messageLabelC);
panel.add(discountPercentageTextField);
panel.add(calcButton);
JTextArea textInput = new JTextArea(20, 40);
JScrollPane scrollPane = new JScrollPane(textInput);
}
private class CalcButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String productNameInput;
String originalPriceInput;
String discountPercentageInput;
double originalPrice;
double discountPercentage;
double salePrice;
productNameInput = productNameTextField.getText();
originalPriceInput = originalPriceTextField.getText();
originalPrice = Double.parseDouble(originalPriceInput);
discountPercentageInput = discountPercentageTextField.getText();
discountPercentage = Double.parseDouble(discountPercentageInput);
salePrice = originalPrice - ((discountPercentage * originalPrice) * .01);
JOptionPane.showMessageDialog(null,
"The Sale Price of your " + productNameInput + " is $ "+ salePrice);
}
}
public static void main(String[] args)
{
new RetailPriceCalculator();
}
}
Re: Radio Button Help Please!
Quote:
The warning message is "Local variable hides a field
What is the name of the local variable and the name of the field that is hidden?
Do you have variables with the same name defined in two places: one local to a method and one in the class?
The local variable will "hide" the class variable.
The solution is to only define the variable in the class and not in the method so it can be used in all the methods of the class.
Re: Radio Button Help Please!
You are re-declaring class fields (the JRadioButton variables) in the constructor. Stop doing that. Instead declare them in the class, and initialize them in the constructor or the class, but don't re-declare them in the constructor. Doing this will leave the class fields null, and you don't want that.
Re: Radio Button Help Please!
Norm, curmudgeon - Guys, thanks so much. The error was obvious once you pointed it out.
Appreciate the help!!
Re: Radio Button Help Please!
One more question if I may...
When the calculate button is clicked, the output window needs to reflect 4 items:
1. The item name
2. The department it came from (the radio button selection)
3. The original price
4. The sale price
I have everything but item 2 (the radio button selection) included so far.
Can you tell me what I need to do to get the radio button selection included in the output please?
Thanks again for all your help.
Here's the latest code again just in case:
Code java:
package retail.price.calculator;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
/**
* Author: Rick Sebastian
*/
public class RetailPriceCalculator extends JFrame
{
private JPanel panel;
private JPanel selectedDeptPanel; //To hold department info
private JPanel deptList; // A list of departments
private JTextField selectedDept; // The selected department
private JLabel label; // To display a message
private JLabel messageLabelA;
private JTextField productNameTextField;
private JLabel messageLabelB;
private JTextField originalPriceTextField;
private JLabel messageLabelC;
private JTextField discountPercentageTextField;
private JButton calcButton;
public RetailPriceCalculator()
{
setTitle("Retail Price Calculator"); // Display name for frame
setLayout (new BorderLayout());
setSize(375,400); // Sets display box size to 400x400 pixels
setLocationRelativeTo(null); // Centers frame on the screen
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Ensures program terminates on exit
buildPanel(); // Builds the main panel
add(panel, BorderLayout.CENTER); // Centers items in the panel
setVisible(true); // makes it visible
JRadioButtonMenuItem meats = new JRadioButtonMenuItem("Meats", true); //Defines the meat radio button and sets it to default
JRadioButtonMenuItem dairy = new JRadioButtonMenuItem("Dairy"); //Defines the dairy radio button
JRadioButtonMenuItem bakery = new JRadioButtonMenuItem("Bakery"); //Defines the bakery radio button
JRadioButtonMenuItem produce = new JRadioButtonMenuItem("Produce"); //Defines the produce radio button
JRadioButtonMenuItem pharmacy = new JRadioButtonMenuItem("Pharmacy"); //Defines the pharmacy radio button
ButtonGroup group = new ButtonGroup(); //Defines a button group to group buttons together
group.add(meats); // Adds the meats button to the group
group.add(dairy); // Adds the dairy button to the group
group.add(bakery); // Adds the bakery button to the group
group.add(produce); // Adds the produce button to the group
group.add(pharmacy); // Adds the pharmacy button to the group
panel.add(meats); // Adds the meats button to the outwindow
panel.add(dairy); // Adds the dairy button to the output window
panel.add(bakery); // Adds the bakery button to the output window
panel.add(produce); // Adds the produce button to the output window
panel.add(pharmacy); // Adds the pharmacy button to the output window
}
private void buildPanel()
{
JTextArea textInput = new JTextArea("Your Order Summary:",10, 30);
messageLabelA = new JLabel("Enter the product name");
productNameTextField = new JTextField(10);
messageLabelB = new JLabel("Enter the original price");
originalPriceTextField = new JTextField(10);
messageLabelC = new JLabel("Enter the percent to discount");
discountPercentageTextField = new JTextField(10);
calcButton = new JButton ("Calculate");
calcButton.addActionListener(new CalcButtonListener());
panel = new JPanel();
panel.add(messageLabelA);
panel.add(productNameTextField);
panel.add(messageLabelB);
panel.add(originalPriceTextField);
panel.add(messageLabelC);
panel.add(discountPercentageTextField);
panel.add(calcButton);
panel.add(textInput);
}
private class CalcButtonListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
String productNameInput;
String originalPriceInput;
String discountPercentageInput;
double originalPrice;
double discountPercentage;
double salePrice;
productNameInput = productNameTextField.getText();
originalPriceInput = originalPriceTextField.getText();
originalPrice = Double.parseDouble(originalPriceInput);
discountPercentageInput = discountPercentageTextField.getText();
discountPercentage = Double.parseDouble(discountPercentageInput);
salePrice = originalPrice - ((discountPercentage * originalPrice) * .01);
JOptionPane.showMessageDialog(null,
"The Sale Price of your " + productNameInput + " with an original price of "
+ originalPriceInput + " is now only $ " + salePrice + "!!");
}
}
public static void main(String[] args)
{
RetailPriceCalculator retailPriceCalculator = new RetailPriceCalculator();
}
}
Re: Radio Button Help Please!
Look at the ButtonGroup class. It probably has a way to get a reference to the selected radio button.
Re: Radio Button Help Please!
I used the JRadioButtonMenuItem name in the output string *assuming* it would identify the selected JRadioButtonMenuItem... That didn't work.
So unless I'm just not formatting the expression properly, I really don't know what else to include.
Here's what I had originally...
Code java:
"The Sale Price of your " + productNameInput + " from the " + JRadioButtonMenuItem + " with an original price of " + originalPriceInput + " is $ "+ salePrice);
Re: Radio Button Help Please!
Again why don't you do what Norm suggested -- use your ButtonGroup object, group?
Re: Radio Button Help Please!
I can't find a way to get to the JRadioButton using the ButtonGroup. Is there a path through the classes and methods to get it?
Re: Radio Button Help Please!
I tried adding the word "group" to the statement too and it didn't recognize it in the expression.
I simply do not understand the syntax of the expression I need.
Would it be + group.add(meats) or group.add(dairy) or etc... + ??
I have no idea... I have tried every variation I can think of.
Re: Radio Button Help Please!
What you want is the JRadioButton that is selected. The ButtonGroup the JRadioButton is in can be used to get data from the JRadioButton that is selected.
Quote:
it didn't recognize it
Is the variable defined in the correct scope so other methods can see it? See post#2
Re: Radio Button Help Please!
The ButtonGroup the JRadiobutton is in is called "group". But if I plug the word "group" into the output string it doesn't recognize it.
Do I have to declare "group" as a variable maybe first??
I am so confused....
Re: Radio Button Help Please!
Again is the group variable in the correct scope? that was the issue of your first question. Where is the group variable declared? In the class or in a constructor or method?
Re: Radio Button Help Please!
I removed the line - private JRadioButton meats, dairy, bakery, produce, pharmacy; from the original code as you indicated I should and I left the variables in the button statements as follows:
Code java:
JRadioButtonMenuItem meats = new JRadioButtonMenuItem("Meats", true); //Defines the meat radio button and sets it to default
JRadioButtonMenuItem dairy = new JRadioButtonMenuItem("Dairy"); //Defines the dairy radio button
JRadioButtonMenuItem bakery = new JRadioButtonMenuItem("Bakery"); //Defines the bakery radio button
JRadioButtonMenuItem produce = new JRadioButtonMenuItem("Produce"); //Defines the produce radio button
JRadioButtonMenuItem pharmacy = new JRadioButtonMenuItem("Pharmacy"); //Defines the pharmacy radio button
ButtonGroup group = new ButtonGroup(); //Defines a button group to group buttons together
group.add(meats); // Adds the meats button to the group
group.add(dairy); // Adds the dairy button to the group
group.add(bakery); // Adds the bakery button to the group
group.add(produce); // Adds the produce button to the group
group.add(pharmacy); // Adds the pharmacy button to the group
panel.add(meats); // Adds the meats button to the outwindow
panel.add(dairy); // Adds the dairy button to the output window
panel.add(bakery); // Adds the bakery button to the output window
panel.add(produce); // Adds the produce button to the output window
panel.add(pharmacy); // Adds the pharmacy button to the output window
}
Do I need to take the variables back out of the button statements and re-insert the private JRadioButton meats, dairy, bakery, produce, pharmacy; statement in order to get the variable to print out with the output??
Re: Radio Button Help Please!
Quote:
Originally Posted by
Rick Sebastian
I removed the line -
private JRadioButton meats, dairy, bakery, produce, pharmacy; from the original code as you indicated I should and I left the variables in the button statements as follows:
Code java:
JRadioButtonMenuItem meats = new JRadioButtonMenuItem("Meats", true); //Defines the meat radio button and sets it to default
JRadioButtonMenuItem dairy = new JRadioButtonMenuItem("Dairy"); //Defines the dairy radio button
JRadioButtonMenuItem bakery = new JRadioButtonMenuItem("Bakery"); //Defines the bakery radio button
JRadioButtonMenuItem produce = new JRadioButtonMenuItem("Produce"); //Defines the produce radio button
JRadioButtonMenuItem pharmacy = new JRadioButtonMenuItem("Pharmacy"); //Defines the pharmacy radio button
ButtonGroup group = new ButtonGroup(); //Defines a button group to group buttons together
group.add(meats); // Adds the meats button to the group
group.add(dairy); // Adds the dairy button to the group
group.add(bakery); // Adds the bakery button to the group
group.add(produce); // Adds the produce button to the group
group.add(pharmacy); // Adds the pharmacy button to the group
panel.add(meats); // Adds the meats button to the outwindow
panel.add(dairy); // Adds the dairy button to the output window
panel.add(bakery); // Adds the bakery button to the output window
panel.add(produce); // Adds the produce button to the output window
panel.add(pharmacy); // Adds the pharmacy button to the output window
}
I don't recall anyone telling you to remove the variables from the class, and in fact you should leave them in the class. What we recommended is that you not re-declare them in your constructor. That's a big difference. You need the class JRadioButton variables and a class ButtonGroup variable so that the variable and its referenced object will be visible to all methods of the class.
Quote:
Do I need to take the variables back out of the button statements and re-insert the private JRadioButton meats, dairy, bakery, produce, pharmacy; statement in order to get the variable to print out with the output??
You need to add them back to the class, but don't re-declare them. Again do this:
Code :
public class MyClass {
private JRadioButton myRadioButton; // this is OK
// constructor
public MyClass() {
// the code below is *not* OK since it re-declares the variable
// JRadioButton myRadioButton = new JRadioButton("Radio Button");
// the code below *is* OK since it does not re-declare the variable
myRadioButton = new JRadioButton("Radio Button");
// .....
Re: Radio Button Help Please!
Okay... I renamed all of the button statements to remove the variable:
Code java:
myRadioButton1 = new JRadioButton("Meats", true); //Defines the meat radio button and sets it to default
myRadioButton2 = new JRadioButton("Dairy"); //Defines the dairy radio button
myRadioButton3 = new JRadioButton("Bakery"); //Defines the bakery radio button
myRadioButton4 = new JRadioButton("Produce"); //Defines the produce radio button
myRadioButton5 = new JRadioButton("Pharmacy"); //Defines the pharmacy radio button
ButtonGroup group = new ButtonGroup(); //Defines a button group to group buttons together
group.add(myRadioButton1); // Adds the meats button to the group
group.add(myRadioButton2); // Adds the dairy button to the group
group.add(myRadioButton3); // Adds the bakery button to the group
group.add(myRadioButton4); // Adds the produce button to the group
group.add(myRadioButton5); // Adds the pharmacy button to the group
panel.add(myRadioButton1); // Adds the meats button to the outwindow
panel.add(myRadioButton2); // Adds the dairy button to the output window
panel.add(myRadioButton3); // Adds the bakery button to the output window
panel.add(myRadioButton4); // Adds the produce button to the output window
panel.add(myRadioButton5); // Adds the pharmacy button to the output window
I added the following statements to the declaration:
Code java:
public class RetailPriceCalculator extends JFrame
{
private JRadioButton myRadioButton1, myRadioButton2, myRadioButton3, myRadioButton4, myRadioButton5;
private ButtonGroup group;
By adding the ButtonGroup group; declaration, I am now getting the "Local variable hides a field" warning message.
Which probably explains why the statement:
Code java:
JOptionPane.showMessageDialog(null,
"The Sale Price of your " + productNameInput + " from the " + group + "Department with an original price of "
+ originalPriceInput + " is now only $ " + salePrice + "!!");
still does not produce the desired results....
Not sure where else to go from here....
Re: Radio Button Help Please!
You are re-declaring the group variable in the constructor. Haven't we discussed this very issue several times in this thread already?
Re: Radio Button Help Please!
If this is the constructor:
Code java:
myRadioButton1 = new JRadioButton("Meats", true); //Defines the meat radio button and sets it to default
myRadioButton2 = new JRadioButton("Dairy"); //Defines the dairy radio button
myRadioButton3 = new JRadioButton("Bakery"); //Defines the bakery radio button
myRadioButton4 = new JRadioButton("Produce"); //Defines the produce radio button
myRadioButton5 = new JRadioButton("Pharmacy"); //Defines the pharmacy radio button
then I suppose I don't understand what a variable is.
My understanding is that this is the constructor for the radio buttons. But the variable is the name "myRadioButton%" and the names "Meats, "Dairy", etc. inside the statements are only display text, not variables.
Re: Radio Button Help Please!
Quote:
Originally Posted by
Rick Sebastian
If this is the constructor:
Code java:
myRadioButton1 = new JRadioButton("Meats", true); //Defines the meat radio button and sets it to default
myRadioButton2 = new JRadioButton("Dairy"); //Defines the dairy radio button
myRadioButton3 = new JRadioButton("Bakery"); //Defines the bakery radio button
myRadioButton4 = new JRadioButton("Produce"); //Defines the produce radio button
myRadioButton5 = new JRadioButton("Pharmacy"); //Defines the pharmacy radio button
No that isn't a constructor but rather is code that is inside of your constructor.
Quote:
then I suppose I don't understand what a variable is.
My understanding is that this is the constructor for the radio buttons. But the variable is the name "myRadioButton%" and the names "Meats, "Dairy", etc. inside the statements are only display text, not variables.
I don't understand what you're stating.
An example of a variable is your myRadioButton1 and all the myRadioButtonX's above as well as your group variable. The key issue is one of scope, and this will depend on where you *declare* your variable. If you declare it in the class, it will be visible throughout the class. If you declare it inside of a method or a constructor, then the variable is only visible inside of that method or constructor -- its scope is limited to that method or constructor (or other block of code).
To again use an example:
Code :
public class MyClass {
private JRadioButton radioButtonInClass; // declared in class
private JRadioButton radioButtonThatWillBeShadowed; // also declared in class
// constructor
public MyClass() {
// the code below initializes the variable but does not re-declare the variable
radioButtonInClass = new JRadioButton("Radio Button in class");
// the variable below re-declares the variable and so the class variable will remain *null*
// the variable below will thus be visible only in the constructor and will "shadow" the class
// field of the same name
JRadioButton radioButtonThatWillBeShadowed = new JRadioButton("Radio Button shadowed");
// the variable below is local to the constructor and is visible in only the constructor.
JRadioButton localRadioButton = new JRadioButton("Local radio button");
// .....