問題タブ [swing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Swing/AWTオブジェクトの「実際の」高さ/幅を見つける
Canvas3Dには親フレームを使用して動的にサイズ変更する機能がないため、ユーザーがウィンドウのサイズを変更してから自分で手動でサイズ変更するタイミングを追跡できるようにしたいと思います。(これがCanvas3Dをクラッシュさせることになった場合、一部のドキュメントが示唆しているように、ユーザーがウィンドウのサイズを変更したときに、単に破棄して再作成します)。この手順の一部には、最初にコンテナパネルの大きさを正確に伝えることができることが含まれます。
私が試した2つの方法:
物事を正確に報告していないようです。getHeight()
常にゼロでありgetPreferredSize()
、実際にはパネルの実際のサイズとは関係のない数値を返します。
何か案は?
編集:それで、私はデバッガーをパネルオブジェクトに持って行き、オブジェクト以外のプロパティを手動で調べましたが、幅/高さに似たものは何も見つかりませんでした。確かに、私が見なかったサブオブジェクトがあります。また、高さ/オブジェクトを照会するときに、ウィンドウが表示されている必要がありますか(オブジェクトとインターフェイスしている時点では表示されていません)?
編集2:つまり、SwingクラスはAWTクラスのサブクラスなので、それらの高さ/幅を見つけることができれば、アプローチは一般化されると思います。それに応じてタイトルを修正しました。
java - Webstart アプリケーションで明示的に System.exit() を呼び出す必要がありますか?
最近、Swing アプリケーションを Webstart に変換しました。プロセスは非常に簡単でしたが、すべてのウィンドウを閉じた後、アプリケーションの JVM が終了しないことがわかりました。スレッド ダンプは、いくつかの非デーモン スレッド、特に Swing の EDT、AWT、およびいくつかの websart 関連のスレッドがあることを示しました。
使用される実際の戦略は、各ウィンドウが作成されるときにカウンターを増やし、閉じるときにカウンターを減らすというものです。デフォルトのクローズ操作は DISPOSE_ON_CLOSE です。カウンターがゼロになったら、すべてのスレッドプールを停止し、すべての JNI リソースを解放します。
Bat ファイル (同じ JAR) からアプリケーションを起動すると、すべてのウィンドウが閉じられたときに正常に終了したため、問題は Webstart に関係していると考えました。
今質問:
- 正確に何が起こっているのか誰か教えてもらえますか? Webstart がゾンビ JVM を残すのはなぜですか?
- JVM を停止せずに Webstart リソースを明示的に解放する方法はありますか?
- System.exit() を呼び出すと、リソースを解放せず、後でクリーンアップするために OS に依存するというずさんな慣行が助長されるという意見を常に持っていました (後でコードを再利用すると、厄介な驚きにつながる可能性があります)...私は何かを逃していますか?
アプリが Webstart によって起動されたかどうかを検出するためのフォローアップの質問も参照してください。
java - JDialog を画面の中央に配置するにはどうすればよいですか?
JDialog を画面の中央に配置するにはどうすればよいですか?
java - Swing コンポーネントのオープンソースの改善または置換
私は Swing を使用して多数のデスクトップ Java アプリケーションを開発しています。Swing は非常に強力ですが (コツをつかめば)、高度なコンポーネントをすぐに利用できるようにしてほしいと思うケースがまだたくさんあります。
たとえば、次のような使いやすいコンポーネントを見たいと思っています (自分で作成する必要はありませんが、十分な時間があればできます)。
- 複線ラベル
- Windows ファイル エクスプローラーのようなアイコンまたはサムネイル ビュー
- ドロップダウン ボタン (Firefox の古い [戻る] ボタンのような)
- 5 つ星評価ウィジェット
- 自動履歴付きのコンボ ボックス (Google のテキスト フィールドのようなもの)
- Outlook スタイルのアコーディオン スタイルのバー
- 等々
JXTableの本拠地である SwingLabs や JXDatePicker など、無料の Swing コンポーネントのソースをいくつか知っています。
Java 自体に含まれているものを超えて、Swing コンポーネントはどこに行きますか?
java - カスタム swing コンポーネント - ノードをテキストに変換する
私はカスタムのスイング コンポーネント (まったく新しいものですが、JTree または JList を考えてください) を作成しています。一貫性を保つために、JTree、JTable、JList などの一般的な設計に従おうとしています (また、さまざまな貧弱なサードパーティ コンポーネントが分離可能なモデルやレンダラーのアプローチを放棄しているのを見てきました)。
したがって、ノード、コンポーネント自体、およびレンダラーでいっぱいのモデルがあります。ある時点で、ノードをテキストに変換し、レンダラーで表示する必要があります。これを行う最善の方法がわかりません:
- ノード自体を (オブジェクトとして) レンダラーに渡し、レンダラーに表示方法を決定させます。
- これが JList のやり方です。
- テキストを変更するためだけに、カスタマイズされたレンダラーが必要です。
- ノードの表示方法を非常に柔軟に設定できます (テキストである必要さえありません)。
- ノード自体を (オブジェクトとして) レンダラーに渡しますが、コンポーネント クラスには convertValueToText() メソッドがあります。
- これが JTree のやり方です。
- レンダラーは以前と同じように柔軟にすることができます -この方法を使用する必要はありません。
- テキスト変換を変更するには、コンポーネントをオーバーライドする必要があります。
- 上記と同様ですが、convertValueTotext() をモデルにデリゲートします。
- これが JXTable のやり方です。
- モデルはおそらくこのメソッドに最適な場所であり、そこでオーバーライドする方が簡単です。
テキストを変更するためだけにレンダラーをカスタマイズする必要はありませんが、モデルに表示される文字列を表示する以上のことを行うためにレンダラーをカスタマイズできるようにしたいと考えています (そうでなければ、レンダラーを気にする必要があります)。JXTable がリフレクションを使用してモデル内の convertValueToText() を検索するという事実が本当に気に入りません。これは悪い魔法の匂いがします。
Swing のこの見過ごされがちな部分に光を当てることができる人はいますか?
解決
私がやったことはこれでした:
- 指定されたノードの文字列を返すメソッドをモデルに追加します。重要なのは、レンダラーが何をすべきかを知っている必要があること、または単に有用なものを提供できないことを示すために、これを null にすることができることです。
- コンポーネントには同じメソッドがあり、呼び出しをモデルに渡します。これは、ビュー モデルの分離にとって重要です。レンダラーはこのメソッドを呼び出すため、モデルと直接対話しません。
- デフォルトのレンダラーは上記のメソッドを呼び出し、それが null でない場合はそれを使用します。
これにより、開発者は、表示された値をオーバーライドしたい場合に選択肢が残ります。デフォルトのレンダラーがこのテキストを表示することを認識して、null 以外の戻り値でメソッドをオーバーライドします。- 実際のノード オブジェクトが渡されるカスタム レンダラーを提供して、必要に応じて「賢い」ことを実行できるようにします。
私はとても満足しています - それは正しく「感じ」、機能し、使いやすいです。
あなたの視点をありがとう!
java - その場でJFrame内のJPanelを変更するにはどうすればよいですか?
簡単に言うと、いくつかのコンポーネントを含む JFrame で構成される単純な Java swing アプリがあります。コンポーネントの 1 つは JPanel であり、ユーザーのアクションで別の JPanel に置き換えられることを意図しています。
それで、そのようなことをする正しい方法は何ですか?私はもう試した
しかし、これはうまくいきません。何を提案しますか?
java - How to reduce space between JCheckboxes in GridLayout
コンテナJCheckboxes
のレイアウトJPanel
をGridLayout(3, 1, 1, 1)
. プログラムを実行すると、JCheckBox 間の垂直方向のスペースが大きすぎます。1ピクセル以上のように見えます。レイアウト内の JCheckbox 間の垂直方向のスペースを 1 ピクセルに設定したので、これらの JCheckbox 間の垂直方向のスペースを減らすにはどうすればよいでしょうか?
ありがとう。
java - Java (Swing) を使用してタイトルバーの高さを取得するにはどうすればよいですか?
私はMouseEvent
Javaで取得しています。このgetPoint()
メソッドは、タイトル バーの高さを座標の y 部分に追加しています。
y 値を正しい量だけオフセットするために、現在のウィンドウのタイトル バーの高さをどのように見つけることができるのか疑問に思っていました。
java - Java Swing アプリケーションの OSX への移植性
最近、いくつかのテキスト フィールドとボタンを備えた非常に基本的な Java Swing プログラムを作成しました。このプログラムは、Java 1.5 を使用する Ubuntu で問題なく動作します。しかし、OSX (10.4) で実行しようとすると、メイン ウィンドウは正しく表示されますが、プログラムは応答しないようです。どのボタンをクリックしても、何も起こらないようです。
私は Mac OSX についてほとんど何も知らないので、間違っている可能性はありますか?
java - JDialog に合わせて JPanel のサイズを変更する
JDialog
の一連の を含む がJPanels
ありますCardLayout
。これらのパネルの一部には、 のJTables
サイズ変更に合わせてサイズ変更したいものが含まれていJDialog
ます。これを達成する方法がわかりません。どんな助けでも大歓迎です。
現在、テーブルは単に現在のサイズのままであり、スケーリングされません。単純なものだと確信していますが、必要な正確なアプローチを見つけるのに苦労しています。
よろしくお願いします。必要に応じて、さらに情報を提供します。
編集:JDialog
はウィザードとして使用されるため、一度に 1 つのパネルしか表示されないため、 を使用しCardLayout
ます。理想的には、これをレイアウト マネージャーのままにしておきたいと思いますが、それが問題の原因である場合は、明らかに再考します!