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

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

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

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

Swing

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

Q&A

解決済

2回答

2112閲覧

JButtonの画面を消す・ダイアログを指定のボタンで開く

mmatt

総合スコア5

Java

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

Swing

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

0グッド

0クリップ

投稿2021/04/09 08:14

編集2021/04/09 08:28

質問が2点あります。
どちらもJボタンに関してのことです。

1
現状は、Aframeで (if(e.getsource()==Button)Bframe.setVisible(true))
の処理をおこなって、Bframeを表示している状態です。
そこで、Bframeの閉じるボタン(B_toziru)を押して
Bframeを非表示・破棄したいです。
イメージ的には(JFrame.DISPOSE_ON_CLOSE)の感じです。

下記に自分が書いたコードを記載します。
Bframe.setVisible(false)では非表示になりませんでした。
ネット等で調べましたが、エラー等もでないので原因が分かりません。

使用するメソッドが違うのか、文の書き方が違うのか、ご教授お願いします。

Java

1public void actionPerformed(ActionEvent e) { 2 BFraem f =new BFrame(); 3 if(e.getSource()== B_toziru);{ 4 f.dispose(); 5 }

2
Bframe内で閉じるボタン(B_toziru)とファイルの参照ボタン(B_sannsyou)が2つあります。
参照ボタンを押すとJFileChooserメソッドのダイアログを表示したいのですが、
現状では閉じるボタンを押しても、参照ボタンを押しても、
どちらでもダイアログが開いてしまいます。

エラーは出力されず原因がわかりません。
上記と同様で、ご教授お願いします。

下記のコードは現状、私が書いたコードになります。

Java

1public void actionPerformed(ActionEvent e) { 2 if(e.getSource() == B_sannsyou); 3 JFileChooser();} 4 5public void JFileChooser() { 6 JFileChooser fc = new JFileChooser(); 7 fc.setDialogTitle("フォルダーの参照"); 8 fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 9 10 int selected = fc.showSaveDialog(this); 11 if (selected == JFileChooser.APPROVE_OPTION){ 12 File file = fc.getSelectedFile(); 13 txtCusersmasamdesktop.setText(file.getName());14

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

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

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

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

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

guest

回答2

0

1の解決方法
swingのJFrameクラスの作成時、自動生成されるmainクラスに
BFrame frame= new Bframe();
がrunメソッド内にありましたが、これをmainクラスから外に出し、下記のように記述しました。
private static BFrame frame= new Bframe();

どこからでも参照できるようにし、下記のコードで非表示にはできました。

public void actionPerformed(ActionEvent e) { //戻るボタンの設定 if (e.getSource() == B_toziru) { Bframe.frame.setVisible(false);}      }

Aframeクラスの(if(e.getsource()==Button)Bframe.setVisible(true))を
(if(e.getsource()==Button)Bframe.main(null);
に修正しました。

2の解決方法
共通のactionPerformedで振り分けが出来なかったため、回答者さんのURLを参考に
ボタンごとに書きなおしました。

投稿2021/04/13 01:23

mmatt

総合スコア5

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

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

0

ベストアンサー


BFraem f =new BFrame(); が不要です。
この f は2つめのまだ表示されていない Bframe 画面です。
オジェクト指向では、new するごとに、いくつでも分身画面ができてしまうのです。
閉じるべき画面は
「Aframeで (if(e.getsource()==Button)Bframe.setVisible(true))」
した f です。newしたとき f をインスタンス変数に代入しておいて、それを閉じればOK。


両ボタンとも、同じactionPerformedにきてしまっているからです。
ActionListener、actionPerformed をボンタごとに記述するか、
あるいは、共通でいくならactionPerformedで振り分ける、です。

こちら様[Let'sプログラミング]のサイトがわかりやすいかと思います。
両方のやり方がのってます。
https://www.javadrive.jp/tutorial/event/index1.html
https://www.javadrive.jp/tutorial/event/index2.html

投稿2021/04/09 10:36

FromMZ1500

総合スコア496

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

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

mmatt

2021/04/12 05:15

回答ありがとうございます。 <<new するごとに、いくつでも分身画面ができてしまうのです。 知らなかったです、勉強になりました。 <<newしたとき f をインスタンス変数に代入しておいて インスタンス変数や参照の仕方を勉強中でして、上記の意味が理解できていません。。 fは既にインタンス変数になっているのでは、ないでしょうか? 詳細な説明して頂ければ、ありがたいです。 <<共通でいくならactionPerformedで振り分ける これの通り下記コードで試してみたのですが、質問時と同様で、ボタンの区別が出来ていないようです。 if (e.getSource() == B_toziru) { System.out.println("a");  こちらはテスト用で出力aにしています。 }else if(e.getSource() == B_sannsyou);{ JFileChooser(); コンソール結果はaと出力され、ダイアログも開いてしまいます。 なにかお気づきの点ありましたら、再度ご教授お願いします。 現在、下記の方法を試しています。 <<ActionListener、actionPerformed をボンタごとに記述するか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問