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

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

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

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

Swing

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

Q&A

解決済

1回答

2265閲覧

java Swing での画面の消去が反映されない

sk_linux

総合スコア13

Java

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

Swing

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

0グッド

0クリップ

投稿2019/08/04 15:07

編集2019/08/05 14:32

前提・実現したいこと

Java Swingで、問題を出すアプリケーション(画面遷移の練習用)を作成しているんですけれど、画面を消去することができないので困ってます。

回答してほしいこと

  • どのコードを入れれば、画面が消去されてまっさらな状態にできるんですか?
  • そのコードはどのような意味(役割)を持っているか解説してほしいです。

該当のソースコード

java

1import java.awt.FlowLayout; 2 3import javax.swing.JButton; 4import javax.swing.JFrame; 5public class Frame { 6 7 public static void main(String[] args) { 8 JFrame JF = new JFrame("testタイトル"); 9 JF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 10 JF.setSize(700, 800);// サイズ 11 JF.setLayout(new FlowLayout()); 12 JButton JB1 = new JButton("問題解説"); 13 JButton JB2 = new JButton("問題追加"); 14 JButton JB3 = new JButton("問題出題"); 15 JF.add(JB1); 16 JF.add(JB2); 17 JF.add(JB3); 18 JB1.addActionListener( e -> { 19 JF.removeAll(); 20 }); 21 22 JB2.addActionListener( e -> { 23 }); 24 JF.setVisible(true); 25 26 } 27} 28

###わからないところのオブジェクト(ここで画面の消去をしています)

java

1 2 JB1.addActionListener( e -> { 3 JF.removeAll(); 4 });

補足情報(FW/ツールのバージョンなど)

java version 12 build 12+33
windows 10

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

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

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

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

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

jimbe

2019/08/04 15:48

どのオブジェクトのことでしょう.
sk_linux

2019/08/05 09:25 編集

JButton1の処理のところです。ご指摘ありがとうございます
jimbe

2019/08/05 12:58

問題解読ボタンを押したら, そのボタンを含め全てのボタンが消えるということですか. どのような意味があるのでしょう. 画面遷移の練習でしょうか.
sk_linux

2019/08/05 14:32

画面遷移の練習ですね。ご指摘してくださり、ありがとうございます。
jimbe

2019/08/05 16:12

画面遷移であれば, ngsvx さんの言われるように別途パネルを作ってその上にボタン等を配置し, そのようなパネルを複数作って, それらを表示(非表示)にすることで切り替えるのが基本です. その切り替えも, 例えば自由に各パネル間を移動できるようにするのであれば JTabbedPane を利用できますし, ページをめくるようなイメージであれば CardLayout を利用する等, 個々にパネルの表示/非表示を切り替えなくても済むものがありますので, それらの利用を検討されては如何でしょうか.
sk_linux

2019/08/06 10:51

確かにそうすればできますね…ありがとうございます!
guest

回答1

0

ベストアンサー

とりあえずの解決策

JF.removeAll();

JF.getContentPane().removeAll();

としてみて下さい。

お勧めの方法

ただし、今後のことを考えると、フレームに直接コンポーネントを追加するのではなく、

JPanelを用意し、そこにボタン等を配置し、そのJPanelをフレームに追加するという方法が

いいと思います。

その方が画面の切り替えをしたい時など、応用が利きやすくなります。

投稿2019/08/04 15:52

ngsvx

総合スコア287

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

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

sk_linux

2019/08/05 09:25

すみません、お尋ねしたいんですけど getContentPane()ってどんな意味があるんですか? ご存知であれば、教えてくださると幸いです
ngsvx

2019/08/05 13:56

JFrameは、数種類の透明な平面を持っています。 そのうち、通常使う平面をコンテントペインというのですが、 getContentPane()は、このコンテントペインを取得するためのものです。 本来JFrameにコンポーネントを追加するには、 Container contentPane = jframe.getContentPane(); contentPane.add(new JLabel("ABC")); という手順で行わなければならないのですが、(確かJAVA5から?)これでは面倒だということで、 jframe.add(new JLabel("ABC)); でも同じことになるようになりました。 手順が簡素化されても、やっていることはコンテントペインへの追加です。 で、jframe.removeALl()ですが、apiドキュメントを見る限り、 このメソッドは先のようにコンテントペインに対する操作に修正されていないようです。 従って期待する結果にはならないと推測します。 そのため、コンテントペインに対し、直接操作する方法として、先の例をあげました。
sk_linux

2019/08/05 14:42

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問