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

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

ただいまの
回答率

91.35%

  • Java

    10476questions

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

  • Swing

    185questions

    SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Swing ボタン押下でパネルの表示を変更したい。

受付中

回答 0

投稿 2017/11/26 15:08

  • 評価
  • クリップ 1
  • VIEW 43

前提・実現したいこと

ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

SETボタンを押下したら、日付ラベルを入力フィールドに入力した日付にしたいが、
表示が変更されない。

該当のソースコード

class JFrameSample extends JFrame {
    public static void main(String[] args) {
        JFrameSample JFra = new JFrameSample();

        //JFrame設定
        JFra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JFra.setSize(600, 600);
        JFra.setLocationRelativeTo(null);
        JFra.setVisible(true);    
    }

    JFrameSample() {

        JPanel DispDate = new JPanel();
        DispDate.setLayout(new BorderLayout());
        CalApp CalApp = new CalApp();
        DispDate.add(CalApp, BorderLayout.CENTER);

        JPanel DispCal = new JPanel();
        DispCal.setLayout(new BorderLayout());
        CalApp2 CalApp2 = new CalApp2();
        DispCal.add(CalApp2, BorderLayout.CENTER);

        JPanel Cont = new JPanel();
        Cont.setLayout(new CardLayout());
        Cont.add(DispDate, "DispDate");
        Cont.add(DispCal, "DispCal");



        BtnPanel BtnPanel = new BtnPanel();
        getContentPane().add(BtnPanel, BorderLayout.NORTH);
        getContentPane().add(Cont, BorderLayout.CENTER);

    }
}
class BtnPanel extends JPanel implements ActionListener {
    Locale locale = new Locale("ja", "JP", "JP");
    Calendar cal = Calendar.getInstance(locale);

    JTextField EntDate;
    JButton SET;
    JButton Daybtn;
    JButton Monthbtn;

    String strYear;
    String strWaYear;
    String strMonth;
    String strDay;
    String strWeek;

    BtnPanel() {

        //ラベル、ボタンの設定
        EntDate = new JTextField(12);
        EntDate.setFont(new Font("MS ゴシック", Font.BOLD, 20));
        SET = new JButton("SET");
        SET.setFont(new Font("MS ゴシック", Font.BOLD, 20));
        SET.setActionCommand("set");
        SET.addActionListener(this);
        Daybtn = new JButton("日");
        Daybtn.setFont(new Font("MS ゴシック", Font.BOLD, 20));
        Daybtn.addActionListener(this);
        Daybtn.setActionCommand("DispDate");
        Monthbtn = new JButton("月");
        Monthbtn.setFont(new Font("MS ゴシック", Font.BOLD, 20));
        Monthbtn.addActionListener(this);
        Monthbtn.setActionCommand("DispCal");

        strYear = calYear(cal);
        String ToCalAppYear = strYear;
        strWaYear = calWayear(cal);
        String ToCalAppWaYear = strWaYear;
        strMonth = calMonth(cal);
        String ToCalAppMonth = strMonth;
        strDay = calDay(cal);
        String ToCalAppDay = strDay;
        strWeek = calWeek(cal);
        String ToCalAppWeek = strWeek;


        //配置
        //ボタン
        JPanel btnP = new JPanel();
        btnP.setLayout(new FlowLayout());
        btnP.add(EntDate);
        btnP.add(SET);
        btnP.add(Daybtn);
        btnP.add(Monthbtn);

        this.add(btnP);
    }

    public void actionPerformed(ActionEvent e){
        String cmd = e.getActionCommand();
        if (cmd.equals("set")) {
            String strDate = EntDate.getText();//yyyy/MM/dd
            Calendar calDate =    parseStrToCal(strDate);//Calendar型に
            strYear = calYear(calDate);//yyyy年に
            strWaYear = calWayear(calDate);//(平成yy年)に
            strDay = calDay(calDate);//MM月に
            strMonth = calMonth(calDate);//dd日に
            strWeek = calWeek(calDate);//(曜日)に

            String strYcut = strYear.substring(0, 3);
            int intYcut = new Integer(strYcut);
            String strMcut = strMonth.substring(0, 1);
            int intMcut = new Integer(strMcut);
        } else if (cmd.equals("DispDate")) {
            CardLayout.show(JFrameSample.Cont , cmd);
        } else if (cmd.equals("DispCal")) {
            CardLayout.show(JFrameSample.Cont , cmd);
        }
    }




    public static Calendar parseStrToCal(String str){
        Calendar calDate = new GregorianCalendar();
        if(str == null) {
            calDate = null;
        } else {
            try {
                calDate.setTime(DateFormat.getDateInstance().parse(str.replace("-", "/")));
            } catch (ParseException e) {
                calDate = null;
            }
        }
        Date date=calDate.getTime();
        calDate.setTime(date);
        return calDate;
    }

    public static String calYear(Calendar calDate) {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年");
        String strYear = sdf1.format(calDate.getTime());
        return strYear;
    }

    public static String calWayear(Calendar calDate) {
        Locale locale = new Locale("ja", "JP", "JP");
        SimpleDateFormat sdf2 = new SimpleDateFormat("'('GGGGyyyy年')'", locale);
        String strWaYear = sdf2.format(calDate.getTime());
        return strWaYear;
    }

    public static String calMonth(Calendar calDate) {
        SimpleDateFormat sdf3 = new SimpleDateFormat("MM'月'");
        String strMonth = sdf3.format(calDate.getTime());
        return strMonth;
    }

    public static String calDay(Calendar calDate) {
        SimpleDateFormat sdf4 = new SimpleDateFormat("dd'日'");
        String strDay = sdf4.format(calDate.getTime());
        return strDay;
    }

    public static String calWeek(Calendar calDate) {
        SimpleDateFormat sdf5 = new SimpleDateFormat("'('E')'");
        String strWeek = sdf5.format(calDate.getTime());
        return strWeek;
    }
}

//日付表示用のクラス
class CalApp extends JPanel {
    JLabel DisYear;
    JLabel DisMonth;
    JLabel DisDay;
    JLabel DisWeek;

    CalApp() {
        Locale locale = new Locale("ja", "JP", "JP");
        Calendar cal = Calendar.getInstance(locale);
        BtnPanel BtnPanel = new BtnPanel();

        DisYear = new JLabel(BtnPanel.strYear + BtnPanel.strWaYear, JLabel.CENTER);
        DisYear.setFont(new Font("MS ゴシック", Font.PLAIN, 30));
        DisMonth = new JLabel(BtnPanel.strMonth, JLabel.CENTER);
        DisMonth.setFont(new Font("MS ゴシック", Font.PLAIN, 30));
        DisDay = new JLabel(BtnPanel.strDay, JLabel.CENTER);
        DisDay.setFont(new Font("MS ゴシック", Font.PLAIN, 30));
        DisWeek = new JLabel(BtnPanel.strWeek, JLabel.CENTER);
        DisWeek.setFont(new Font("MS ゴシック", Font.PLAIN, 30));

        //日付
        JPanel MainP = new JPanel();
        MainP.setLayout(new GridLayout(4, 1));
        MainP.add(DisYear);
        MainP.add(DisMonth);
        MainP.add(DisDay);
        MainP.add(DisWeek);

        this.add(MainP);
    }

}

試したこと

BtnPanelクラスにstrYear等を直接指定しても、変更されないので、CalAppクラスに値を渡せていない?

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

Eclipse にて実行。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正の依頼

  • KSwordOfHaste

    2017/11/26 19:38

    提示されているソースはそもそもコンパイルエラーになると思います。不足しているクラスがあるだけでなく明らかに文法上許されない記述があります。コンパイルエラーを解決してから質問しなおすか、コンパイルエラーの内容が不明ならエラーメッセージとそれが発せられる問題の行を明示して「コンパイルエラーが出る」という内容の質問にしてください。

    キャンセル

まだ回答がついていません

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

ただいまの回答率

91.35%

関連した質問

  • 解決済

    JButtonでボタンを制作し、画面の大きさを切り替えると位置が変わってしまう

    前回の質問時にはコマンドラインでの電卓を作っていましたが、現在ではswingを使った電卓の制作に挑戦しています。 JButtonでボタンを作り、親パネルに貼り付けているのですが、

  • 解決済

    Android JAVA 取得した日付の変換

    RSSから記事一覧を取得し、日付順に並べ替えたいと思います。 その中で、取得するRSSにより日付の型が違うため並べ替えることができません。 2016-01-02T05:

  • 解決済

    国旗を表示させたい(続き)

    前提・実現したいこと btn [0][1][2]をクリックすると、それに対応した国旗が表示されるようにしたい。 ソースコード import java.awt.*;   

  • 解決済

    java 型変換

            Calendar cal = Calendar.getInstance();         cal.add(Calendar.YEAR,-textcalk)

  • 解決済

    string型をcalender型に変換したい

    いろいろ調べても理解ができなかったので質問です。 date型で入力された日付をカレンダー型に変換を行い、カレンダー型の中でプラス1日して、日付が加算されたカレンダー型をdat

  • 解決済

    現在の日時の取得、使い方がわかりません

    現在パネルにカレンダーを作る事をしているのですが、 一応出力はできているのですがよく分からない月からしか出力されませんどこを直せばいいでしょうか? お願いいたします。

  • 解決済

    指定日までのカウントダウン

    指定した日をダイアログボックスに入力し、ボタンを押下すると現在から指定までのカウントダウンを行うアプリを開発したいです。 インターネットの情報を参考に作成しようとしているので

  • 解決済

    javaで特定の文字を打った時JLabelに画像表示したい

    textFieldに文字"test"と打った時 JLabelに画像test.jpgを表示したいです

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

  • Java

    10476questions

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

  • Swing

    185questions

    SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。