問題タブ [nimbus]
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 - Java: How do I override a method of a class dynamically (class is eventually NOT in classpath)?
How do I call a method of a class dynamically + conditionally?
(Class is eventually not in classpath)
Let's say, I need the class NimbusLookAndFeel
, but on some systems it's not available (i.e. OpenJDK-6
).
So I must be able to:
- Get to know it that class is available (at runtime),
- If it's not the case, skip the whole thing.
- How do I manage to override a method of a dynamically-loaded class
(thus creating an anonymous inner sub-class of it)?
Code example
EDIT:
Now I edited my code, as it was suggested, to intercept NoClassDefFoundError
using try-catch. It fails. I don't know, if it's OpenJDK's fault. I get InvocationTargetException
, caused by NoClassDefFoundError
. Funny, that I can't catch InvocationTargetException
: It's thrown anyway.
EDIT2::
Cause found: I was wrapping SwingUtilities.invokeAndWait(...)
around the tested method, and that very invokeAndWait
call throws NoClassDefFoundError
when loading Nimbus fails.
EDIT3::
Can anyone please clarify where NoClassDefFoundError
can occur at all? Because it seems that it's always the calling method, not the actual method which uses the non-existing class.
java - javaのsetOpaque()
NimbiusがsetOpaque()を他のJavaLaFとは異なる方法で処理する理由を誰かが説明できますか。通常は透過的であるコンポーネントはもはや透過的ではないため、コードが壊れています。
編集:問題はJTextAreas(私が必要としているものです)または同様のコンポーネントのみを扱っているようです。
編集編集:これは実際のアプリケーションの画面です。trashgodのソリューションを適用しても、背景が透けて見えません。
編集編集編集:
paint()をオーバーライドするためにtrashgodの提案を試しました。私はこれで何時間も苦労しました、そしてそれを動かすことができませんでした。背景が透けて見えるようにすることはできましたが、JinternalFrameを移動したり、サイズを変更したり、テキストを選択したりすることができませんでした。super.paint(g)を呼び出すと、解決策を解決できませんでした。私が行方不明になっているかもしれないこれを行う簡単な方法はありますか?
私はこれに新しいアプローチを取りました。JInternalFrameの内部には、JLayeredPaneがあります。
レイヤー0-JLabel
レイヤー1-JTextArea
JInternalFrameが移動またはサイズ変更された場合:
- 自分自身を見えなくする
- コンテナ内のどこにあるかをスクリーンショットで撮ります
- 撮影した画像でJLabelをペイントします
- 自分自身を再び表示します。
JInternalFrameをまったく透過的にすることができなかったので。その透明性をシミュレートしました。唯一の問題は、これに関連する多くのオーバーヘッドがあることです。何かご意見は?
java - Nimbus 設定後に GUI を戻す
Javaが初めてで、何をしても修正できないように見える問題があるため、どんな助けも大歓迎です。
Java で小さなアプリケーションを作成し、Nimbus のルック アンド フィールを使用するポップアップ カレンダー (WWW) を統合しました。私の問題は、ポップアップ カレンダーが初めて呼び出された後、GUI で同じルック アンド フィールを取得できないことです。私には2つの選択肢があります。私のGUIが以前と同じように設定をリセットしてポップアップへの呼び出しが行われるようにする方法を見つけるか、すべてのGUIがニンバスのルックアンドフィールを使用するように場所(メインクラス)がわからないコードを入力します。
ポップアップカレンダーのコードはこちら
または、すべての GUI に Nimbus のルック アンド フィールを持たせるコードをどこに挿入しますか?
java - メインで Nimbus のルック アンド フィールを設定する方法
私はJavaを学んでいますが、まだこの小さな問題を解決できていません。
ポップアップ カレンダーは Nimbus のルック アンド フィールを使用していますが、Java のルック アンド フィールを使用するパネルとコンテナ Jtables があります。すべての GUI 画面/ウィンドウで Nimbus のルック アンド フィールを使用しようとしています。Merky は、メインに次のコードを配置して、後続のすべての画面に Nimbus のルック アンド フィールを持たせることを提案しましたが、それを機能させることができません。このコードをどこにどのように配置すればよいでしょうか?
java - Nimbusのルックアンドフィールをグラフィカルにカスタマイズするためのツール
数ヶ月前に使った道具を探していますが、名前が思い出せません。
これは、NimbusSwingのルックアンドフィールをカスタマイズするためのグラフィカルツールです。ウィンドウの右側には、サンプルのSwingコンポーネントのセットがあり、左側には、カスタマイズ可能なすべてのプロパティのリストがあります(の結果と同じですUIManager.getDefaults()
)。このツールを使用すると、プロパティの値(色、フォント、整数値)を変更し、結果をリアルタイムで右側に表示できます。
このツールでは、変更をファイル(カスタマイズされた値を設定するJavaコード)にエクスポートすることもできます。
プログラム全体がたった1つの大きなJavaファイルだったことを覚えています。そして、このツールは別のプロジェクトの一部だったと思います(ただし、ツールはスタンドアロンです)。
java - ルックアンドフィールのミキシング
これまでのところ私はこれを持っています
メインのルックアンドフィールをニンバスにしようとしていますが、タイトルの境界線をウィンドウに変更します。
私の国境はこれです:
できますか?もしそうなら、誰かが私にどこを見ればいいのか教えてもらえますか?私は今とても混乱しています。:\
ありがとう。
java - JTree ライン スタイルと Nimbus
Nimbus のルック アンド フィールを使用しています。このリンクによると、JTree で 3 つの異なる線スタイルを実現できるはずです。
次のコードを使用している間:
私の JTree は次のようになります。
「水平」スタイルではなく、「なし」スタイルです。なぜこれが考えられるのでしょうか?Nmbusと関係がありますか?そのプロパティを設定した後、何か特別なものを呼び出す必要がありますか?
ありがとう
java - javax.swing.plaf.synth.SynthContext.getPainter での NullPointerException
私が取り組んでいる Java Swing プログラムでは、以下の例外が引き続き発生します。これはランダムなタイミングで発生し、再現性にはほど遠いものです。通常、時間通りにアクションイベントがトリガーされないこと以外に問題が発生することはないようですが、通常、この例外の後でも問題は発生しません。その発生には一貫性がないようです。誰にでもアドバイスはありますか?ニンバスLAFを使用していることに言及する必要があります。
java - Enterキーを押したときにNimbus L&Fを変更してデフォルトボタンをアクティブにする方法は?
Nimbus L&F で Enter キーを押すと、ボタンにフォーカスがある場合、別のボタンが次のようにデフォルトとして設定されているかどうかに関係なく、そのボタンがクリックされます。
また、キーバインディングを使用しても機能しません:
「Got Here」メッセージすら表示されませんが、「P」などの別の KeyStroke にバインドすると、期待どおりに機能します。そのため、このイベント ハンドラーに到達する前に Enter キーがキャプチャされているように見えます。
UIDefaults の変更も試みました。
それも失敗しました。これを達成する方法はありますか?
---アップデート---
さらに調査した結果、JButton の InputMap には {"pressed Enter": "pressed", "released ENTER": "released"} (および SPACE のバインド) が含まれていることが明らかになりました。問題のコンポーネントのキー バインディングは、RootPane よりも優先されます。問題を解決するコードについては、以下の私の回答を参照してください。
java - Swing 内で発生する不要な再描画をデバッグする方法
開発中の Swing アプリで再描画を行うと、奇妙な問題が発生します。特定のコンポーネントのテキスト (ウィンドウの一番下にあるステータス バーのテキスト ラベル) を設定すると、画面の非常に異なる領域にあるテーブル全体が再描画されるように指示されていることがわかりました。基本的にステータスバーのテキストを設定するたびにウィンドウ全体を再描画するように求められているように見えるため、パフォーマンスの問題が発生しています。
何が起こっているのかを把握しようとして RepaintManager をさまよい、このテキストのラベルを設定しようとすると、メインの JPanel 全体がダーティ コンポーネントとしてマークされていることがわかりました。ただし、どの時点でそれが発生しているのか、正確にはなぜそれが発生しているのかをデバッグするのに問題があります。再描画システムについて調べてみましたが、他のテキスト ラベルが設定されているときに重複しないテーブルを再描画する必要がある理由がわかりません。
Swing Explorer を使用して、レイアウトの境界線を視覚化して、異常な方法でオーバーラップしていないことを確認しました。すべて問題ないように見えます。
JTable に再描画を要求している一連の呼び出しを特定する方法を探しています。paintComponent() にブレークポイントを追加してスタックをたどると、RepaintManager の paintDirtyRegions() 呼び出しの内部に行き着き、メインの JPanel 全体 (ウィンドウ内のすべてを含む) が tmpDirtyComponents 変数内に置かれます。
最初に単一のステータステキストラベルを設定しただけで、JPanel全体がダーティとしてマークされる方法を誰か説明できますか? そうでない場合は、エラーを見つけるためにどこにフックするかについて、いくつかのガイダンスを提供していただけますか?
ご協力いただきありがとうございます。