JAVA: как использовать слушателей на JMenuItem и Jbutton для расчета ставок - PullRequest
2 голосов
/ 08 декабря 2010

Я пишу конвертер валют, но у меня возникли некоторые проблемы при расчете обменного курса для каждой валюты.в основном я хочу, чтобы пользователь сначала выбрал курс, затем ввел сумму и нажал кнопку «go», чтобы рассчитать курс.но у меня проблемы со слушателями на JMenuItem и JButton.Я объявил двух слушателей для menuItem и JButton.как использовать слушателя на кнопке, чтобы отследить выбор, сделанный в menuIten, чтобы он правильно вычислял курс?

Ответы [ 4 ]

3 голосов
/ 08 декабря 2010

Обычный подход заключается в том, что прослушиватель меню изменяет состояние приложения (т.е. вызывает метод, который будет сохранять курс обмена в поле).

Затем код расчета может прочитать это значение и использовать его..

1 голос
/ 08 декабря 2010

Попробуйте это с евро.Должен дать вам место для начала.


/*
 *
 * Currency converting
 *
 */

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.JComboBox;

import javax.swing.UIManager;

public class CurrencyConverterWin extends JFrame {

    private JLabel promptLabel;
    private JTextField amountField;
    private JButton goButton;
    private JPanel inputPanel;
    private JPanel answerPanel;
    private JLabel answerLabel;
    private JLabel selectLabel;
    private JComboBox currencyMenuBar;
    private JPanel menuPanel;
    private double result = 0.0;
    private double euro = 1.22257;
    private double japYen = 152.073;
    private double rusRuble = 42.5389;
    private double usd = 1.5577;

    public CurrencyConverterWin() {
        super();
        this.setSize(500, 200);
        this.setTitle("Currency Converter Window");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setLayout(new GridLayout(3, 1));

        this.selectLabel = new JLabel("Select a currency to convert to: ", JLabel.RIGHT);
        this.answerLabel = new JLabel(" ", JLabel.CENTER);

        currencyMenuBar = new JComboBox(new String[]{"Euros","Japanese Yen","Russian Rubles","US Dollars"});

        this.menuPanel = new JPanel();
        this.menuPanel.add(this.selectLabel);
        this.menuPanel.add(this.currencyMenuBar);
        this.add(this.menuPanel);

        this.promptLabel = new JLabel("(select a currency first) ", JLabel.RIGHT);
        this.answerLabel = new JLabel(" ", JLabel.CENTER);

        this.amountField = new JTextField("", 8);
        this.goButton = new JButton("GO");
        goButton.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonClicked(evt);
            }
        });

        this.inputPanel = new JPanel();
        this.inputPanel.add(this.promptLabel);
        this.inputPanel.add(this.amountField);
        this.inputPanel.add(this.goButton);

        this.add(this.inputPanel);

        this.answerPanel = new JPanel();
        this.answerPanel.add(this.answerLabel);
        this.add(this.answerPanel);
    }

    double EuroToSterling() {
        double total = Double.parseDouble(amountField.getText()) * euro;
        return total;
    }

    double JapYenToSterling()
    {
        double japToSterlingTotal = Double.parseDouble(amountField.getText()) * japYen;
        return japToSterlingTotal;
    }


//String currencyEntered = yearField.getText();
    public void buttonClicked(ActionEvent evt) {
        if(currencyMenuBar.getSelectedItem().equals("Euros"))
        {
            answerLabel.setText(EuroToSterling() + " Euros");
        }
        if(currencyMenuBar.getSelectedItem().equals("Japanese Yen"))
        {
            answerLabel.setText(JapYenToSterling() + " Japanese Yen");
        }
    }

    public static void main(String[] args) {        
        try{UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");}
        catch (Exception e){e.printStackTrace();}
        CurrencyConverterWin win = new CurrencyConverterWin();
        win.setVisible(true);
    }
}

0 голосов
/ 08 декабря 2010

Я бы также предложил вам использовать JComboBox для хранения валют. Вы должны создать объект для хранения как названия валюты, так и курса обмена. Затем, когда вам нужно рассчитать конвертированную сумму, вы получаете выбранный элемент из комбо и используете его коэффициент конверсии в ваших расчетах. При таком подходе вы можете легко увеличить количество поддерживаемых вами валют.

Извлечение: Как использовать элемент Map в качестве текста JComboBox в качестве примера, чтобы вы начали использовать объект в поле со списком.

0 голосов
/ 08 декабря 2010

Я бы лично добавил в Перечисление для обозначения типа конвертации валюты. например:

public enum ConversionType {
   DOLLARS,
   EUROS,
   RUBLES
   //ETC...
}

Используя это, вы можете сохранить переменную состояния в классе:

private ConversionType fromType;

Это то, что вы установили в своем слушателе выбора.

Оттуда вопрос заключается в выполнении различных преобразований в слушателе действий на основе переменной состояния (fromType). Примерно так:

if( fromType== EUROS ) {
 convertEurosToSterling( value1, value2 );
} 

Это общий подход - надеюсь, это поможет.

...