問題タブ [custom-painting]
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 - JFrame上にあるJPanel上でのJava描画
こんにちは私はJFrameを持っていて、その上に2つのJPanelがあります。私の意図はJPanelsを利用することです。誰かがJavaコードを共有できますか?
c# - C#: スクロール可能なパネルでのカスタム ペイント スクロール
スクロール可能なパネルでスクロールバーをカスタムペイントする方法について、誰かが例を提供できますか?
前もって感謝します。
java - java.awt.Graphics.fillRect()の誤動作
以下に、オブジェクトのセットをにペイントする簡単な方法を示しjava.awt.applet.Applet
ます。これは非常に簡単だと思いましたが、最終的にはアプレットの左上隅にオブジェクトを1つのピクセルとしてペイントするだけになります。アイデアは、DisplayクラスがGameObject
、画面上の位置、サイズ、および外観に関する情報を拡張および含むかなり軽量なオブジェクトのセットを取り込み、それらをアプレットにピクセルごとに描画し、それらを比例して拡大および配置することです。指定されたディスプレイの高さと幅によって異なります。これをテストする際に、の幅と高さDisplay
を128に設定し、2つのオブジェクトをに渡しますDisplay
。これらは両方とも32ピクセルの正方形(両方ともと)で、1つは赤で、とを32
返します。getWidth()
getHeight()
24
getX()
getY()
、およびもう一方は青色で、とに16
戻りgetX()
ますgetY()
。をaに入れ、Display
ajavax.swing.JFrame
を使用しjava.awt.BorderLayout
て、フレームを確実に埋めるようにします(add(display, java.awt.BorderLayout.CENTER);
前述の範囲内で使用しますjavax.swing.JFrame
)。
私が知る限り、これは、上端と左端から16ピクセルの青い32ピクセルの正方形と、もう一方の端によって隠されているか、他の部分を覆い隠している赤い32ピクセルの正方形を苦しめているはずです。ただし、取得するのは、の左上隅にある1つの赤または青のピクセルだけDisplay
です。これは、ウィンドウがどれほど大きくても小さくても一貫しています。
コード
質問
java.awt.Graphics.fillRect(int x, int y, int width, int height)
アプレットの左上隅だけをペイントするのはなぜですか?
解決
解決策は次の行にあります
ここで、整数計算によりすべての値が0になります。解決策は次のとおりです。
qt - QGraphicsRectItemのdrawForeground
私QGraphicsRectItem
はその子供たちの上に描くための方法が必要です。いくつかの子アイテムを含むアイテムがあります。特定の高さで、子アイテムの上に線を引く必要があります。
inと同様のdrawForeground
inを実装する方法はありますか?QGraphicsItems
drawForeground
QGraphicsScene
可能であれば、子アイテムごとに線を引く必要はありません。
java - カスタムボタンの境界線の「ストレッチマーク」を削除するにはどうすればよいですか?
ボタンのGraphics2D
オブジェクトにカスタムペイントを実行すると、次の結果が得られます。
左端のボタンの切り替えが解除され、もう一方のボタンが切り替えられます。ご覧のとおり、切り替えられたボタンにはこれらの白い「ストレッチマーク」があります。なぜこれらがあるのですか、どうすれば削除できますか?
そして、これが私が境界線を描くために使用するコードです:
java - jpanelにpath2dを追加する
私はこの本当に些細なことで多くの問題を抱えています。path2dオブジェクトを取得し、それをjpanelに追加して、GUIに表示したいと思います。私が間違っていることについてのガイダンスを得ることができますか?私はこことグーグルで検索を使用しましたが、役立つものは何も見つかりませんでした。これが以前に尋ねられた場合はご容赦ください。
擬似コード:渡されるパネルはルートペインです
私はおそらく何が起こっているのかについて本当に悪い根本的な誤解を持っています。少しのガイダンスが本当に役立ちます。ありがとうございました
java - カスタム JPanel を JScrollPane の ViewportView として効率的にペイントする方法は?
のサブクラスであるJScrollPane
表示(ビューポートビューとして)があります。MyPanel
JPanel
MyPanel
をオーバーロードしてカスタム ペインティングを実装しますpaintComponent
。の表示可能なコンテンツの合計サイズは一般に非常に広く (ビューポートMyPanel
のサイズよりも 50 倍から 200 倍広いことを意味します)、 を使用して水平方向にスクロールし、下にある のさまざまなセクションを表示します。スクロール バーのつまみを使用して、 の特定の領域を手動でシークすることもできます。JScrollPane
Timer
MyPanel
MyPanel
私の実装では、現在、 を使用してビュー ポートに現在表示されているpaintComponent
部分を見つけており、ビュー ポートの位置が変更されるたびにその部分をペイントしています。MyPanel
JViewport#getVisibleRect
MyPanel
これは問題なく動作しますが、時間指定されたスクロールでは一度にビューポート幅の 1/50 しか移動しないため、表示部分のかなりの割合を何度も再描画することになります。また、通常は の水平範囲全体をスクロールすることMyPanel
になるため、少なくとも 1 回はすべてをペイントする必要があります。
MyPanel
そのため、 の内容全体を1 回だけ (? に)BufferedImage
ペイントしてから、.JScrollPane
JViewport
BufferedImage
直感的に、これはこれを処理する最も効率的な方法であり、比較的一般的な方法であるように思えます。
Swing のチュートリアルやその他の情報源を調べていると、Swing はすでにダブル バッファリングされていることがわかりました。Swing の機能とは関係なく、自分の力でこれを強制しようとすると、トリプルバッファリングになってしまうようです。
これを行うために悪用するレシピ(存在する場合)が見つかりJScrollPane
ませんでした。
利用可能な例、またはこれを行う方法についての指示はありますか (可能な場合)?
java - JFrame での描画が JPanel での描画よりも遅いのはなぜですか?
私の質問は、JFrame で直接描画する場合と比較して、JPanel で描画する場合、同じスイング カスタム ペインティング ルーチンが約 16 倍高速なのはなぜですか? ダブルバッファリングだけですか?ありえないですよね?
背景: JFrame が非表示になっている場合 (特に部分的にのみ非表示になっている場合)、カスタム ペインティングが更新されないという問題がありました。SO を検索した後、JPanel のサブクラスをブラディ NetBeans フォーム デザイナー フォームに接続する方法を見つけ出すことにしました。
同じ状況にある人のために: NetBeans では、たまたま JPanel を拡張する新しい標準クラス (JPanel フォームではない) を作成し、そこにすべてを手動でコーディングする必要があります (古き良き時代のような GUI デザイナーは必要ありません)。はぁ)。次に、標準の JPanel をフォームに追加し、サイズを設定します。次に、右クリックして「コードのカスタマイズ」を選択し、コンボボックスで「カスタム作成」を選択します...ここで、新しい javax.swing.JPanel を作成し、そのサブクラスを置き換えます。
だから...これにより、フォームに直接ではなく、「適切に実行」してコンポーネントにペイントすることができました。また、パネルのキーリスナーは、フレームのキーイベントディスパッチャーをハイジャックするよりもはるかに優れたソリューションです。
とにかく、プロファイラーは、JPanel の paintComponent() で JFrame の paint() を並置した場合とまったく同じカスタム ペイント コードがほぼ 16 倍高速に実行されることを示しています。
前もって感謝します。キース。
編集:この質問は、MISINTERPRETED METRICS に基づいています。プロファイラーは JPanel の paintComponent() メソッドを AWT-EventQueue スレッドに含めたり報告したりしませんが、私のベースライン プロファイルには JFrame の paint() メソッドが含まれています。ばかげた質問をする前に、もっと注意深く見るべきでした。私の悪い。
java - 描画が速すぎると楕円形が接続されない
滑らかな接続線を描画する必要があるアプレットを作成しています。この線で実行しています (ユーザーはペンの幅を入力しています)。
ここで、g = this.getGraphics();
少しゆっくり描いているときは良いのですが、速く描いていると単一の楕円が表示されます。この楕円を切り離す方法はありますか?