問題タブ [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.

0 投票する
2 に答える
21079 参照

java - JFrame上にあるJPanel上でのJava描画

こんにちは私はJFrameを持っていて、その上に2つのJPanelがあります。私の意図はJPanelsを利用することです。誰かがJavaコードを共有できますか?

0 投票する
0 に答える
5811 参照

c# - C#: スクロール可能なパネルでのカスタム ペイント スクロール

スクロール可能なパネルでスクロールバーをカスタムペイントする方法について、誰かが例を提供できますか?

前もって感謝します。

0 投票する
1 に答える
947 参照

java - java.awt.Graphics.fillRect()の誤動作

以下に、オブジェクトのセットをにペイントする簡単な方法を示しjava.awt.applet.Appletます。これは非常に簡単だと思いましたが、最終的にはアプレットの左上隅にオブジェクトを1つのピクセルとしてペイントするだけになります。アイデアは、DisplayクラスがGameObject、画面上の位置、サイズ、および外観に関する情報を拡張および含むかなり軽量なオブジェクトのセットを取り込み、それらをアプレットにピクセルごとに描画し、それらを比例して拡大および配置することです。指定されたディスプレイの高さと幅によって異なります。これをテストする際に、の幅と高さDisplayを128に設定し、2つのオブジェクトをに渡しますDisplay。これらは両方とも32ピクセルの正方形(両方ともと)で、1つは赤で、とを32返します。getWidth()getHeight()24getX()getY()、およびもう一方は青色で、とに16戻りgetX()ますgetY()。をaに入れ、Displayajavax.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になります。解決策は次のとおりです。

0 投票する
1 に答える
661 参照

qt - QGraphicsRectItemのdrawForeground

QGraphicsRectItemはその子供たちの上に描くための方法が必要です。いくつかの子アイテムを含むアイテムがあります。特定の高さで、子アイテムの上に線を引く必要があります。

inと同様のdrawForegroundinを実装する方法はありますか?QGraphicsItemsdrawForegroundQGraphicsScene

可能であれば、子アイテムごとに線を引く必要はありません。

0 投票する
2 に答える
413 参照

java - カスタムボタンの境界線の「ストレッチマーク」を削除するにはどうすればよいですか?

ボタンのGraphics2Dオブジェクトにカスタムペイントを実行すると、次の結果が得られます。

ここに画像の説明を入力してください

左端のボタンの切り替えが解除され、もう一方のボタンが切り替えられます。ご覧のとおり、切り替えられたボタンにはこれらの白い「ストレッチマーク」があります。なぜこれらがあるのですか、どうすれば削除できますか?

そして、これが私が境界線を描くために使用するコードです:

0 投票する
1 に答える
338 参照

java - jpanelにpath2dを追加する

私はこの本当に些細なことで多くの問題を抱えています。path2dオブジェクトを取得し、それをjpanelに追加して、GUIに表示したいと思います。私が間違っていることについてのガイダンスを得ることができますか?私はこことグーグルで検索を使用しましたが、役立つものは何も見つかりませんでした。これが以前に尋ねられた場合はご容赦ください。

擬似コード:渡されるパネルはルートペインです

私はおそらく何が起こっているのかについて本当に悪い根本的な誤解を持っています。少しのガイダンスが本当に役立ちます。ありがとうございました

0 投票する
1 に答える
2158 参照

java - カスタム JPanel を JScrollPane の ViewportView として効率的にペイントする方法は?

のサブクラスであるJScrollPane表示(ビューポートビューとして)があります。MyPanelJPanel

MyPanelをオーバーロードしてカスタム ペインティングを実装しますpaintComponent。の表示可能なコンテンツの合計サイズは一般に非常に広く (ビューポートMyPanelのサイズよりも 50 倍から 200 倍広いことを意味します)、 を使用して水平方向にスクロールし、下にある のさまざまなセクションを表示します。スクロール バーのつまみを使用して、 の特定の領域を手動でシークすることもできます。JScrollPaneTimerMyPanelMyPanel

私の実装では、現在、 を使用してビュー ポートに現在表示されているpaintComponent部分を見つけており、ビュー ポートの位置が変更されるたびにその部分をペイントしています。MyPanelJViewport#getVisibleRect

MyPanelこれは問題なく動作しますが、時間指定されたスクロールでは一度にビューポート幅の 1/50 しか移動しないため、表示部分のかなりの割合を何度も再描画することになります。また、通常は の水平範囲全体をスクロールすることMyPanelになるため、少なくとも 1 回はすべてをペイントする必要があります。

MyPanelそのため、 の内容全体を1 回だけ (? に)BufferedImageペイントしてから、.JScrollPaneJViewportBufferedImage

直感的に、これはこれを処理する最も効率的な方法であり、比較的一般的な方法であるように思えます。

Swing のチュートリアルやその他の情報源を調べていると、Swing はすでにダブル バッファリングされていることがわかりました。Swing の機能とは関係なく、自分の力でこれを強制しようとすると、トリプルバッファリングになってしまうようです。

これを行うために悪用するレシピ(存在する場合)が見つかりJScrollPaneませんでした。

利用可能な例、またはこれを行う方法についての指示はありますか (可能な場合)?

0 投票する
2 に答える
1296 参照

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() メソッドが含まれています。ばかげた質問をする前に、もっと注意深く見るべきでした。私の悪い。

0 投票する
4 に答える
99 参照

java - 描画が速すぎると楕円形が接続されない

滑らかな接続線を描画する必要があるアプレットを作成しています。この線で実行しています (ユーザーはペンの幅を入力しています)。

ここで、g = this.getGraphics();

少しゆっくり描いているときは良いのですが、速く描いていると単一の楕円が表示されます。この楕円を切り離す方法はありますか?

img: http://i42.tinypic.com/1536x04.png