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

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

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

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

Swing

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

Q&A

解決済

2回答

923閲覧

Swing、JTabbed Paneのminimizeボタンのつけかた

hood

総合スコア351

Java

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

Swing

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

0グッド

0クリップ

投稿2018/12/15 22:23

###Swing、JTabbed Paneのminimizeのつけかた
JTabbedPaneにminimizeボタン(また、maximizeボタン)をつけるには、どうすればいいのでしょうか?
具体的に、下の画像で示した場所に、"-"をつけたいのです。
イメージ説明

ネットで調べたところ、frame.setState(Frame.ICONFIED)を使えというのがありました。しかし、JTabbedPaneでは、このメソッドは使えないし、これでボタンがついてくるかも疑問です。

なにか方法はあるのでしょうか?教えていただけたら幸いです。
下にコードを示します。

java

1JTabbedPane tabbedPane_text = new JTabbedPane(JTabbedPane.TOP); 2tabbedPane_text.addTab("text", new JTextArea()); 3getContentPane().add(tabbedPane_text, BorderLayout.CENTER);

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/12/17 23:42

ただの疑問なら手を動かした方が早いです。
KSwordOfHaste

2018/12/18 11:29

そのminimizeボタンの目的はJTabbedPaneのminimizeでしょうか?それともウィンドウ全体のminimizeでしょうか?
hood

2018/12/25 01:35

回答ありがとうございます。いろいろ疲れがたまっており、返信が送れてしまいました。 ウィンドウ全体のminimizeですが、asahinaさんもおっしゃられているように、まだ私には基礎知識がなさすぎると痛感していました。すぐ質問をせず、もう少し自力でがんばってみたいと思います。 お騒がせしてすいませんでした。
guest

回答2

0

質問コメントを拝見したのでちょっと補足しておきます。

JFrame#setUndecorated(true)などとしない限り、JFrameの外側に環境依存のデコレーション(典型的にはタイトルバー)が自動的にくっついてくれます。そこにはトップレベルウィンドウ(この場合はJFrame)を閉じたりminimizeするボタンがあるはずです。少なくともWindows, Macintosh, LinuxのGNOMEウィンドウマネージャーなどではそれらのボタンがあります。またそのボタンが押されたときウィンドウを最小化するためにJava上で特に何かしなくても大丈夫です。Javaの外側の世界(ウィンドウマネージャー的なもの)がよきにはからってくれます。

いずれにせよ普通はswingコンポーネントに「ウィンドウのminimize用のボタン」を配置する必要性はないです。

一方、環境依存のデコレーションをなんらかの理由で「あえてつけたくない」ということですと話は違ってきます。「なんとかしてJTabbedPaneにminimizeボタンを配置する」方向を考えたくなるかも知れません。その方法はなくはないですが少々難易度が高く「曲芸」的なものになるかも知れません。個人的にはそういった曲芸よりは環境依存デコレーションに任せた方が素直だと思います。


ご質問のスクリーンショットを拝見するとswingの画面を構成する何らかのツールをお使いのように思えました。そのツールでは「トップレベルウィンドウに自動的に付加される環境依存のデコレーション」が編集中は表示されない仕様なのだと思います。質問者さんはその編集画面だけを見てminimizeボタンをつけようと考えてしまったのではないでしょうか?


追記: 目的がJTabbedPaneのminimizeだったことに対する追記

どうやればよいか自信ないのですが自分なりに思いつく方法は2つほどです。

  • JTabbedPaneの外観を決めるjavax.swing.plaf.TabbedPaneUIを改造(自作)する

実際のクラスはjavax.swing.plaf.metal.MetalTabbedPaneUI(WindowsでのデフォルトのUIクラス)などにありますが、これを改造してそれをJTabbedPaneのUIへ設定してやると外観や細かな機能までカスタマイズできます。ただ普通のアプリケーションで改造することは少ないでしょうから難易度が高いと思います。自力でコードを読み解かなければならないかも知れません。

  • JLayeredPane

TabbedPaneUI改造よりはずっと簡単ですが、動作は完全ではなくなんちゃってな方法です。JLayeredPaneにJTabbedPaneとJButtonを配置してJLayeredPaneのタブの高さなどに注意しつつそれらしい大きさでボタンを右上の方へ配置するのですが、JTabbedPaneは右上に何かを配置するようには設計されてませんのでタブが多くなるとminimizeボタンの裏側までタブが並んでしまうでしょう。それを許容できないならタブの領域がminimizeボタンに重ならないよう、少しばかりディープな調査が必要かも知れません。

なお、回答コメントで言っておられるEclipseのUIのように世の中にはそうした凝ったUIだってあるのでだれかがカスタムコントロールの実装記事を書いているかも知れません。そうしたものを探してみるのも有力なアプローチだと思います。

投稿2018/12/25 02:41

編集2018/12/25 03:50
KSwordOfHaste

総合スコア18394

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

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

hood

2018/12/25 03:03

とても丁寧な回答、ありがとうございます。 書き方が悪かったのですが、私は「トップレベルウィンドウをminimizeするボタン」ではなく「あるコンポーネントネントだけを最小化」させたかったのです。 例えばeclipse(eclipse自体)であれば、classを作ると、ウィンドウの真ん中にタブつきのjavaファイルが表示されます。その上部右にはminimizeボタンとmaximizeボタンがあります。それらを作りたかったのです。 ですが、eclipseはswtで作られているというのも聞いています。なので、やっぱり無理(もしくはやろうとしても裏技的になる)かなと思ったので、やはり別の対策を考えていきたいと思います。 こんな何日も前の投稿に反応してくれるなんて、kSwordofHasteさんの優しさが伝わってきて、とても温かい気持ちになりました。重ね重ねですが、どうもありがとうございました。
KSwordOfHaste

2018/12/25 03:23

> 「あるコンポーネントネントだけを最小化」 むむ・・・そうでしたか。自分はそこまで凝ったものを実装したことないので参考になることはあまり言えませんが、少しだけ追記しておきます。
hood

2018/12/26 00:09

ありがとうございます・・・・! しっかり、味わって読ませていただきます・・・!
guest

0

自己解決

すぐに質問をせず、もう少し自力でがんばってみたいと思います。おさわがせしてすいませんでした。

投稿2018/12/25 01:37

hood

総合スコア351

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問