• ベストアンサー

ラベルに日付を表示

こんばんは、この前質問したばかりですが どうしてもわからないので よろしくお願いします。 ラベルに今日の日付を表示するようなプログラム はこの様なコーディングだと思ったのですが、 コンパイルできませんでした。 どなたか、正しい方法を教えていただけないでしょうか。 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); }

  • Java
  • 回答数4
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答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())); でできます。

19746999
質問者

お礼

freedom560さん、はじめまして。 まるで参考書のような丁寧な解説ありがとうございました。 おかげさまで、ラベルに今日の日付(日部分)を 表示させることができました。 一応、一通りjava参考書を読んだのですが 本に載ってなくて重要なことってたくさんありますね。 webの解説ページなどを読んでもっと、 プログラミングが上達するように頑張ります。

19746999
質問者

補足

ごめんなさい、 勘違いして、始めましてと書いてしまいました。 申し訳ございません

その他の回答 (3)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答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/javax/swing/JFrame.html
19746999
質問者

お礼

ご回答ありがとうございます。 お礼遅れて申し訳ございません。 おかげさまで、正しく実行されました。 ごめんなさい、ちょっと言葉が足りなかったのですが 日付の日の部分だけ表示したかったのですが (例:2006/5/28⇒28) もう少しだけ教えていただけませんか? 「DATE」のクラスライブラリを見ても、 よくわかりませんでした。 御礼遅れておきながら 大変恐縮でございますが どうか、よろしくお願いします。

  • Bonjin
  • ベストアンサー率43% (418/971)
回答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); } }

19746999
質問者

補足

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

  • javaのタイマープログラムの時間について

    下記のjavaのプログラムは、タイマー動作の確認プログラムです。 タイマーの起動時間を1msにし、1000回タイマーを起動しており トータルのタイマー時間は1秒と考えましたが、実際のタイマー時間は 20秒くらいかかります。 この件に関しまして、コメント頂けますと大変助かります。 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer; public class TimerTest1 extends JFrame implements ActionListener{ Timer timer; JLabel label; int sec; public static void main(String[] args){ TimerTest1 frame = new TimerTest1(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } TimerTest1(){ sec = 0; label = new JLabel(); JPanel labelPanel = new JPanel(); labelPanel.add(label); timer = new Timer(1, this); getContentPane().add(labelPanel, BorderLayout.CENTER); timer.start(); } public void actionPerformed(ActionEvent e){ label.setText(sec + " sec"); if (sec >= 1000){ timer.stop(); label.setText(" timer_stop"); }else{ sec++; } } } 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • javaでスタート画面を作っていて困っています。

    現在javaでゲームのスタート画面を作っているのですが、パネルが透過されずに困っています。 プログラムソースは import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Container; import java.awt.BorderLayout; import javax.swing.*; import java.awt.Font; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Container; import java.awt.BorderLayout; import javax.swing.border.LineBorder; import javax.swing.border.EtchedBorder; import java.awt.Color; import java.awt.Container; class Start最新版 extends JFrame{ public static void main(String args[]){ Start最新版 frame = new Start最新版("タイトル"); frame.setVisible(true); } Start最新版(String title){ setTitle(title); setBounds(10, 10, 1024, 768); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); p.setOpaque( false ); ImageIcon icon1 = new ImageIcon("Start.jpg"); JLabel label1 = new JLabel(icon1); JLabel label2 = new JLabel(); p.add(label1); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); JButton button1 = new JButton("ゲームを始める"); button1.setFont(new Font("Mairyo", Font.PLAIN, 30)); JPanel n = new JPanel(); n.setOpaque(false); n.setLayout(new BoxLayout(n, BoxLayout.Y_AXIS)); n.add(Box.createRigidArea(new Dimension(290,30))); n.add(button1); となっています。「ゲームを始める」ボタンだけを残して、周りのパネルを透過して画像を表示させたいのですが、うまくいきません!解決方法をご存知の方どうか教えていただきたいです!よろしくお願いします。

  • ボタンクリック後パネルを再描画repaintしたい

    ボタンをクリック後にstaticで保持していた値にプラス1して その値をパネルに再描画したいと思っています。 下記のプログラムだとボタンをクリックすると (<1<2<3<4)となって画像と数字が増えてしまいます 行いたいのは数字の部分だけが再描画されて カウントされて<3と表示されるだけになってもらいたい クラス1つ目 import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.event.MouseEvent; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Sample extends JFrame{ static int value=1; JPanel work = new JPanel(); public static void main(String[] args) { Sample frame = new Sample(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100, 200, 200, 100); frame.add(frame.createPanel(), BorderLayout.LINE_END); frame.setVisible(true); } public JPanel createPanel() { ImageIcon icon = new ImageIcon("./img/left.gif"); JLabel label = new JLabel(); Cursor c = new Cursor(Cursor.HAND_CURSOR); label.setCursor(c); label.setIcon(icon); JLabel strLabel = new JLabel(); String str = Integer.toString(value); strLabel.setText(str); work.add(label); work.add(strLabel); label.addMouseListener(new myListener()); return work; } class myListener extends MouseAdapter{ public void mouseClicked(MouseEvent e){ System.out.print(Sample.value++); createPanel().repaint(); setVisible(true); } } } クラス2つ目 import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class MouseAdapter implements MouseListener{ public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} }

    • ベストアンサー
    • Java
  • JAVAでの背景画像表示

    現在javaでゲームのメニュー画面を作っているのですが、ボタンを配置する所まではできたんですが、背景に画像を表示することができなくて困っています! import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Container; import java.awt.BorderLayout; import javax.swing.border.LineBorder; import javax.swing.border.EtchedBorder; import java.awt.Color; import java.awt.Container; public class Mati extends JFrame{ public static void main(String[] args){ Mati frame = new Mati(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10,650,650); frame.setTitle("街"); frame.setVisible(true); JPanel h = new JPanel(); h.setOpaque(false); ImageIcon icon1 = new ImageIcon("Mati.jpg"); JLabel label1 = new JLabel(icon1); JLabel label2 = new JLabel(); h.add(label1); } Mati(){ JButton button1 = new JButton("宿屋"); button1.setFont(new Font("Mairyo", Font.PLAIN, 30)); JButton button2 = new JButton("道具屋"); button2.setFont(new Font("Mairyo", Font.PLAIN, 30)); JButton button3 = new JButton("武器屋"); button3.setFont(new Font("Mairyo", Font.PLAIN, 30)); JButton button4 = new JButton("街を出る"); button4.setFont(new Font("Mairyo", Font.PLAIN, 30)); JPanel p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS)); p.add(Box.createRigidArea(new Dimension(10,30))); p.add(button1); p.add(Box.createRigidArea(new Dimension(5,8))); p.add(button2); p.add(Box.createRigidArea(new Dimension(5,8))); p.add(button3); p.add(Box.createRigidArea(new Dimension(5,8))); p.add(button4); getContentPane().add(p, BorderLayout.CENTER); } } ソースはこのようになっています。これからどうすれば背景画像が表示されるか教えていただきたいです。 よろしくお願いします。

  • javaのpanelが表示されません

    下記のプログラムを作ったんですが、eclipseで実行するとフレームは表示されますが、空のフレームのような状態で、panelやボタンなどは表示されません。mainとは別のクラスで作成してるからなんでしょうか?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0 { public static void main(String[] args) { new Frame0(); } } class Frame0{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • 配列に対してsetText()は使えないんでしょうか?

    こんにちは、いつもお世話になっております。 3つのラベルの配列に文字列を表示したいのですが 下記のコードをコンパイルし実行すると、 Exception in thread "main" java.lang.NullPointerException at txtest.main(txtest.java:16) というエラーが出てしまいます。(コンパイルはできる。) 「setText()」を「=new JLabel(right1)」という風に書き変えると 正しく、表示されるのですが、この方法は使いたくないのです。 何かよい方法ご存知でしたら、是非教えていただけますか? どうかよろしくお願いいたします。 import java.awt.*; import javax.swing.*; class txtest { public static void main(String[] args) { JFrame f=new JFrame(); JPanel p=new JPanel(); JLabel label[]=new JLabel[3]; label[0].setText("right1"); label[1].setText("right2"); label[2].setText("right3"); for(int i=0;i<=2;i++) { p.add(l[i]); } Container ct=f.getContentPane(); ct.add(p); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.pack(); f.setVisible(true); } }

    • ベストアンサー
    • Java
  • javaのフレームにサイズがセットされてない?

    前回、http://okwave.jp/qa/q8069621.htmlで質問しました。 回答をもとにframe.setvisible(true)をコンストラクタの最後にするとうまくいき回答を締め切ったんですが・・・。 しかし、mainメソッドにframe.setvisible(true)を書くとフレームのタイトル部分だけとなり、 サイズがセットされないまま実行したときと同じようになってしまいます。 なぜでしょう?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0{ public static void main(String[] args) { Frame0 test=new Frame0(); test.setVisible(true); } } class Frame0 extends JFrame{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • 「削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください」とコンパイルエラーになってしまいます!

    下記のソースコードをコンパイルすると 「HelloWorldSwing.java:6: JFrame にアクセスできません。 クラスファイル .\JFrame.java は不正です。 ファイルにクラス JFrame が含まれていません。 削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。 JFrame frame = new JFrame("HelloWorldSwing");」 と表示されてしまいエラーになってしまいます。 どなたか、分かる方がいましたらアドバイスください!! <HelloWorldSwing.java>--------------------------- import javax.swing.*; public class HelloWorldSwing { public static void main(String[] args) { JFrame frame = new JFrame("HelloWorldSwing"); final JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } } -------------------------------------------------

    • ベストアンサー
    • Java
  • テキストフィールドの文字をテキストエリアに表示する

    エラーも例外もないです。 但し今回の内容の"テキストフィールドに打ち込みエンターキーを文字をテキストフィールドに表示" が満たしてないですとりあえずソース乗せます mport java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class MyMemo { public static void main(String[] args) { JFrame Frame = new JFrame("課題"); Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Frame.setSize(500, 500); Frame.setLocationRelativeTo(null); Container contentPane = Frame.getContentPane(); // テキストフィールドのインスタンスを生成 final JTextField text = new JTextField();// テキストエリアのインスタンスを生成 text.addActionListener(new MyActionListener()); Frame.setVisible(true); final JTextArea Area = new JTextArea(5,0); // スクロールペインにテキストエリアを追加 JScrollPane scrollPane = new JScrollPane(Area); // パネルをコンポーネントに配置 contentPane.add(text, BorderLayout.NORTH); contentPane.add(scrollPane, BorderLayout.CENTER); Frame.setVisible(true); } static class MyActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { } } } どう文字をテキストエリアに表示したらいいのかわからなくて質問させていただきました。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 配列を関数の戻り値にする

    こんにちは、質問があります。 ラベルに関数の戻り値を表示させたいのですが うまくいきません。 良い解決方法ご存知の方いらっしゃいませんか? よろしくお願いします。 ============================================================== import java.awt.*; import javax.swing.*; class Set { int hairetsu[]=new int[3]; int[] dainyuu() { hairetsu[0]=100; hairetsu[1]=200; hairetsu[2]=300; return hairetsu; } } class return_test { String tensuu[]; public static void main(String[] args) { JFrame frame=new JFrame("確認"); JPanel panel=new JPanel(); Set ret=new Set(); tensuu=ret.dainyuu(); JLabel label=new JLabel(tensuu); panel.add(label); Container ct=frame.getContentPane(); ct.add(panel); frame.setVisible(true); frame.pack(); } }

    • ベストアンサー
    • Java

専門家に質問してみよう