複数のJFrameの使用:良い習慣か悪い習慣か?[閉まっている]

539
Peddler 2012-03-05 01:53.

画像を表示し、データベースから音声を再生するアプリケーションを開発しています。GUIからデータベースに画像を追加するために別のJFrameを使用するかどうかを決定しようとしています。

複数のJFrameウィンドウを使用するのが良い習慣かどうか疑問に思っていますか?

9 answers

456
Andrew Thompson 2012-03-05 01:56.

複数のJFrameを使用するのが良い習慣かどうか疑問に思っていますか?

悪い(悪い、悪い)練習。

  • ユーザーフレンドリー:ユーザーは、1つだけが表示されることを期待しているときに、タスクバーに複数のアイコンが表示されます。さらに、コーディングの問題の副作用。
  • コーディングと保守の悪夢:
    • モーダルダイアログは、そのダイアログの内容に申し出フォーカス関心に簡単に機会を-選択/修正/これをキャンセルし、その後、続行。複数のフレームはそうではありません。
    • 親がクリックされると、親とのダイアログ(またはフローティングツールバー)が前面に表示されます。これが目的の動作である場合は、フレームに実装する必要があります。

1つのGUIに多くの要素を表示する方法はいくつもあります。例:

  • CardLayout(短いデモ。)。良い:
    1. ダイアログのようなウィザードを表示しています。
    2. コンポーネントが関連付けられているアイテムのリスト、ツリーなどの選択を表示します。
    3. コンポーネントがない場合と表示されているコンポーネントの間で反転します。
  • JInternalFrame/JDesktopPane通常はMDIに使用されます。
  • JTabbedPane コンポーネントのグループ用。
  • JSplitPane ユーザーが何をしているかによって、どちらか一方の重要度(サイズ)が異なる2つのコンポーネントを表示する方法。
  • JLayeredPane はるかに多くのよく層状のコンポーネント。
  • JToolBar通常、アクションまたはコントロールのグループが含まれます。ユーザーの必要に応じて、GUIの周りにドラッグしたり、GUIから完全に外したりできます。上記のように、そうする親に応じて最小化/復元します。
  • の項目としてJList(以下の簡単な例)。
  • のノードとしてJTree
  • ネストされたレイアウト。

ただし、これらの戦略が特定のユースケースで機能しない場合は、次のことを試してください。単一のメインを確立しJFrame、その後、持っているJDialogJOptionPaneのインスタンスは、ダイアログの親としてフレームを使用して、自由に浮動要素の残りのために表示されます。

多くの画像

複数の要素が画像であるこの場合、代わりに次のいずれかを使用することをお勧めします。

  1. JLabelその時点でユーザーが興味を持っている画像を表示するための単一の(スクロールペインの中央にある)。に見られるようにImageViewer
  2. 単一の行JList。この答えに見られるように。その「単一行」の部分は、それらがすべて同じ次元である場合にのみ機能します。または、画像をその場で拡大縮小する準備ができていて、それらがすべて同じアスペクト比(4:3または16:9など)である場合。

205
ryvantage 2013-07-31 17:33.

複数のJFrameアプローチは、Swingアプリのプログラミングを始めてから実装してきました。ほとんどの場合、私はそれ以上のことを知らなかったので、最初にそれをしました。しかし、開発者としての経験と知識が成熟し、より多くの経験豊富なJava開発者の意見をオンラインで読み、吸収し始めたので、複数のアプローチ(現在のプロジェクトと将来のプロジェクトの両方)からシフトしようとしJFrameました。 )会うためだけに...これを手に入れてください...私のクライアントからの抵抗!JInternalFrame個別のコンポーネントの「子」ウィ​​ンドウとを制御するモーダルダイアログの実装を開始すると、クライアントから不満が出始めました。ベストプラクティスだと思ったことをやっていたので、とても驚きました。しかし、彼らが言うように、「幸せな妻は幸せな人生です」。同じことがあなたのクライアントにも当てはまります。もちろん、私は請負業者なので、エンドユーザーは開発者である私に直接アクセスできますが、これは明らかに一般的なシナリオではありません。

そこで、複数のJFrameアプローチの利点と、他の人が提示したいくつかの短所について説明します。

  1. レイアウトの究極の柔軟性-個別JFrameのを許可することにより、エンドユーザーが画面の内容を広げて制御できるようになります。コンセプトは「オープン」で非収縮性を感じます。あなたが1つの大きなJFrameとたくさんのJInternalFramesに向かって行くとき、あなたはこれを失います。
  2. 非常にモジュール化されたアプリケーションに適しています-私の場合、ほとんどのアプリケーションには3〜5個の大きな「モジュール」があり、実際には互いに何の関係もありません。たとえば、1つのモジュールが販売ダッシュボードで、もう1つが経理ダッシュボードである場合があります。彼らはお互いに何も話しません。ただし、エグゼクティブは両方を開きたい場合があり、タスクバーの別々のフレームであるため、作業が楽になります。
  3. エンドユーザーが外部の資料を簡単に参照できるようにする-かつて、このような状況が発生しました。アプリに「データビューア」があり、そこから「新規追加」をクリックすると、データ入力画面が開きます。当初、両方ともJFramesでした。ただし、データ入力画面はJDialog、親がデータビューアであるようにしたかったのです。私は、変更を行った、とすぐに私は彼が最小化または閉じることができたという事実に大きく依存し、エンドユーザーからの電話受信ビューアをしておくエディタを彼がプログラム(またはウェブサイトの別の部分を参照しながら、オープン、Iドン覚えていない)。彼はマルチモニターを使用していないため、データビューアを完全に非表示にして、入力ダイアログを最初に、他の何かを2番目にする必要がありました。これはaでは不可能でしたし、aでも不可能だったJDialogでしょうJInternalFrame。私はしぶしぶJFrames彼の正気のためにそれを分離するように戻しました、しかしそれは私に重要な教訓を教えてくれました。
  4. 神話:コーディングが難しい-これは私の経験では真実ではありません。作成する任意の容易になるだろう、なぜ私は表示されませんJInternalFrame以上をJFrame。実際、私の経験では、JInternalFrames柔軟性ははるかに低くなっています。私はJFrame自分のアプリでsの開閉を処理する体系的な方法を開発しました。これは本当にうまく機能します。フレームのコード自体からほぼ完全にフレームを制御します。新しいフレームの作成、SwingWorkerなどその制御にバックグラウンドスレッドとEDT上のGUIコード上のデータの検索をね、ユーザーはそれを2回開こうとした場合、フレームのフロントに持ち込む/リストア、あなたが私の開く必要があるすべてのJFramesがありますパブリック静的メソッドopen()を呼び出し、windowClosing()イベントと組み合わせてopenメソッドが残りを処理します(フレームはすでに開いていますか?開いていませんが、ロードしていますか?など)このアプローチをテンプレートにしたので、フレームごとに実装するのは難しくありません。
  5. 神話/証明されていない:リソースが重い-この投機的な声明の背後にあるいくつかの事実を見たいと思います。おそらく、100秒を開いたとしてJFrameも、より多くのスペースが必要であると言えるかもしれませんが、実際にどれだけ多くのリソースを消費しますか?リソースが原因でメモリリークが発生することが懸念される場合:呼び出すと、フレームがガベージコレクションに使用するすべてのリソースが解放されます(繰り返しますが、aはまったく同じ懸念を呼び出す必要があります)。JInternalFrameJFramedispose()JInternalFrame

たくさん書いたので、もっと書ける気がします。とにかく、それが不評な意見であるという理由だけで私が反対票を投じないことを望みます。この質問は明らかに貴重なものであり、一般的な意見ではない場合でも、貴重な回答を提供できたと思います。

複数のフレーム/フレームごとの単一のドキュメント(SDI)と単一のフレーム/フレームごとの複数のドキュメント(MDI)の良い例は、MicrosoftExcelです。MDIの利点のいくつか:

  • 長方形ではない形状のウィンドウをいくつか持つことができます-そのため、デスクトップや他のウィンドウを別のプロセス(Webブラウザなど)から隠さないようにします
  • 2番目のExcelウィンドウに書き込んでいるときに1つのExcelウィンドウ上で別のプロセスからウィンドウを開くことができます-MDIを使用すると、内部ウィンドウの1つに書き込もうとすると、Excelウィンドウ全体にフォーカスが移り、別のプロセスからウィンドウが非表示になります
  • 異なる画面に異なるドキュメントを表示することができます。これは、画面の解像度が同じでない場合に特に便利です。

SDI(シングルドキュメントインターフェイス、つまり、すべてのウィンドウに1つのドキュメントしか含めることができません):

MDI(Multiple-Document Interface、つまり、すべてのウィンドウに複数のドキュメントを含めることができます):

53
DuncanKinnear 2013-08-30 17:36.

私が関わったばかりの例で、「ユーザーフレンドリーではない」という議論に対抗したいと思います。

このアプリケーションには、ユーザーがさまざまな「プログラム」を個別のタブとして実行するメインウィンドウがあります。可能な限り、アプリケーションをこの単一のウィンドウに維持しようとしました。

それらが実行する「プログラム」の1つは、システムによって生成されたレポートのリストを表示し、ユーザーは各行のアイコンをクリックして、レポートビューアダイアログをポップオープンできます。このビューアは、レポートの縦向き/横向きのA4ページに相当するものを表示しているため、ユーザーはこのウィンドウが非常に大きく、画面いっぱいに表示されることを好みます。

数か月前、複数のレポートを同時に開くことができるように、これらのレポートビューアウィンドウをモードレスにするようにお客様からリクエストを受け取り始めました。

これが良い解決策だとは思わなかったので、しばらくの間、私はこの要求に抵抗しました。しかし、ユーザーがこのシステムの「欠陥」をどのように回避しているかを知ったとき、私の考えは変わりました。

彼らはビューアを開き、「名前を付けて保存」機能を使用してレポートをPDFとして特定のディレクトリに保存し、Acrobat Readerを使用してPDFファイルを開き、次のレポートでも同じことを行いました。複数のAcrobatReaderが実行され、見たいさまざまなレポート出力が表示されます。

それで私は容赦し、視聴者をモードレスにしました。これは、各ビューアにタスクバーアイコンがあることを意味します。

先週彼らに最新バージョンがリリースされたとき、彼らからの圧倒的な反応は彼らがそれを愛しているということです。これは、システムに対する最近の最も人気のある拡張機能の1つです。

したがって、先に進んで、ユーザーが望んでいることは悪いことをユーザーに伝えますが、最終的には何のメリットもありません。

いくつかの注意:

  • これらのモードレスウィンドウにはJDialogを使用するのがベストプラクティスのようです
  • ModalityTypeブールmodal引数ではなくnew引数を使用するコンストラクターを使用します。これが、これらのダイアログにタスクバーアイコンを与えるものです。
  • モードレスダイアログの場合、コンストラクタにnullの親を渡しますが、それらは「親」ウィンドウを基準にして配置します。
  • Windows上のJavaのバージョン6にはバグがあります。これは、メインウィンドウが「常に一番上」になる可能性があることを意味します。これを修正するには、バージョン7にアップグレードしてください
20
Virendra Singh Rathore 2012-10-17 19:25.

jInternalFrameをメインフレームにし、非表示にします。その後、それをさらなるイベントに使用できます。

jInternalFrame.setSize(300,150);
jInternalFrame.setVisible(true);
19
Necronet 2013-03-05 14:55.

前回スイングに触れてからしばらく経ちましたが、一般的には悪い習慣です。頭に浮かぶ主な欠点のいくつか:

  • それはより高価です: DialogやJInternalFrameなどの他の種類のウィンドウコンテナよりもはるかに多くのリソースを割り当ててJFrameを描画する必要があります。

  • ユーザーフレンドリーではないくっついているJFrameの束に移動するのは簡単ではありません。アプリケーションは一貫性がなく、設計が不十分な一連のアプリケーションのように見えます。

  • JInternalFrameの使い方は簡単ですこれは一種のレトリカルですが、デスクトップとJInternalFrameのパターンですでに考えているよりもはるかに簡単で、他の人は賢く(または空き時間があります)、使用することをお勧めします。

10
Matt Dawsey 2013-01-11 00:37.

間違いなく悪い習慣。理由の1つは、すべてにJFrame新しいタスクバーアイコンが表示されるため、「ユーザーフレンドリー」ではないことです。複数JFrameのを制御すると、髪の毛がはぎ取られます。

個人的には、JFrameあなたの種類のアプリケーションにはONEを使用します。複数のものを表示する方法はあなた次第です、たくさんあります。CanvasES、 、JInternalFrameCardLayoutでもJPanel多分ね。

複数のJFrameオブジェクト=痛み、問題、および問題。

8
Lijo 2013-12-18 21:03.

複数Jframeのを使用するのは良い考えではないと思います。

代わりに、同じでJPanel複数のsを使用できます。JPanelJFrame

また、これを切り替えることができJPanelます。そのため、内のものよりも多くを表示する自由が得られますJFrame

それぞれJPanelについて異なるものをデザインすることができ、これらすべてをJPanel一度にJFrame1つずつ表示することができます。

この切り替えるにはJPanelSを使用JMenuBarしてJMenuItemsそれぞれのJPanelか「のJButton for eachJPanel`。

複数あるのJFrameは良い習慣ではありませんが、複数必要な場合でも問題はありませんJFrame

ただし、JFrame複数JFrameのを使用するよりも、さまざまなニーズに合わせて1つを変更することをお勧めします。

5
Keith Spriggs 2013-09-04 12:25.

フレームが同じサイズになる場合は、フレームを作成して、代わりにフレームを参照として渡します。

フレームを通過したら、フレームにデータを入力する方法を決定できます。それは、一連の数字の平均を計算する方法を持っているようなものです。メソッドを何度も作成しますか?

5
arunjoseph 2013-12-15 03:20.

これは良い習慣ではありませんが、使用したい場合でも、シングルトンパターンを使用することができます。私は私のプロジェクトのほとんどでシングルトンパターンを使用してきました。

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

ねえNFL、ジョーバロウとカイラーマレーは女性の権利をサポートするために少しの助けを使うことができます

ねえNFL、ジョーバロウとカイラーマレーは女性の権利をサポートするために少しの助けを使うことができます

ジョー・バロウロー対ウェイド事件の転覆に対応するNFLは、言葉を言わないことで、腹立たしいが予測可能なPRの結果でした。

別の日、別のヒンジのないLIV記者会見

別の日、別のヒンジのないLIV記者会見

(lから)パット・ペレス、ブルックス・ケプカ、パトリック・リードサウジアラビアのLIVゴルフリーグのさらに別の信じられないほどの記者会見で、スポーツのファンはブルックス・ケプカからでたらめな吐き気と質問回避の驚異的なマスタークラスを受けました。パトリックリード、ブライソンデシャンボー、パットペレス、最近のPGAツアーの脱北者。

ミズ・マーベルの家族の帰郷は悪役よりも激しく打撃を与える

ミズ・マーベルの家族の帰郷は悪役よりも激しく打撃を与える

レッドダガーとマーベルさんがチームを組んでいます。

6億7500万ドルのビットコインローンのデフォルト後にすべての資産を清算するように命じられたスリーアローズキャピタル

6億7500万ドルのビットコインローンのデフォルト後にすべての資産を清算するように命じられたスリーアローズキャピタル

暗号業界最大の沈没船の1つであるスリーアローズキャピタルは、ついにその悲惨さから解放されています。火曜日に、不良債権ヘッジファンドは、債権者からの返済を要求する訴訟の高まりに応えて、バージンアイランド裁判所によって清算を命じられました彼らが3ACに行ったローン。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

Suffragettes Indicam #3: Junho

Suffragettes Indicam #3: Junho

Mais um mês se findando — e metade do ano de 2022 já passou. Sabe o que isso significa? Não, não é hora de verificar se você está cumprindo com suas resoluções de Ano Novo.

多元宇宙—Junø

多元宇宙—Junø

チェーン間アカウントがJunoに登場します。異なるブロックチェーン間でスマートコントラクトの構成可能性と真の相互運用性を提供します。

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

1.ドラマを見た後、起業する考えはありますか?あなたのビジネスはボトルネックに遭遇しましたか?方向性がなくてわからない場合は、ドラマを追いかけて行くことを心からお勧めします。(?)ブラフではなく、最も完璧なビジネス例を隠すドラマがあります。2.ブレイキング・バッドとその弁護士ドラマ「ブレイキング・バッド」を見た友人たちは、演劇の中で、穏やかな表情で、弁護士のソウル・グッドマンに深く感銘を受けなければなりません。口を開けて、感覚の弱い傭兵の性格を持っています。道徳の面で、サル・グッドマンは無意識のうちに劇に欠かせない役割を果たし、彼自身のシリーズ「絶望的な弁護士」(ベター・コール・ソール)を生み出しました。ウェントウのテキストとビデオは、劇中のソウル・グッドマンのテレビコマーシャルです。製品(サービス)、競争戦略、市場ポジショニング、ブランド名、ターゲット顧客グループ、コミュニケーション軸から広告まで、サル・グッドマンの役割のビジネス設定は、「最低」と見なすことができる超超超超超超完全です。ブランドコミュニケーションのコスト」「変化」のモデル。なぜ?私の分析をご覧ください。3.ソウル・グッドマンの「事業戦略」1.基本情報ブランド名:Saul Goodman製品:法律相談サービス対象顧客:麻薬中毒、飲酒運転、事故など。法律知識の欠如は、一般的に公立弁護士にしか余裕がなく、真面目な弁護士も「特別な法律を持つ消費者」を避けます。恐れてはいけない「​​ニーズ」。コミュニケーションの主軸:この国のすべての男性、女性、子供は有罪判決を受けるまで無実だと思います。地域:アルバカーキ市スローガン:Thrallに電話したほうがいいです!(ベター・コール・ソール)広告:2つの可能性のある犯罪状況をシミュレートします+サウルの主張+サウルのスローガン2をより適切に呼び出します。

メインネットガイド— Arbitrum Odyssey Week 2

メインネットガイド— Arbitrum Odyssey Week 2

最新のアップデートを受け取るために私たちに従ってください。ニュースレター:https://www。

Language