0

GUIを使用してJavaアプレットでチップ計算アプリを作成しています。私の質問は、ユーザーが数字の代わりに文字を入力した場合にエラーメッセージが表示されるようにする方法です

初めて質問するのでお手柔らかにお願いします!ありがとう!!!

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

// Typing in the text field and hitting return adds text to text area.
// Clicking on button erases the text area.
public class TextApplet extends Controller implements ActionListener 
{
    private static final int ROWS = 1; // rows in TextArea
    private static final int COLS = 10; // cols in text field & area

    private String amount;
    private float number;
    private JTextField inField, output;         // Input field

    private JButton clear, calc;     
         // button to clear output


    public void begin() 
    {

        Container contentPane = getContentPane();
        JPanel topPanel = new JPanel();       // prepare text field & label
        JLabel inLabel = new JLabel("Bill Cost: ");
        inField = new JTextField(COLS);

        inField.addActionListener(this);
        JLabel topTitle = new JLabel("Tip Calculator", JLabel.CENTER);
        JPanel combinePanel = new JPanel();

        combinePanel.add ( inLabel );
        combinePanel.add ( inField );
        JPanel combinePanel1 = new JPanel();
        combinePanel1.add ( topTitle );

        topPanel.add ( combinePanel1 );
        topPanel.add ( combinePanel );


        topPanel.setLayout ( new GridLayout ( 3,1) );
        contentPane.add(topPanel,BorderLayout.NORTH);

        JPanel centerPanel = new JPanel();     // prepare text area & label
        JLabel outLabel = new JLabel("Bill + Tip:");
        output = new JTextField(COLS);
        output.setEditable(false);        // Prevent user from wrting in output
        centerPanel.add(outLabel);
        centerPanel.add(output);
        contentPane.add(centerPanel,BorderLayout.CENTER);

        JPanel bottomPanel = new JPanel(); 

        // create button
        clear = new JButton("  Clear  ");
        calc = new JButton("Calculate");
        calc.addActionListener(this);
        clear.addActionListener(this);
        bottomPanel.add(calc);
        bottomPanel.add(clear);

        contentPane.add(bottomPanel,BorderLayout.SOUTH);
        validate();
    }

    // add text to area if user hits return, else erase text area
    public void actionPerformed(ActionEvent evt) 
    {
        if (evt.getSource() == calc )
        { 
            amount = inField.getText();
            number = ( Float.parseFloat( amount ) );
            number = (15*number/100);

            output.setText ( Float.toString ( number ) + '$' );
        }

        else if (evt.getSource() == clear )
        {
            output.setText("$");
            inField.setText("");
        }
     }
 }
4

7 に答える 7

3

これを達成する方法はいくつもありますが、使用できます

于 2013-12-20T02:48:17.230 に答える
2

javax.swing.InputVerifierを見てください。に簡単に取り付けることができますJTextField

JTextField inputField = new JTextField();
inputField.setInputVerifier(new NumericInputVerifier());

private class NumericInputVerifier extends InputVerifier
{
    @Override
    public boolean verify(JComponent input)
    {
        if (((JTextField) input).getText().matches("[0-9]+"))
        {
            return true;
        }
        else
        {
            JOptionPane.showMessageDialog(input, "Only numbers are allowed", "Warning", JOptionPane.WARNING_MESSAGE);
            return false;
        }
    }
}

完全なはここにあります。

編集InputVerifier数値入力に制限する使用方法の例を追加しました正規表現を再確認する必要がありますが、基本的な考え方はそこにあります...

于 2013-12-20T02:26:43.580 に答える
2

JFormattedTextField または DocumentFilter を使用します。その後、ユーザーは数字以外の数字を入力することさえできなくなります。見る:

  1. 書式付きテキスト フィールドの使用方法
  2. ドキュメント フィルタの実装

ドキュメント フィルターでは、入力された各文字をチェックして、数字であることを確認する必要があります。

ボタンをクリックして処理を行うまで待つのではなく、ユーザーが入力したときにそのような単純な編集を行う方が常に優れています。

于 2013-12-20T02:48:52.410 に答える
0

こんにちは友人私は提案をします

actionPerformed メソッドを呼び出すときに検証を追加してください

 public void actionPerformed(ActionEvent evt) 
{
    if (evt.getSource() == calc )
    { 
       if(validate()){
        amount = inField.getText();
        number = ( Float.parseFloat( amount ) );
        number = (15*number/100);

        output.setText ( Float.toString ( number ) + '$' );

        }
     else{
   // show message for inter valid number or any other
       }
     }

    else if (evt.getSource() == clear )
    {
        output.setText("$");
        inField.setText("");
    }
 }
  boolean validate(){  

   try{
    amount = inField.getText();
        number = ( Float.parseFloat( amount ) );
      return true;

  }
   catch(Exception e){
   return false;

 }




 }
于 2013-12-20T04:25:13.243 に答える
0

よく考えると、数学を行うには文字列を整数に変換する必要があります。これを行うことができます:

try {
 int number = Ineger.parseInt(inField.getText());
} catch (NumberFormatException e) {
//SHOW WARNING
}
于 2013-12-20T02:29:07.283 に答える
0

float に変換できない String で Float.parseFloat を呼び出そうとすると、NumberFormatException がスローされます。この例外をキャッチする必要があります。

try {        
number = ( Float.parseFloat( amount ) );
number = (15*number/100);

output.setText ( Float.toString ( number ) + '$' );
} catch(NumberFormatException e) {
//code to show error message here
}
于 2013-12-20T02:25:59.543 に答える