問題タブ [jlayeredpane]
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 - 既存の JPanels の上に JLayeredPane で描画する
私はチェスゲームの開発に取り組んでいます。ボード コンテナで GridLayout を使用して JPanels の 8x8 グリッドを表示したいと考えています。(これにより、選択した正方形や有効な動きを強調表示するなどの機能がはるかに簡単になります。) 次に、このレイヤーにピースを追加して、ドラッグ アンド ドロップできるようにしたいと思います。最初は個々の正方形の JPanels に描画して表示していましたが、後でドラッグ アンド ドロップしようとすると問題になると考えました。それ以来、JLayeredPane をメイン コンテナとして使用しようとしてきましたが、いくつかの問題が発生しました。
1 つは、JLayeredPane の GridLayout を指定すると、JLabel またはその他の種類の画像を追加するレイヤーを指定するために使用する整数に関係なく、ピースがグリッドに追加され、位置が設定され、歪むことです。ボード全体。LayoutManagers を使用すると、JLayeredPane でのレイヤーの配置が妨げられる可能性があることを読んだので、これはそれほど驚くべきことではありません。(ただし、JLayeredPane チュートリアルの Oracle デモ プログラムはこれをうまく行っているようです: http://download.oracle.com/javase/tutorial/uiswing/examples/components/LayeredPaneDemo2Project/src/components/LayeredPaneDemo2.java )
ただし、JPanels のグリッドを独自の JPanel に配置してから、それを JLayeredPane の下位レイヤーに追加しようとしました。ドラッグ アンド ドロップ アイコンを追加して、不透明でない JPanel を上位レイヤーに分離できるという考えです。 JLayeredPane のレイヤー。ただし、これを行うと、単にグリッド JPanel を JLayeredPane 内に配置した後 (つまり、ドラッグ アンド ドロップ レイヤーを追加する前) に、グリッドが表示されなくなります。
また、JLayeredPane の paintComponent (およびペイント) メソッドをオーバーライドしてピース画像を描画しようとしましたが、それらは JPanel によって隠されています (JPanels を非不透明に設定することで、それらが実際にそこにあることがわかります)。 JLayeredPane でグラフィックスのレイヤーを設定するオプションがないことがわかります。また、フレームのglassPaneを使用してピースを描画しようとしましたが、そこでも望ましくない動作が発生しました。
この動作の一部、またはどこが間違っているかを説明する助けがあれば、大歓迎です!
java - JLayeredPaneでJPanelにフォーカスを取得します
私はJLayeredPane
2つの層を持っています
最初のレイヤーはJPanel
ラッピングImage
です。JPanel
2番目のレイヤーは、ResizableRectangleと呼ばれる拡張され、を実装する別のオブジェクトKeyListener
です。
メソッドをオーバーライドしましたKeyPressed
が、イベントを受信せずkeyPressed
、メソッドが呼び出されません。
を設定しsetFocusEnable(true)
て使用grabFocus()
しましたがrequestFocus()
、requestFocusInWindows()
すべてfalseを返します。
JFrameがロードされた後にTabキーを押すFocus
と、必要なパネルに移動し、リスナーがイベントを取得することがわかりました。
にを追加しましたKeyListener
がJLayeredPane
、正常に動作しますが、layeredPaneではなくパネルにリスナーを追加したいという問題があります。
java - JLayeredPaneでのGridBagLayoutの使用
私は、JPanelの右上にある種の小さなフローティング「ウィジェット」を配置しようとしています。これは固定サイズのコンポーネントです。役立つ場合は、Googleマップの一種のビューでコンパスを考えてみてください。
JLayeredPaneはすべてのレイヤーに1つのレイアウトマネージャーしか使用しないことを認識しているため、GBLの使用は成功すると考えました。-右上(1、0)ボックスを非常に小さくし、そこにウィジェットを配置します-コンテンツパネルの幅を大きくします/高さ2
しかし、実験した後、GBLはそれらがオーバーラップするときにいくつかのコンポーネントを削除するようです。
誰かがこの行動を偽造する方法を提案できますか?
java - 既存のコンポーネントのすぐ下の JLayeredPane にコンポーネントを配置するにはどうすればよいですか?
JTextField があり、そのすぐ下に JLayeredPane に配置された JLabel を表示したいと考えています (後で自動提案に使用します)。
JLabel を JTextField のすぐ下の JLayeredPane に配置するにはどうすればよいですか?
ここに私が持っているいくつかのコードと、現在の結果が下のスクリーンショットに示されています:
2 回目の試行:
java - JLayeredPane内のJScrollPaneは再描画されませんか?
これは非常に単純なことかもしれませんが、私は完全に混乱しています。
ペインをスクロールすると、上のものJScrollPane
がまったく再描画されません。JLayeredPane
JLayeredPane
ここでは、青い四角がまったく再描画されないことを示す小さな例を示します。
レイヤード ペインの仕組みを完全に誤解していませんか?
何か案は?
java - JScrollPane で JLayeredPane を表示する
このコードは、scrollPane 内の波形を表示します。
そして、これはscrollPaneの灰色の背景だけを示しています:
波形(Waveform extends JPanel)が表示されない理由がわかりません。詳細は次のとおりです。
そして出力:
java - JLayeredPane の使用時にコンパイラ エラーが発生している場所がわからない
そのため、最後の質問 (「Java で画像を重ねる方法がわかりません」) で、レイアウト マネージャーと JLayeredPane を利用するように親切にアドバイスされました。しかし、デモを調べて独自のコードを作成した後、なんと 34 個のコンパイラ エラーが発生しました。コンパイラ エラーは一貫して "" であるため、インポートに問題がある可能性があります。ただし、LayeredPane Demo からインポート リストを正確にコピーしました。もう一度、私は困惑しています。また、事前にアドバイスをくださった方に感謝します。
java - コンポーネントの階層化 Java Swing、ホバーで表示されるレイヤー
同じコンテナー内で2 つJPanel
の s を重ねて配置しています。と を使用container.add(jpanel, 0);
してcontainer.add(otherjpanel, 1)
います。正常に動作しますが、最上層を表示するには、マウスでコンポーネントにカーソルを合わせる必要があります。
これが私の問題を示す実行可能コードです。
画面の上部にマウスを合わせるだけです。
java - JLayeredPane でカスタム コンポーネントが描画されない
Javaで学校のプロジェクトを作成しています。何をしようとしているのか: GUI の一部として JScrollPane があり、JLayeredPane (「MapPane」としましょう) が含まれています。MapPane には国の地図 (下部) が含まれており、これはアイコン付きの JLabel です。これはうまく機能し、MapPane はスクロール可能で、すべて問題ありません。
ここで、クラス SpatialElement を拡張するカスタム グラフィック要素をさらに追加します。
すべての要素はクラス SpatialElement を拡張します (簡略化):
たとえば、要素 Polygon は (簡略化して) 次のようになります。
したがって、ユーザーが新しいグラフィック要素を追加すると、メソッドaddSpatialElement
が呼び出されます ( 内MapPane
):
コードがシンプルで十分に説明的であることを願っています。問題は、新しく作成されたコンポーネントが MapPane (拡張された JLayeredPane) に追加されても、要素が描画されないことです。最初に、間違った境界 (updateBounds メソッドで計算) が原因であると考えましたが、問題ありません。
MapPane に追加した後に直接呼び出すとelement.repaintComponent(getGraphics())
、要素が描画されますが、MapPane とのやり取り (ウィンドウのサイズ変更など) の後、MapPane が再描画されるため、オブジェクトは再描画されません。
サイズ変更時に MapPane に含まれているすべてのコンポーネントを強制的に再描画する方法は? MapPane のデフォルトの paintComponent メソッドをオーバーライドする必要がありますか (そのため、オブジェクトを繰り返し処理し、それぞれに対して repaintComponent() を呼び出します)。
または、それを行う方法がそれほどトリッキーではない、より良い解決策がありますか?
アドバイスありがとうございます。