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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

3回答

2378閲覧

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

ken_66

総合スコア29

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2016/07/26 01:08

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

~~ Kenkou.java ~~

pane6 = new JPanel();////////////////////////////////////////////////////// pane6.setBackground(new Color(176, 196, 222)); contentPane.add(pane6, "カレンダー"); JButton pane6bt1 = new JButton("ホームへ"); pane6bt1.setBounds(0, 435, 135, 39); pane6bt1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { pane1.setVisible(true);//タイトル pane2.setVisible(false);//体重 pane3.setVisible(false);//記録 pane4.setVisible(false);//グラフ pane5.setVisible(false);//一覧 pane6.setVisible(false);//日程 pane7.setVisible(false); pane8.setVisible(false); } }); pane6.setLayout(null); pane6.add(pane6bt1); pane6lb1 = new JLabel("カレンダー"); pane6lb1.setBounds(194, 0, 325, 66); pane6lb1.setHorizontalAlignment(SwingConstants.CENTER); pane6lb1.setFont(new Font("MS UI Gothic", Font.PLAIN, 32)); pane6.add(pane6lb1); paneAAA = new JPanel(); paneAAA.setBounds(12, 76, 702, 356); pane6.add(paneAAA); paneAAA.setLayout(new BorderLayout(0, 0)); ///////////////////////////////////////////////////////////////// Calendar c = Calendar.getInstance(); c.setTime(new Date());

// paneAAA1 = new Month(2015,11); //2016,0 が一月
// paneAAA1.setBackground(new Color(240, 230, 140));
// paneAAA.add(pane2, "name_2");

JButton pane6bt2 = new JButton("→"); pane6bt2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (j<11){ j++; paneAAA1.setMonth1(i,j); //月入れる p = 1; p +=j; //pane2.setToolTipText(i+"年"+p+"月"); ////pane6lb1.setText(i+"年"+p+"月"); }else{ i++; j=0; paneAAA1.setMonth1(i,j); //月入れる p = 1; p +=j; //pane2.setToolTipText(i+"年"+p+"月"); ////pane6lb1.setText(i+"年"+p+"月"); return; } } }); pane6bt2.setBackground(new Color(175, 238, 238)); paneAAA.add(pane6bt2, BorderLayout.EAST); JButton pane6bt3 = new JButton("←"); pane6bt3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (j>0){ j--; paneAAA1.setMonth1(i,j); //月入れる p = 1; p +=j; ////pane6lb1.setText(i+"年"+p+"月"); }else{ i--; j=11; paneAAA1.setMonth1(i,j); //月入れる p = 1; p +=j; ////pane6lb1.setText(i+"年"+p+"月"); return; } } }); pane6bt3.setBackground(new Color(175, 238, 238)); paneAAA.add(pane6bt3, BorderLayout.WEST); paneAAA1 = new Month(2015,11);//paneAAA1 = new JPanel(); paneAAA1.setBackground(Color.WHITE); paneAAA.add(paneAAA1, BorderLayout.CENTER); pane7 = new JPanel();////////////////////////////////////////////////////// pane7.setBackground(new Color(176, 196, 222)); contentPane.add(pane7, "標準"); pane7.setLayout(null); JButton pane7bt1 = new JButton("戻る"); pane7bt1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { pane1.setVisible(false);//タイトル pane2.setVisible(true);//体重 pane3.setVisible(false);//記録 pane4.setVisible(false);//グラフ pane5.setVisible(false);//一覧 pane6.setVisible(false);//日程 pane7.setVisible(false); pane8.setVisible(false); text3.setText(null); pane7lb3.setText("あなたの標準体重は・・・"); } }); pane7bt1.setBounds(0, 427, 135, 47); pane7.add(pane7bt1);

~~ Month.java ~~~

package kenkou;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.util.Calendar;

import javax.swing.JLabel;
import javax.swing.JPanel;

public class Month extends JPanel { //JPanelを継承 ※Pane2の内容↓

JLabel la[][] = new JLabel[7][7]; //JLabelの2次元配列 String data[][] = new String[7][7]; //Stringの2次元配列 //JButton bt[][] = new JButton[7][7]; JLabel b[][] = new JLabel[7][7]; CalendarModel cm;

//int year1;
//int month1;

public Month(int year, int month) { //コンストラクタはクラス名と同じにする setLayout(new GridLayout(7, 7, 0, 0)); // 7行7列 Calendar calendar = Calendar.getInstance(); year = calendar.get(Calendar.YEAR)+1; month = calendar.get(Calendar.MONTH)+1; for(int i = 0; i < 7; i++){ //2重ループ for(int j = 0; j < 7; j++){ b[i][j] = new JLabel(); //b[i][j] = new JLabel(); add(b[i][j]); //add(b[i][j]); b[i][j].setText(""+i+j); b[i][j].setFont(new Font("MSゴシック",Font.ITALIC,28)); //MSゴシック if(0 ==i){ b[i][j].setFont(new Font("MSゴシック",Font.BOLD,28)); } if(0 == j){ b[i][j].setForeground(Color.RED);//日曜 } if(6 == j){ b[i][j].setForeground(Color.BLUE);//土曜 } } } //year=2016; month+=1; cm = new CalendarModel(year,month); data = cm.getData(); int s=2016; int a=1; setToolTipText(s+"年"+a+"月"); for(int i = 0; i < 7; i++){ for(int j = 0; j < 7; j++){ b[i][j].setText(data[i][j]); } } } public void setMonth1(int year, int month) { //次の月 cm.setCalendar(year, month);//setCalendar data = cm.getData(); for(int i = 0; i < 7; i++){ //2重ループ for(int j = 0; j < 7; j++){ b[i][j].setText(data[i][j]); } } } public void setMonth2(int year1, int month1) { //前の月 cm.setCalendar(year1, month1);//setCalendar data = cm.getData(); for(int i = 0; i < 7; i++){ //2重ループ for(int j = 0; j < 7; j++){ b[i][j].setText(data[i][j]); } } } public String[][] getData() { return data; } }

~~ CalendarModel.java ~~

package kenkou;

import java.util.Calendar;
import java.util.Date;

class CalendarModel {
private String[] columnNames = {"日", "月", "火", "水", "木", "金", "土"};
private Calendar c = Calendar.getInstance();
private String[][] data;//String
private int startDay;
private int endDay;

Date date; CalendarModel(int year ,int month) { this.setCalendar(year, month); } public String[] getColumnNames(){ return columnNames; } public String[][] getData() { return data; } public void setCalendar(int year, int month){///////////////////////setCalendar //Calendar c = Calendar.getInstance(); //c.setTime(new Date()); data = new String[7][7]; for(int i = 0; i < columnNames.length ; i++){ data[0][i] = String.format("%2s", columnNames[i]); System.out.print(data[0][i]); } System.out.println(""); c.set(year, month,1); startDay = c.get(Calendar.DAY_OF_WEEK); c.add(Calendar.MONTH, 1); c.add(Calendar.DATE, -1); endDay = c.get(Calendar.DATE); int row = 1; int column = startDay - 1; for (int date = 1; date <= endDay; date++) { data[row][column] = String.format("%3s", String.valueOf(date)); if (column == 6) { row++; column = 0; } else { column++; } System.out.print(date + " "); if(date == 7 || date == 14 || date == 21 || date == 28){ System.out.println(""); } } }

}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/07/26 01:56

コードをマークアップして下さい。コードを選択して</>ボタンを押せば見やすくなります。
guest

回答3

0

ベストアンサー

Kenkou.javaのコード上にある変数pane6bt2で宣言されているボタンのイベント内で変数jをインクリメントされていますが、そもそもこの変数jはどこから来たのでしょうか?
インクリメントされる前の値は表示しているカレンダーの月と一致していますか?

Month.javaのコードで定義されているパネルが画面中央のカレンダー表示本体だと思いますが・・・
見直すポイントは、次のようなコードだと思います。

year = calendar.get(Calendar.YEAR)+1;
month = calendar.get(Calendar.MONTH)+1;
...
month+=1;

+1 されていますが、本当に必要な+1なのでしょうか?

Eclipseをお使いなのであれば、要所要所にブレークポイントを付けて、デバッグしてみましょう。

投稿2016/07/26 03:09

MasafumiOkamoto

総合スコア254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

new Month(2015, 11)でカレンダー画面を作ろうとしているのでしょうが、そのコンストラクタ内で引数を使わず、Calendar.getInstance()で取得した時刻(つまりシステムの現在時刻)のまま年月を使ってしまい、引数を上書きしてしまっています。getでCalendarから年月を取得していますが、逆にCalendarに対してsetを実行するべきところではないでしょうか?

投稿2016/07/26 02:03

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ken_66

2016/07/26 02:41

あ、いえ現在の年月のカレンダーを作っていますが月の表示が4月→2月→3月...になってしまっています...。 上の言われていることはわかるのですが、よろしければどこの〇〇を〇〇にと教えていただけると助かります... 初心者ですみませんorz
swordone

2016/07/26 13:59

とりあえず修正依頼通りマークアップしてください。
ken_66

2016/07/27 01:17

遅くなりすみません マークアップして下さいの</>ってどう使うんですか...? 初心者なもので...。
swordone

2016/07/27 01:18

編集画面でコードの部分を選択状態にする→</>を押す これだけです。
ken_66

2016/07/27 07:55

また返信遅くなり申し訳ありません。 swordoneさんが言われていたmonthに+1されているのは本当に+1なのかCalender.getInstance()で取得した値をそのまま使い引数を上書きしているなどこの点を考えていたら出来るようになりました! 上の助言のおかげです! monthに+1はサイトに載っていたのでこのままでいいと思い込んでしまっていたのでとても助かりました。 本当に有難うございました!
swordone

2016/07/27 15:12

それ私の回答では無いですよ。 そしてコードを見やすくして下さい そこまで難しい指示はしてないはずです。
guest

0

Month.java

java

1import java.awt.Color; 2import java.awt.Font; 3import java.awt.GridLayout; 4 5import javax.swing.JLabel; 6import javax.swing.JPanel; 7 8public class Month extends JPanel {//JPanelを継承 9 JLabel b[][] = new JLabel[7][7]; 10 CalendarModel cm = new CalendarModel(); 11 /* 12 * 指定された年と月で初期化します 13 * @param year 14 * @param month 15 */ 16 public Month(int year,int month) { 17 super.setLayout(new GridLayout(7, 7, 0, 0)); // 7行7列 18 for(int i = 0; i < 7; i++){ //2重ループ 19 for(int j = 0; j < 7; j++){ 20 b[i][j] = new JLabel(); 21 super.add(b[i][j]); 22 b[i][j].setFont(new Font("MSゴシック",Font.ITALIC,28)); //MSゴシック 23 if(0 ==i){ 24 b[i][j].setFont(new Font("MSゴシック",Font.BOLD,28)); 25 } 26 if(0 == j){ 27 b[i][j].setForeground(Color.RED);//日曜 28 } 29 if(6 == j){ 30 b[i][j].setForeground(Color.BLUE);//土曜 31 } 32 } 33 } 34 cm.setCalendar(year, month); 35 this.create(); 36 } 37 /* 38 * 今月で初期化されます 39 */ 40 public Month(){ 41 super.setLayout(new GridLayout(7, 7, 0, 0)); // 7行7列 42 for(int i = 0; i < 7; i++){ //2重ループ 43 for(int j = 0; j < 7; j++){ 44 b[i][j] = new JLabel(); 45 super.add(b[i][j]); 46 b[i][j].setFont(new Font("MSゴシック",Font.ITALIC,28)); //MSゴシック 47 if(0 ==i){ 48 b[i][j].setFont(new Font("MSゴシック",Font.BOLD,28)); 49 } 50 if(0 == j){ 51 b[i][j].setForeground(Color.RED);//日曜 52 } 53 if(6 == j){ 54 b[i][j].setForeground(Color.BLUE);//土曜 55 } 56 } 57 } 58 this.create(); 59 } 60 /* 61 * 来月に進みます 62 */ 63 public void nextMonth(){ 64 if(cm.getMonth()!=12){ 65 cm.setCalendar(cm.gatYear(),cm.getMonth()+1); 66 }else{ 67 cm.setCalendar(cm.gatYear()+1,1); 68 } 69 create(); 70 } 71 /* 72 * 先月に戻ります 73 */ 74 public void lastMonth(){ 75 if(cm.getMonth()!=1){ 76 cm.setCalendar(cm.gatYear(), cm.getMonth()-1); 77 }else{ 78 cm.setCalendar(cm.gatYear()-1, 12); 79 } 80 create(); 81 } 82 /* 83 * 指定された年と月に設定します 84 * @param year 85 * @param month 86 */ 87 public void setCalendar(int year,int month){ 88 cm.setCalendar(year, month); 89 create(); 90 } 91 /* 92 * 現在に指定する 93 */ 94 public void setNow(){ 95 cm.setNow(); 96 } 97 /* 98 * 内部処理 99 */ 100 private void create(){ 101 String[][] data = cm.getData(); 102 int s=cm.gatYear(); 103 int a=cm.getMonth(); 104 super.setToolTipText(s+"年"+a+"月"); 105 for(int i = 0; i < 7; i++){ 106 for(int j = 0; j < 7; j++){ 107 b[i][j].setText(data[i][j]); 108 } 109 } 110 } 111} 112

CalendarModel.java

import java.util.Calendar; public class CalendarModel { public final static String[] columnNames = {"日", "月", "火", "水", "木", "金", "土"}; private Calendar c = Calendar.getInstance(); //private int year,month; private String[][] data; private boolean changed; /* * 指定した年と月で初期化されます * @param year * @param month */ public CalendarModel(int year ,int month) { this.setCalendar(year, month); } /* * 現在の日付で初期化されます */ public CalendarModel(){ this.setCalendar(c.get(Calendar.YEAR),c.get(Calendar.MONTH)+1); } /* * * @return 指定されている年 */ public int gatYear(){ return c.get(Calendar.YEAR); } /* * * @return 指定されている月 */ public int getMonth(){ return c.get(Calendar.MONTH)+1; } /* * データを取得します * @return */ public String[][] getData() { //メモ化 if(changed){ create(); changed=false; return data; }else{ return data; } } /* * 指定した年と月に設定します * @param year * @param month */ public final void setCalendar(int year, int month){ changed=true; c.set(year, month-1,1);//始めの日を設定 } public void setNow(){ c=Calendar.getInstance(); } /* * 内部処理 */ private void create(){ data=new String[7][7];//初期化 data[0]=columnNames;//曜日を全部代入 int lastday=c.getActualMaximum(Calendar.DATE);//最終日を取得 int week=c.get(Calendar.DAY_OF_WEEK)-1;//曜日を取得 int day=1; while(day<=lastday){ data[week/7+1][week%7]=String.format("%2s", String.valueOf(day)); day++;week++; } } }

かなりつくりかえましたがもともとあった機能は大体そろってると思います
何をしたいのかよくわからなかったけどね・・

投稿2016/07/27 04:22

tignear

総合スコア260

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ken_66

2016/07/27 08:05

返信遅くなり申し訳ありません。 助言有難うございました。 載せていただいたコードを 自分のコードと見比べてtsukkaの方と違うところは検索して調べたり自分の違うところには載せていただいたコードを一部使わせていただきました。 おかげでちゃんと動くようになりました! すごく助かりました。 本当に有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問