
こんばんは、この前質問したばかりですが
どうしてもわからないので
よろしくお願いします。
ラベルに今日の日付を表示するようなプログラム
はこの様なコーディングだと思ったのですが、
コンパイルできませんでした。
どなたか、正しい方法を教えていただけないでしょうか。
import java.util.*;
import javax.swing.*;
import java.awt.*;
class timelabel
{
JFrame frame=new JFrame();
JLabel label=new JLabel();
Calendar cld = Calendar.getInstance();
label.setText(cld.get(Calendar.DATE));
frame.setVisible(true);
}
No.4ベストアンサー
- 回答日時:
>日付の日の部分だけ表示したかったのですが
>(例:2006/5/28⇒28)
>もう少しだけ教えていただけませんか?
>「DATE」のクラスライブラリを見ても、
>よくわかりませんでした。
なるほど。Dateクラスのメソッドはほとんどが非推奨ですね。とりあえず回答を2つ用意しましょう。
1)非推奨であるが、DateクラスのgetDate()メソッドを使う
これでも(一応)できます。
2)Dateクラスではなく、Calendarクラスを使う
「JDK バージョン 1.1 以降は、Calendar.get(Calendar.MONTH) に置き換えられました。 」と書かれていますね?これを使ってみます。
ただし、Calendarクラスのgetメソッドを見てもらえればわかるように、このメソッドはstaticではありません。つまり、「Calendar.get(Calendar.MONTH) 」と直接書くことはできません。一旦Calendarクラスのインスタンスを取得します。ただし、Calendarクラスは抽象クラスなので、
Calendar cal=new Calendar();
と言う風に直接newすることはできません。私が知る限りの方法を・・
2-1)CalendarクラスのサブクラスであるGregorianCalendarクラスのオブジェクトを作る
GregorianCalendarクラスは抽象クラスではありません。つまり、
Calendar cal=new GregorianCalendar();
と書くことができます。
2-2)CalendarクラスのgetInstance()メソッドを使う
Calendarクラスは抽象クラスですが、staticなgetInstance()メソッドを用意しています。つまり、
Calendar cal=Calendar.getInstance();
と書くことができます。
(ただし、Calendar.getInstance()は基本的に内部でGregorianCalendarをnewします。つまり、やっていることはほとんど変わりません。)
無事Calendarクラスのインスタンスを取得できたので、あとは、
cal.get(Calendar.MONTH)
と書けば日が取得できます。
ここで注意してもらいたいのが、両方ともintを返すと言うことです。つまり、JLabel(int)というコンストラクタはないため、一旦
new Integer(int).toString()
として、Stringに変形しましょう。
つまり、
//3つのうちどれでもよい
//int date=new Date().getDate();
int date=new GregorianCalendar().get(Calendar.DATE);
//int date=Calendar.getInstance().get(Calendar.DATE);
this.getContentPane().add(new JLabel(new Integer(date).toString()));
でできます。
freedom560さん、はじめまして。
まるで参考書のような丁寧な解説ありがとうございました。
おかげさまで、ラベルに今日の日付(日部分)を
表示させることができました。
一応、一通りjava参考書を読んだのですが
本に載ってなくて重要なことってたくさんありますね。
webの解説ページなどを読んでもっと、
プログラミングが上達するように頑張ります。
No.3
- 回答日時:
#1です。
すみません。1.5の環境だとエラーが出ないので・・・
1.4でコンパイル・実行したら確かにエラーが出ますね。
エラーの内容については#2さんの書かれているとおりです。
No.2
- 回答日時:
英語に書いてあることそのままなんですが・・
Do not use timelabel.add()
--------- ---------------
使うな timelabelクラスのadd()メソッドを
use timelabel.getContentPane().add() instead
------------------------------- -------
timelabel.getContentPane().add()を使え 代わりに
・・そのままですね。
つまり、
add(new JLabel(new Date().toString()));
の代わりに
getContentPane().add(new JLabel(new Date().toString()));
を使わなければなりません。
この理由は下のHPにある「JFrame クラスは Frame と多少互換性のない~」の辺りに書いてあります。まぁ、読んでも「なんのこっちゃい?」っていう感じだと思うので、swingではadd(Component comp)
メソッドを直接は使えず、一旦getContentPane()メソッドでオブジェクト(Containerクラスか、そのサブクラス)をとってきた後、このオブジェクトのadd(Component comp)メソッドを呼び出さなければいけないと覚えておくとよいでしょう。
参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java …
ご回答ありがとうございます。
お礼遅れて申し訳ございません。
おかげさまで、正しく実行されました。
ごめんなさい、ちょっと言葉が足りなかったのですが
日付の日の部分だけ表示したかったのですが
(例:2006/5/28⇒28)
もう少しだけ教えていただけませんか?
「DATE」のクラスライブラリを見ても、
よくわかりませんでした。
御礼遅れておきながら
大変恐縮でございますが
どうか、よろしくお願いします。
No.1
- 回答日時:
とりあえず、初心者向けの参考書なりWebの解説ページなりを見て基本的なことを学んでみてはいかがですか?
一応、動くソースを・・・
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Timelabel extends JFrame
{
public static void main(String[] args){
new Timelabel();
}
public Timelabel(){
super("Timelabel");
add(new JLabel(new Date().toString()));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
}
この回答への補足
Bonjinさん、ご回答ありがとうございます。
コンパイルできるのですが、残念ながら
Exception in thread "main" java.lang.Error: Do not use timelabel.add() use timel
abel.getContentPane().add() instead
at javax.swing.JFrame.createRootPaneException(JFrame.java:465)
at javax.swing.JFrame.addImpl(JFrame.java:491)
at java.awt.Container.add(Container.java:307)
at timelabel.<init>(timelabel.java:31)
at timelabel.main(timelabel.java:26)
というエラーが出て何も表示されません
どうしたらよろしいでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Visual Basic(VBA) swiftで年号を 1 2023/02/05 06:48
- その他(プログラミング・Web制作) seleniumbasic chrome操作について 1 2023/03/29 15:40
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB初心者なのでわかりづらい説...
-
Calendar型を使用して日付の差...
-
(vba)他のアプリケーションの右...
-
JAVAにFTP転送をサポートし...
-
【継承】親のメソッドの実行
-
ArrayListはListのデフォルト実...
-
ラベルに日付を表示
-
C# 「データが失なわれる可能性...
-
C#からDLLを呼びたいのですが・...
-
javaで
-
インターフェースは New 出来な...
-
C++ヘッダの肥大化
-
オブジェクト指向 ボールの衝突
-
vb.net 自作プロパティの削除に...
-
ゲッターを使わないで変数にア...
-
JavaのComparatorを使ったソート
-
compareToにおける「自然順序付...
-
private継承はどう使う?
-
中学生です。 私は教室の黒板に...
-
private static という変数の修飾
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB DLLプロジェクトについて
-
(vba)他のアプリケーションの右...
-
【C#】クラスのコンストラクタ...
-
メソッドの引数にクラス名を渡す
-
C# 「データが失なわれる可能性...
-
C#からDLLを呼びたいのですが・...
-
「IOException は対応する try ...
-
c++でのヘッダーファイルの循環...
-
ファイルパスが取得出来ない(P...
-
「ラッパークラス」の存在意義...
-
抽象クラスをJUNITでテストする...
-
ASP.NETでの共通コードの書き方...
-
interface,extend,implementの...
-
「ひとつのインターフェースで...
-
javanoリストのオブジェクト作...
-
オーバーライドとラッパーの違い
-
System.Collections.Generic.Li...
-
VBがオブジェクト指向言語でな...
-
compareToにおける「自然順序付...
-
Commons-Discovery.jarとは?
おすすめ情報