1

現在、ユーザーが入力した月、日、年を 1 行で (スペースで区切って) 読み取るコードがあります。これがコードです。

Scanner input = new Scanner(System.in);
int day = 0;
int month = 0;
int year = 0;

System.out.printf("enter the month, date, and year(a 2 numbered year). Put a space between the month, day, and year");
month = input.nextInt();
day = input.nextInt();
year = input.nextInt();

これは正常に動作し、2 番目の部分はメッセージを表示することです。月 * 日 == 年であれば、それは魔法の数であり、そうでない場合は魔法の数ではありません。ダイアログボックスに表示する必要があります。これがそのための私のコードであり、うまく機能しています。

  if((day * month) == year)
  {
    String message = String.format("%s", "The date you entered is MAGIC!");//If the day * month equals the year, then it is a magic number
    JOptionPane.showMessageDialog(null, message);
  }
  if((day * month) != year)
  {  
    String message = String.format("%s", "The date you entered is NOT MAGIC!");//If the day * month does not equal the year, it is not a magic number
    JOptionPane.showMessageDialog(null, message);
  }

私の質問は!! コンソールで動作するように、月、日、年の入力を 1 行に表示するダイアログ ボックスを取得するにはどうすればよいですか。私は DrJava で作業していますが、私が読んでいる本の章は、この特定の用途については役に立ちません。どんな助けでも素晴らしいでしょう。皆さんありがとう!

4

3 に答える 3

6

最終的に達成したいものに応じて、問題にアプローチする方法はいくつかあります。

JOptionPaneメッセージとして指定できますObject。このメッセージが の場合はStringそのままレンダリングされますが、Component何らかの種類の の場合は単にダイアログに追加されます。これによりJOptionPane、非常に強力な小さな API が作成されます。

ここに画像の説明を入力

public class TestOptionPane07 {

    public static void main(String[] args) {
        new TestOptionPane07();
    }

    public TestOptionPane07() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JTextField fldDay = new JTextField(3);
                JTextField fldMonth = new JTextField(3);
                JTextField fldYear = new JTextField(4);
                JPanel message = new JPanel();
                message.add(fldDay);
                message.add(new JLabel("/"));
                message.add(fldMonth);
                message.add(new JLabel("/"));
                message.add(fldYear);

                int result = JOptionPane.showConfirmDialog(null, message, "Enter Date", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
                if (result == JOptionPane.OK_OPTION) {
                    String sDay = fldDay.getText();
                    String sMonth = fldMonth.getText();
                    String sYear = fldYear.getText();
                    JOptionPane.showMessageDialog(null, "You enetered " + sDay + "/" + sMonth + "/" + sYear);

                    try {
                        int day = Integer.parseInt(sDay);
                        int month = Integer.parseInt(sMonth);
                        int year = Integer.parseInt(sYear);
                        JOptionPane.showMessageDialog(null, "You enetered " + day + "/" + month + "/" + year);
                    } catch (Exception e) {
                        JOptionPane.showMessageDialog(null, "The values you entered are invalid");
                    }
                }
            }
        });
    }
}

更新しました

このようなものを使用する場合は、DocumentFilterも使用して、ユーザーが有効な値のみを入力できるようにします (例はこちら) 。

しかし、あなたも使うことができますJSpinners

ここに画像の説明を入力ここに画像の説明を入力

またはJComboBox

ここに画像の説明を入力

あなたが達成したいものに応じて...

于 2013-02-09T01:47:49.633 に答える
2

以下を利用してユーザー入力を取得できます

String word = JOptionPane.showInputDialog("Enter 3 int values");
String[] vals = word.split("\\s+"); // split the sting by whitespaces accepts regex. 
// vals[0] cast to int
// convert string representation of number into actual int value
int day = Integer.parseInt(vals[0]); // throws NumberFormatException
// vals[1] cast to int
// vals[2] cast to int

分割JavaAPI

parseInt Java API

Java正規表現チュートリアル

于 2013-02-09T01:21:31.877 に答える
2

ここにいくつかのコードがあります。すべてがコメントで説明されています。

// import statements
import javax.swing.JOptionPane;
// main class
public class Main {
    // main method
    public static void main(String[] args) {
        // get info
        try {
            Info info = new Info();
        } catch(Exception e) {
            System.err.println("Error! " + e.getMessage());
        }
        // do whatever with the info
    }
    // info class
    static class Info {
        // instance variables
        public int day, month, year;
        // constructor
        public Info() throws Exception {
            // get inputs
            String[] inputs = JOptionPane.showInputDialog(null, 
                "Enter day, month, year").split(" ");
            // not the right size
            if(inputs.length != 3) {   
                throw new Exception("Not enough infomation was given!");
            }
            // get values
            day = Integer.parseInt(inputs[0]);
            month = Integer.parseInt(inputs[1]);
            year = Integer.parseInt(inputs[2]);
        }
    }
}

何か問題が発生した場合に通知するエレガントな方法があり、必要なものはすべて便利なオブジェクトにパッケージ化されています。

于 2013-02-09T01:25:44.320 に答える