Вопрос о кнопке Java - PullRequest
       5

Вопрос о кнопке Java

0 голосов
/ 15 августа 2010

Я пытаюсь заставить пользователя ввести 2 поля. Один - это объем бассейна, а другой - объем ванны хижины. Затем вычисляется цена каждого из них, с чем у меня возникают проблемы: если пользователь вводит объем для пула, он не может ничего ввести для джакузи и наоборот. Это то, что я до сих пор. Нужно ли для этого иметь 2 отдельных поля или как это можно сделать?

В значительной степени строковые ошибки = ""; могут быть удалены, как только я пойму, как разрешить им вводить только один набор чисел. Вот часть вычисления, другая часть кода - это всего лишь 3 метки.

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

1 Ответ

2 голосов
/ 16 августа 2010

Два текстовых поля и только одно поле результата могут сбить пользователя с толку.Если будет только одно поле результата, также должно быть только одно текстовое поле.Переключатели, предложенные Stian, будут работать, или даже иметь две кнопки, одну для бассейна и одну для джакузи (для получения другой цены потребуется всего один щелчок).У вас также должно быть что-то в поле результатов, указывающее, какое из них было рассчитано, например, «Цена пула: $ XX.XX» или «Цена горячей ванны: $ XX.XX».Если вы выбрали идею кнопок и пометили кнопки «Бассейн» и «Горячая ванна», вы даже можете сделать что-то необычное с результатом, например setText(e.getActionCommand()+" price:"+price);.

Кроме того, if (errors != "") всегда будетбыть true.Вы проверяете, является ли ваш объект errors тем же объектом, что и новый объект String, который вы создаете;этого никогда не будет.Вместо этого вы должны проверить на if (!errors.equals("")) или if (errors.length()!=0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...