2016-07-06 23 views
0

ボタンをクリックするたびに1週間増やしたいと思います.Jlabel1で週の最初の曜日を、JLabel2で週末を表示したいと思います。クリック数で週数を増やす

私はすでに週と最後の日を知っていた最初の日を表示しましたが(コードを参照)、次週は増やすために2番目のステップ たとえば今週(始め> 04-07-2016> 10-07-2016)と私はそれが2週間で補強し、ボタンをクリックしたとき(開始>終了2016年11月7日> 17-07-2016)

public void gestion_date() { 
    Date date = new Date(); 
    Calendar maDate = new java.util.GregorianCalendar(); 
    maDate.setTime(date); 
    // On se positionne sur le Lundi de la semaine courante : 
    maDate.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
    dat = df.format(maDate.getTime()); 
    jLabel3.setText(dat); 
    maDate.add(Calendar.DATE, 6); 
    dat = df.format(maDate.getTime()); 
    jLabel5.setText(dat); 
} 

The screen of my Jlabel and button and the example

答えて

1

削除回答でした正しい。なぜそれが取り下げられたのか分かりません。

java.time

質問は、後のJava 8とに組み込まれたjava.timeフレームワークに取って代わられてきた面倒な古い日時のクラスを使用しています。 Oracle Tutorialを参照してください。この機能の多くは、Java 6 & 7(ThreeTen-Backport)にバックポートされ、さらにThreeTenABPのAndroidに適合しています。

現在の日付を取得するには、タイムゾーンが必要です。

ZoneId zoneId = ZoneId.of("America/Montreal"); 
LocalDate today = LocalDate.now(zoneId); 

前の月曜日取得するにはTemporalAdjustersを使用してください。 DayOfWeekは、週7日間のそれぞれを表す簡単な方法です。

LocalDate previousOrSameMonday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); 

あなたが他の目的のために、あなたの週の最後の日が必要な場合は、あなた次の行を行うことができます。しかし、質問に記載されているような表示だけでは、これを保存する必要はありませんnextSundayオブジェクトです。週の開始から常に6日後であることがわかっているので、いつでも即座に計算することができます。

LocalDate nextSunday = previousOrSameMonday.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); 
これで、メモリの周りに留まるために、クラスのメンバに開始曜日を格納する必要があります。 gestion_dateメソッドで定義されたローカル変数は、各実行の完了時に無駄に蒸発します。 Swingフォームに現在表示されているデータを保存する場所があります。あなたの質問にあなたが言及していないので、その場所がどこにあるのか分かりません。だからここで私は架空の名前 modelBehindMySwingFormを発明する "モデル"は "私のアプリのビジネスデータ"を意味します。

modelBehindMySwingForm.weekStart = previousOrSameMonday; 

加算ボタンまたは減算ボタンをクリックするたびに、そのメンバー変数を1週間増分します。

modelBehindMySwingForm.weekStart = modelBehindMySwingForm.weekStart.plusWeeks(1); // Or minusWeeks 

そしてLocalDateオブジェクトの値を表す文字列でJLabelのウィジェットを更新します。 toStringに電話をかけて、ISO 8601の形式の日付を取得することができます。 java.utのローカライズをDateTimeFormatterで行う方が良いでしょう。 modelBehindMySwingFormなどのどこかにフォーマッタオブジェクトを保存してください。再作成する意味はありません。

Locale locale = Locale.CANADA_FRENCH; 
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); 
formatter = formatter.withLocale(locale); 

上で見たようmodelBehindMySwingForm.weekStartをインクリメントした後、あなたのJLabelオブジェクトに表示するための文字列を生成するフォーマッタを使用しています。

String start = modelBehindMySwingForm.weekStart.format(modelBehindMySwingForm.formatter); // Monday 
String stop = modelBehindMySwingForm.weekStart.plusDays(6).format(modelBehindMySwingForm.formatter); // Following Sunday. 
+0

((modelBehindMySwingForm))とは何ですか? – AnouarLouardighi

+0

Swingフォームに現在表示されているデータを保存する場所があります。私はあなたの質問に言及していないので、それがどこにあるのかわかりません。だから、私は架空の名前 'modelBehindMySwingForm'を発明しました。ここで、"モデル "は"私のアプリのビジネスデータ "を意味します。 –

+0

あなたのコードで自分のコードを読むのに問題が見つかりました – AnouarLouardighi

関連する問題