0

私の小さな変換プログラムには、修正できない問題がいくつかあり、助けが必要です。

  1. ユーザーが通貨を選択するまで、テキストフィールドを setEditable(false) にしたい。ユーザーが通貨を選択するまでテキストフィールドに何も入力できないようにする
  2. ユーザーが jtextfield に数値以外を入力した場合、resultLabel はエラー メッセージを表示する必要があります。

最初の部分を試してみましたが、テキストフィールド全体を編集不可に設定してしまいました。

ありがとう、ここに私のコードがあります:

/*
 *
 * Currency Converter Window
 * A currency converting program that accepts user defined amount
 * and converts that amount in one of four currencies.
 *
 * Date
 * @author
 *
 */

import javax.swing.*;
import java.awt.event.*;
import java.awt.GridLayout;

public class CurrencyConverterWin extends JFrame
{

    //three panels for the GUI
    private JPanel inputPanel;
    private JPanel resultPanel;
    private JPanel menuPanel;
    //labels that identify the fields
    private JLabel promptLabel;
    private JLabel resultLabel;
    private JLabel selectLabel;
    //menu for the list of currencies
    private JMenu currencyMenu;
    private JMenuBar currencyMenuBar;
    //input field for user to enter currency
    private JTextField inputField;
    private JButton goButton;


    //initial values for each currency to 1 sterling
    private double euros = 1.22;
    private double japaneseYen = 152.07;
    private double russianRubles = 42.53;
    private double usDollars = 1.55;

    public CurrencyConverterWin()                       //constructor
    {
        super();
        this.setSize(600, 150);                         //set size of the window
        this.setLayout(new GridLayout(3, 1));           //split the grid with panels
        this.setTitle("Currency Converter Window");     //set window title
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //close window

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

        this.resultLabel = new JLabel(" ", JLabel.CENTER);

        this.currencyMenu = new JMenu("(no currency selected)");        //create a menu of currencies

        JMenuItem Euros = new JMenuItem("Euros");                       //store the string Euros as a menu item
        Euros.addActionListener(new java.awt.event.ActionListener()     //add a listener to this item
        {
            public void actionPerformed(java.awt.event.ActionEvent evt) //listen for event
            {
                menuChanged(evt);
            }
        });
        this.currencyMenu.add(Euros);

        JMenuItem JapaneseYen = new JMenuItem("Japanese Yen");          //store the string Japanese Yen as a menu item
        JapaneseYen.addActionListener(new java.awt.event.ActionListener()   //add a listener to this item
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                menuChanged(evt);
            }
        });
        this.currencyMenu.add(JapaneseYen);

        JMenuItem RusRubbles = new JMenuItem("Russian Rubles");           //store the string russian rubles as a menu item
        RusRubbles.addActionListener(new java.awt.event.ActionListener()    //add a listener to this item
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                menuChanged(evt);
            }
        });
        this.currencyMenu.add(RusRubbles);

        JMenuItem USD = new JMenuItem("US Dollars");                    //store the string US Dollars as a menu item
        USD.addActionListener(new java.awt.event.ActionListener()       //add a listener to this item
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                menuChanged(evt);
            }
        });
        this.currencyMenu.add(USD);


        currencyMenuBar = new JMenuBar();               //initialise a new menubar and add it to the currency menu
        currencyMenuBar.add(currencyMenu);

        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.resultLabel = new JLabel(" ", JLabel.CENTER);

        this.inputField = new JTextField("", 8);
        //this.amountField.setEditable(false); //need help with this part


        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.inputField);
        this.inputPanel.add(this.goButton);

        this.add(this.inputPanel);

        this.resultPanel = new JPanel();
        this.resultPanel.add(this.resultLabel);
        this.add(this.resultPanel);
    }

    /*
     * change the state of the menu bar depending on the selected currency
     */
    public void menuChanged(ActionEvent e)
    {
        if (e.getActionCommand().equals("Euros"))
        {
            currencyMenu.setText("Euros");
        }
        if (e.getActionCommand().equals("Japanese Yen")) {
            currencyMenu.setText("Japanese Yen");
        }

        if (e.getActionCommand().equals("Russian Rubles")) {
            currencyMenu.setText("Russian Rubles");
        }

        if (e.getActionCommand().equals("US Dollars")) {
            currencyMenu.setText("US Dollars");
        }

    }

    /*
     * Events listeners for goButton
     * when the goButton is clicked it should return the user's initial value
     * plus the converted amount and some predefined strings.
     */
    public void buttonClicked(ActionEvent evt)
    {
        if(currencyMenu.getText().equals("Euros"))
        {
            resultLabel.setText(inputField.getText() + " in sterling is " + EurosToSterling() + " Euros.");
        }
        if(currencyMenu.getText().equals("Japanese Yen"))
        {
            resultLabel.setText(inputField.getText() + " in sterling is " + JapaneseYenToSterling() + " Japanese Yen.");
        }
        if(currencyMenu.getText().equals("Russian Rubles"))
        {
            resultLabel.setText(inputField.getText() + " in sterling is " + RussianRublesToSterling() + " Russian Rubles.");
        }
        if(currencyMenu.getText().equals("US Dollars"))
        {
            resultLabel.setText(inputField.getText() + " in sterling is " + USDollarsToSterling() + " US Dollars.");
        }
    }

    /*
     * Functions for converting currencies
     * get the user entry from inputField, convert it to a
     * double and multiply it by the rate of a particular
     * currency to a sterling.
     */

    //calculate the rate for euros
    double EurosToSterling()
    {
        double calcTotal = Double.parseDouble(inputField.getText()) * euros;
        return calcTotal;
    }
    //calculate the conversion rate for japanese yen
    double JapaneseYenToSterling()
    {
        double calcTotal = Double.parseDouble(inputField.getText()) * japaneseYen;
        return calcTotal;
    }
    //calculate the rate for russian rubles
    double RussianRublesToSterling()
    {
        double calcTotal = Double.parseDouble(inputField.getText()) * russianRubles;
        return calcTotal;
    }
    //calculate the rate for us dollars
    double USDollarsToSterling()
    {
        double calcTotal = Double.parseDouble(inputField.getText()) * usDollars;
        return calcTotal;
    }

    /*
     * main method to initialise CurrencyConverterWin
     */
    public static void main(String[] args)
    {
        CurrencyConverterWin CurConWin = new CurrencyConverterWin();
        CurConWin.setVisible(true);
    }
}
4

3 に答える 3

2

数値のみが必要な場合、2 つの一般的なアプローチは次のとおりです。

a) JFormattedTextField を使用します。

b) DocumentFilter をテキスト フィールドの Document に追加します。

どちらのアプローチも、Swing チュートリアルで詳しく説明されています。「書式付きテキスト フィールドの使用方法」および「テキスト コンポーネントの機能 (ドキュメント フィルタの実装)」のセクションを参照してください。

于 2010-12-13T17:36:29.143 に答える
0

あなたの例は非常に長いので、あなたが今何をしているのか正確にはわかりません。しかし、あなたの質問に答えるには:

  1. テキスト ボックスを編集不可に設定します。選択にリスナーを追加し、通貨が選択されたらテキストボックスを編集可能に設定します。
  2. JFormattedTextField を使用して、不要なフォーマットを防止します。
于 2010-12-13T17:38:15.587 に答える
0

ユーザーがテキスト ボックスに入力した内容が正しい形式であるかどうかを KeyListener で確認することができます。

于 2010-12-13T16:52:07.803 に答える