複数の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

Reba McEntire は、彼女が息子の Shelby Blackstock と共有する「楽しい」クリスマスの伝統を明らかにしました:「私たちはたくさん笑います」

Reba McEntire は、彼女が息子の Shelby Blackstock と共有する「楽しい」クリスマスの伝統を明らかにしました:「私たちはたくさん笑います」

Reba McEntire が息子の Shelby Blackstock と共有しているクリスマスの伝統について学びましょう。

メーガン・マークルは、自然な髪のスタイリングをめぐってマライア・キャリーと結ばれました

メーガン・マークルは、自然な髪のスタイリングをめぐってマライア・キャリーと結ばれました

メーガン・マークルとマライア・キャリーが自然な髪の上でどのように結合したかについて、メーガンの「アーキタイプ」ポッドキャストのエピソードで学びましょう.

ハリー王子は家族との関係を修復できるという「希望を持っている」:「彼は父親と兄弟を愛している」

ハリー王子は家族との関係を修復できるという「希望を持っている」:「彼は父親と兄弟を愛している」

ハリー王子が家族、特にチャールズ王とウィリアム王子との関係について望んでいると主張したある情報源を発見してください。

ワイノナ・ジャッドは、パニックに陥った休暇の瞬間に、彼女がジャッド家の家長であることを認識しました

ワイノナ・ジャッドは、パニックに陥った休暇の瞬間に、彼女がジャッド家の家長であることを認識しました

ワイノナ・ジャッドが、母親のナオミ・ジャッドが亡くなってから初めての感謝祭のお祝いを主催しているときに、彼女が今では家長であることをどのように認識したかを学びましょう.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

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

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

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

オーケーグッド770HPランボルギーニセンテナリオは十分に正気ではない

オーケーグッド770HPランボルギーニセンテナリオは十分に正気ではない

ランボルギーニの創設者であるフェルッチオランボルギーニが100歳になるのは毎日ではありません(そうです、彼は死んでいて、まだ死んでいると思います。

彼らが買った1台の車からAppleの車の計画について私たちが推測できること

彼らが買った1台の車からAppleの車の計画について私たちが推測できること

Appleが自動車分野に参入するという噂はかなり前から渦巻いており、AppleウォッチャーがSixtyEight Researchという会社がAppleの自動車研究開発のシェル会社である可能性が高いと判断したとき、その渦巻きは本当に渦巻いた。また、会社が購入した車は1台だけであることが知られており、その車はAppleが何を考えているかについての手がかりでいっぱいになる可能性があることも伝えています。

天文学者は太陽系の9番目の惑星の新しい証拠を見つけます

天文学者は太陽系の9番目の惑星の新しい証拠を見つけます

太陽系の外側にある架空の大きな物体である惑星Xの探索は、何十年にもわたって人間を魅了してきました。その検索の最新の章は、地球の10倍の大きさで、公転周期が15であるほど遠くにある惑星を指しています。

キャムニュートン、ゴッドダム

キャムニュートン、ゴッドダム

カムニュートンは昨日、簡単な265ヤードと3回のタッチダウンでファルコンズを引き裂き、別の素晴らしいゲームをしました。その日のハイライトは、上のタッチダウンスローでした。これは、視聴するたびにばかげているだけです。

米国のフィギュア スケートは、チーム イベントでの最終決定の欠如に「苛立ち」、公正な裁定を求める

米国のフィギュア スケートは、チーム イベントでの最終決定の欠如に「苛立ち」、公正な裁定を求める

ロシアのフィギュアスケーター、カミラ・バリエバが関与したドーピング事件が整理されているため、チームは2022年北京冬季オリンピックで獲得したメダルを待っています。

Amazonの買い物客は、わずか10ドルのシルクの枕カバーのおかげで、「甘やかされた赤ちゃんのように」眠れると言っています

Amazonの買い物客は、わずか10ドルのシルクの枕カバーのおかげで、「甘やかされた赤ちゃんのように」眠れると言っています

何千人ものAmazonの買い物客がMulberry Silk Pillowcaseを推奨しており、現在販売中. シルクの枕カバーにはいくつかの色があり、髪を柔らかく肌を透明に保ちます。Amazonで最大46%オフになっている間にシルクの枕カバーを購入してください

パデュー大学の教授が覚醒剤を扱った疑いで逮捕され、女性に性的好意を抱かせる

パデュー大学の教授が覚醒剤を扱った疑いで逮捕され、女性に性的好意を抱かせる

ラファイエット警察署は、「不審な男性が女性に近づいた」という複数の苦情を受けて、12 月にパデュー大学の教授の捜査を開始しました。

コンセプト ドリフト: AI にとって世界の変化は速すぎる

コンセプト ドリフト: AI にとって世界の変化は速すぎる

私たちの周りの世界と同じように、言語は常に変化しています。以前の時代では、言語の変化は数年または数十年にわたって発生していましたが、現在では数日または数時間で変化する可能性があります。

SF攻撃で91歳のアジア人女性が殴られ、コンクリートに叩きつけられた

犯罪擁護派のオークランドが暴力犯罪者のロミオ・ロレンゾ・パーハムを釈放

SF攻撃で91歳のアジア人女性が殴られ、コンクリートに叩きつけられた

認知症を患っている 91 歳のアジア人女性が最近、47 番街のアウター サンセット地区でロメオ ロレンゾ パーハムに襲われました。伝えられるところによると、被害者はサンフランシスコの通りを歩いていたところ、容疑者に近づき、攻撃を受け、暴行を受けました。

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

メリック・ガーランドはアメリカに失敗しましたか?

バイデン大統領の任期の半分以上です。メリック・ガーランドは何を待っていますか?

メリック・ガーランドはアメリカに失敗しましたか?

人々にチャンスを与えることは、人生で少し遅すぎると私は信じています。寛大に。

Language