質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • Java

    13158questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Java EE

    365questions

    Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

ダイアログへエラーメッセージを出力、その他使い方の説明など

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 452

aminoxx_vg

score 2

前提・実現したいこと

Javaにてダイアログに記入してもらったデータをSQLに追加するプログラムを作成しています。

①ダイアログへ正しくない情報が入力された際に再び入力してもらうこと、
②その際にエラーメッセージを表示してユーザーに間違っている項目や内容がわかりやすくなるように設定したいです。

現在入力のコードを書いていて、SQLへのデータ登録の部分をとりあえずコンソール出力にしています。

発生している問題・エラーメッセージ

該当のソースコード

//確認画面にて部署の情報を数字ではなく文字で出力
//部署の入力を1、2、3のどれかでないとエラー
//エラーをダイアログに出力

import static javax.swing.JOptionPane.*;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class yobidashi{
    public static void main(String[] args) {

        //記入の為のダイアログ作成
        //社員コード、部署、郵便番号、電話番号、性別の型をint型に変更
        //String msg;
        JFrame parent = null;

        while(true){

                //社員コード
            //msg="社員コード";
            String cord = inputCord();
                //文字の長さが3じゃなければ再入力
            if(cord.length() != 3){
                continue;
            }

                //社員名
            String name = inputName();
                //未記入チェック
            if(name.equals("")){
                continue;
            }

                //部署
            String depa = inputDepa();
                //未記入チェック
            if(depa.equals("")){
                continue;
            }
                //int型に変更
            int d = Integer.parseInt(depa);

                //郵便番号
            String num = inputNum();
                //7桁入力されているかチェック
            if(!(num.length()==7)){
                continue;
            }

                //住所
            String add = inputAdd();
                //未記入チェック
            if(add.equals("")){
                continue;
            }

                //電話番号
            String cal = inputCal();
                //10桁か11桁で入力
            if( !(cal.length()==10) || !(cal.length()==11) ){
                continue;
            }

                //性別
            String kind = inputKind();
                //未記入チェック
            if(kind.equals("")){
                continue;
            }
                //int型に変更
            int k = Integer.parseInt(kind);

                //結果確認
            String message =  "結果確認\n社員コード:"+cord+
                                "\n社員名:"+name+
                                "\n部署:"+depa+
                                "\n郵便番号:"+num+
                                "\n住所:"+add+
                                "\n電話番号:"+cal+
                                "\n性別:"+kind;

            String message2 = "以上で間違いはないでしょうか?";
            int result = JOptionPane.showConfirmDialog(parent,message+"\n"+message2);

            switch(result){
                case YES_OPTION: System.out.println("YES"); break;
                case NO_OPTION: System.out.println("NO"); break;
                case CLOSED_OPTION: System.out.println("CLOSED"); break;
                default : System.out.println("Unknown value : "+result);
            }

                //depaメソッド呼び出し
            depa = depa(d);
                //kindメソッド呼び出し
            kind = kind(k);
                //checkメソッド呼び出し
            //result = result(r);

                //出力
            System.out.println("社員コード:"+cord);
            System.out.println("社員名:"+name);
            System.out.println("部署(1:SCG 2:CCG 3:KKG):"+depa);
            System.out.println("郵便番号:"+num);
            System.out.println("住所:"+add);
            System.out.println("電話番号:"+cal);
            System.out.println("性別(1:男 2:女):"+kind);


                //checkメソッドがNOの場合break
            //if(check.equals("NO")) {
            //    break;
            //}

        }
    }

    static String depa(int d){
                //1,2,3それぞれ当てはまる部署をdepaに代入
        if(d == 1){
            return "SCG";
        }else if(d == 2){
            return "CCG";
        }else if(d == 3){
            return "KCG";
        }else{
            return "";
        }
    }

    static String kind(int k){
                //1,2それぞれ当てはまる性別をkindに代入
        if(k == 1){
            return "男";
        }else if(k == 2){
            return "女";
        }else{
            return "";
        }
    }

    static String check(int ch){
                //1,2それぞれ当てはまる項目をcheckに代入
        if(ch == 1) {
            return "YES";
        }else if(ch == 2) {
            return "NO";
        }else {
            return "";
        }
    }
    //試し書き↓

    //項目ごとにメソッドの作成の方がいいかもしれない

    static String inputCord() {
        String cord = JOptionPane.showInputDialog("社員コード(3桁数字)");
        return cord;
    }


    static String inputName() {
        String msg = "";
        try {
        String name = JOptionPane.showInputDialog("社員名");
        return name;
        }catch(Exception e) {
             JOptionPane.showMessageDialog(null, "入力に不備が発生しました\nもう一度記入し直してください");
             return YES_OPTION;
        }
    }

    static String inputDepa() {
        String depa = JOptionPane.showInputDialog("部署(1:SCG 2:CCG 3:KKG)");
        return depa;
    }

    static String inputNum() {
        String num = JOptionPane.showInputDialog("郵便番号(7桁)");
        return num;
    }

    static String inputAdd() {
        String add = JOptionPane.showInputDialog("住所");
        return add;
    }

    static String inputCal() {
        String cal = JOptionPane.showInputDialog("電話番号");
        return cal;
    }

    static String inputKind() {
        String kind = JOptionPane.showInputDialog("性別");
        return kind;
    }
}

試したこと

JFrameやJOptionPaneの使い方がわかりにくく、学習の仕方などお勧めの方法があればご教授願いたいです。
よろしくお願いします。

補足情報(言語/FW/ツール等のバージョンなど)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • KSwordOfHaste

    2018/01/22 14:01

    勘違いかも知れませんがJavaEEと聞くとJavaでのサーバーサイドアプリケーションが前提みたいに思ってしまうのですが、スタンドアロンアプリケーション前提と考えてよいのですよね?もしそうならJavaEEというタグは不要に思えますがいかがでしょうか?

    キャンセル

  • aminoxx_vg

    2018/01/22 14:05 編集

    お返事ありがとうございます。現在の工程では不要なタグでした!指摘ありがとうございます。

    キャンセル

回答 1

checkベストアンサー

+2

プログラムの実装面の前に機能の方が気になります。

必要な情報を一つ一つダイアログを表示して入力させるという方法論は場合によってはアリだと思いますが・・・

  • 複数の情報を編集できるような画面(ウィンドウ)をJFrameをベースに設計
  • そこで必要な情報を全て入力してもらった上で「OK」ボタンを押してもらう
  • 「OK」ボタンが押されたら入力情報が正しいかチェックして問題なければ先へ進む(DBアクセスなど)

というような設計イメージもあると思います。

JFrameやJOptionPaneの使い方がわかりにくく、学習の仕方などお勧めの方法があれば

とのことですが、ひとまずはどのような機能のGUIを狙っておられるのかあたりを伺いたいような気がします。一項目ずつダイアログ(JOptionPane)で入力してもらうという機能で充分なのであればJOptionPaneおよびそれに関係するクラス群のリファレンスを読み込み色々作ってみれば足りるような気がします。

一方複数のコントロールが同時に表示されているようなJFrameベースの画面を想定するなら・・・やはりサンプルが豊富なGUI向きの参考書を使ったりして一つ一つ学んでいった方がよいのではないでしょうか。なぜならGUIプログラミングと一言でいってもそこそこのものを作るためには割と前提知識(設計の考え方や使うクラス)が多いからです。単純に「こうすれば」あるいは「これを知れば」わかりますとは言いにくいのではないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/23 09:41

    回答ありがとうございました!
    なるほど、会員登録フォームなどで何度も目にしていたのに一つの画面で表示にたどり着きませんでした。
    副質問の方もご回答感謝します。
    フレームやマップの知識を使えるようになりたかったのでネットで漁らず、専用の参考書を使う事にします。
    今回は迅速な回答ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13158questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Java EE

    365questions

    Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。