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

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

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

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

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

Swing

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

Q&A

解決済

2回答

201閲覧

javaについて。このプログラムでラベルとボタンが表示されません。

momijimomikko

総合スコア1

JFrame

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

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

Swing

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

0グッド

0クリップ

投稿2025/02/15 22:07

編集2025/02/16 10:26

実現したいこと

・黒い背景と、画像を表示される

前提

・開発環境はVCcodeです。
・中学生で独学で学んでいます。
・webなどから参照したコードではありません。
・javaをはじめて1ヶ月ほどです。コードがきたないですが、ご了承ください

発生している問題

・フレーム以外何も表示されません

該当のソースコード

・javaです

import javax.swing.*; import java.awt.*; public class A { public static void main(String[] args) { B b = new B(); b.AB(); } } class B extends JFrame{ void AB() { JFrame f = new JFrame("GAME"); f.setBounds(0,0,1200,700); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); JLabel l1 = new JLabel("label1"); JLabel l2 = new JLabel("label2"); ImageIcon icon1 = new ImageIcon("./img/ShootingHome1.png"); l1.setBounds(100,100,1000,300); l2.setBounds(0,0,1200,700); l2.setOpaque(true); l2.setBackground(Color.BLACK); l1.setIcon(icon1); JPanel p1 = new JPanel(); p1.setBounds(0, 0, 1200, 700); p1.setLayout(null); p1.add(l2); p1.add(l1); Container contentPane = getContentPane(); contentPane.add(p1); f.setVisible(true); } }

実行結果
イメージ説明

試したこと

・特にないです。問題点がわかりませんでした

補足情報

・VCcode使用
・jdk-21.0.6.7-hotspotです。

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

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

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

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

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

jimbe

2025/02/16 06:14

コードのご提示にはコードのマークダウン(```で上下を囲む)をご利用ください。 通常の文として書いてしまうと、 * 等が他のマークダウンと解釈されて消えたりしてしまいます。
momijimomikko

2025/02/16 10:27

申し訳ございません。初めての投稿だったので、これからは修正します。ありがとうございました!
jimbe

2025/02/16 14:34

編集ありがとうございます。
momijimomikko

2025/02/17 07:41

こちらこそ、教えていただきありがとうございました。 これからは気を付けるようにします。
guest

回答2

0

クラス B は JFrame クラスを継承していますから(class B extends JFrame { ... })、新たに JFrame クラスのインスタンスを作成する必要はない様に思います。(JFrame f = new JFrame("GAME"); 部分)

以下のコードではクラス A のコンストラクタで表示処理を行う様にしています。

java

1import javax.swing.*; 2import java.awt.*; 3 4class A extends JFrame { 5 public static void main(String[] args) { 6 new A(); 7 } 8 9 A() { 10 setTitle("Game"); 11 setBounds(0, 0, 1200, 700); 12 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 13 setLocationRelativeTo(null); 14 15 JLabel l1 = new JLabel("label1"); 16 JLabel l2 = new JLabel("label2"); 17 l1.setBounds(100, 100, 1000, 300); 18 l1.setForeground(Color.WHITE); 19 l2.setBounds(0, 0, 1200, 700); 20 l2.setForeground(Color.WHITE); 21 l2.setBackground(Color.BLACK); 22 l2.setOpaque(true); 23 24 ImageIcon icon1 = new ImageIcon("./img/ShootingHome1.png"); 25 l1.setIcon(icon1); 26 27 JPanel p1 = new JPanel(); 28 p1.setBounds(0, 0, 1200, 700); 29 p1.setLayout(null); 30 p1.add(l1); 31 p1.add(l2); 32 // p1.setComponentZOrder(l1, 0); 33 add(p1); 34 35 setVisible(true); 36 } 37}

投稿2025/02/16 01:14

melian

総合スコア20905

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

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

momijimomikko

2025/02/16 10:36

回答ありがとうございます。 ベストアンサーは別の方を選ばせていただきましたが、こちらの回答も非常に参考になりました。 べつのところでも生かせるようにします。 ありがとうございました!
guest

0

ベストアンサー

どのオブジェクトを表示するのかをキチンと把握する必要があります。
B は JFrame を継承していますが実際に表示されるのは B では無く B.AB() 内で作成(JFrame f = new JFrame("GAME");)している JFrame です。(なので B の extends JFrame は消したほうが良いです。)
従って各コンポーネントはこの f に設定しなければなりませんが、 JPanel p1 を載せる際に

java

1 Container contentPane = getContentPane(); 2 contentPane.add(p1);

としてしまっており、これでは contentPane は B のコンテンツペインです。
前述のように実際に表示されるのは f ですので、

java

1 Container contentPane = f.getContentPane(); 2 contentPane.add(p1);

とする必要があります。


ついでに余計なお世話ですが、いくら初心者とはいえ公開する(ことになった)コードに A とか B とかいうクラス・メソッド名はテキトウ過ぎです。
"コードがきたない" と思われたのでしたら、整理しましょう。汚い所為でバグが見え難い場合もあります。
整理するなら、処理内容毎では無く対象オブジェクト毎にするほうがオブジェクト指向的にやり易いと思います。(個人の見解です。)

java

1 JLabel l1 = new JLabel("label1"); 2 JLabel l2 = new JLabel("label2"); 3 4 ImageIcon icon1 = new ImageIcon("./img/ShootingHome1.png"); 5 6 l1.setBounds(100,100,1000,300); 7 l2.setBounds(0,0,1200,700); 8 9 l2.setOpaque(true); 10 l2.setBackground(Color.BLACK); 11 12 l1.setIcon(icon1);

java

1 JLabel l1 = new JLabel("label1"); 2 l1.setBounds(100, 100, 1000, 300); 3 l1.setIcon(new ImageIcon("./img/ShootingHome1.png")); 4 5 JLabel l2 = new JLabel("label2"); 6 l2.setBounds(0, 0, 1200, 700); 7 l2.setOpaque(true); 8 l2.setBackground(Color.BLACK);

投稿2025/02/16 06:28

編集2025/02/16 08:12
jimbe

総合スコア13286

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

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

momijimomikko

2025/02/16 10:35

回答ありがとうございます。 無事、解決しました! あと、これからはクラス、メソッドの名前は気を付けるようにします。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.33%

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

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

質問する

関連した質問