Note that there are some explanatory texts on larger screens.

plurals
  1. POJava button question
    text
    copied!<p>I am trying to get the user to input 2 fields. One is the volume of the pool and one is the volume of the hut tub. This then calculates the price of each, what I am having trouble is with if the user enters volume for the pool, then they can't enter anything for the hot tub and vise versa. This is what I have so far. Do I need to have 2 separate fields for this, or how can it be done? </p> <p>Pretty much the string errors = ""; can be removed once I figure out how to only allow them to enter one set of numbers. Here is the calculate portion, the other part of the code is just the 3 labels. </p> <pre><code>pricePanel = new JPanel(new FlowLayout()); final JRadioButton poolPrice= new JRadioButton("Pool"); final JRadioButton tubPrice = new JRadioButton("Hot Tub"); poolPrice.setSelected(true); ButtonGroup group = new ButtonGroup(); group.add(poolPrice); group.add(tubPrice); pricePanel.add(poolPrice); pricePanel.add(tubPrice); pricePanel.add(new JLabel("Enter the pool's volume: ")); final JTextField poolField = new JTextField(10); pricePanel.add(poolField); pricePanel.add(new JLabel("Enter the tub's volume: ")); final JTextField tubField = new JTextField(10); pricePanel.add(tubField); JButton calculatePrice = new JButton("Calculate Price"); calculatePrice.setMnemonic('C'); pricePanel.add(calculatePrice); pricePanel.add(createExitButton()); pricePanel.add(new JLabel("The price is:$ ")); final JTextField priceField = new JTextField(10); priceField.setEditable(false); pricePanel.add(priceField); calculatePrice.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { double pool = Double.parseDouble (poolField.getText()); double tub = Double.parseDouble(tubField.getText()); double price; if (poolPrice.isSelected()) { price = pool * 100; } else { price = tub * 75; } priceField.setText(df.format(price)); } }); }; ActionListener priceListener = new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getSource() == poolPrice) { tubLabel.setEnabled(false); tubField.setEnabled(false); messageArea.setVisible(true); } else if (e.getSource() == tubPrice) { poolLabel.setEnabled(false); poolField.setEnabled(false); messageArea.setVisible(true); } } }; poolPrice.addActionListener(priceListener); tubPrice.addActionListener(priceListener); </code></pre> <p>~~~~~~~~~~~~~~~~~~~~~~~~~~~~</p> <pre><code>hotTubsPanel = new JPanel(new FlowLayout()); final JRadioButton roundTub = new JRadioButton("Round Tub"); final JRadioButton ovalTub = new JRadioButton("Oval Tub"); roundTub.setSelected(true); ButtonGroup group = new ButtonGroup(); group.add(roundTub); group.add(ovalTub); hotTubsPanel.add(roundTub); hotTubsPanel.add(ovalTub); hotTubsPanel.add(new JLabel("Enter the tub's length: ")); final JTextField lengthField = new JTextField(10); hotTubsPanel.add(lengthField); final JLabel widthLabel = new JLabel("Enter the tub's width*: "); widthLabel.setEnabled(false); hotTubsPanel.add(widthLabel); final JTextField widthField = new JTextField(10); widthField.setEnabled(false); hotTubsPanel.add(widthField); hotTubsPanel.add(new JLabel("Enter the tub's depth: ")); final JTextField depthField = new JTextField(10); hotTubsPanel.add(depthField); JButton calculateVolume = new JButton("Calculate Volume"); calculateVolume.setMnemonic('C'); hotTubsPanel.add(calculateVolume); hotTubsPanel.add(createExitButton()); hotTubsPanel.add(new JLabel("The tub's volume is: ")); final JTextField volumeField = new JTextField(10); volumeField.setEditable(false); hotTubsPanel.add(volumeField); final JTextArea messageArea = createMessageArea(1, 25, "*Width will be set to the same value as length"); hotTubsPanel.add(messageArea); calculateVolume.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (roundTub.isSelected()) { widthField.setText(lengthField.getText()); } ValidationResult result = validateFields(new JTextField[] { lengthField, widthField, depthField }); String errors = ""; if (result.filled != 3) { errors += "Please fill out all fields! "; } if (result.valid != 3 &amp;&amp; result.filled != result.valid) { errors += "Please enter valid numbers!"; } if (errors != "") { messageArea.setText(errors); messageArea.setVisible(true); } else { messageArea.setVisible(false); double length = Double.parseDouble(lengthField.getText()); double width = Double.parseDouble(widthField.getText()); double depth = Double.parseDouble(depthField.getText()); double volume; if (roundTub.isSelected()) { volume = Math.PI * Math.pow(length / 2.0, 2) * depth; } else { volume = Math.PI * Math.pow(length * width, 2) * depth; } volumeField.setText(df.format(volume)); } } }); ActionListener tubsListener = new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getSource() == roundTub) { widthLabel.setEnabled(false); widthField.setEnabled(false); widthField.setText(lengthField.getText()); messageArea.setText("Tub's width set to length"); messageArea.setVisible(true); } else if (e.getSource() == ovalTub) { widthLabel.setEnabled(true); widthField.setEnabled(true); messageArea.setVisible(false); } } }; roundTub.addActionListener(tubsListener); ovalTub.addActionListener(tubsListener); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload