問題タブ [java-canvas]
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 - キャンバス形状モデルの継承と構成?
次のモデルでは、継承または構成のどちらを使用しますか。
canvas
それぞれがデータオブジェクトを表すオブジェクトを描画したい- ステートマシン図のように考えてください。
Ellipses
表現しStates
、それらの間をLines
表現connections/transitions
します。オブジェクト表現自体は決して変更されません。つまり、aState
は常に。で示されますellipse
。ただし、ellipse
描画方法は異なる必要があります。たとえば、選択の場合は色を変え、ドラッグする場合はアルファチャネルなどを使用する必要があります。
設計の観点から、anellipse
はではなく、state
aline
はではありませんtransition
。とにかく、両方のオブジェクトを組み合わせて、それらをaに収集し、すべてのオブジェクトList<Shape>
で実行できるようにするのが適切です。shape.draw()
現在、2つの設計モデルが可能ですが、2つのクラスは常に同じであると考えています。
継承:
設計の観点からは、aはではrectangle
なく、State
astate
はではありませんがfigure
、描画コンテキストに関しては、これは実行可能である可能性があります。shapes
、描画などの処理に必要なもののほとんどを継承できたからです。
または構成:
したがって、Rectangle
+Line
は私のオブジェクトのラッパーになります。
長方形と線はむしろ状態と遷移を拡張するべきですか、それともそれを含むべきですか?
または、私が見なかった3番目のデザインオプションもあるかもしれません。あなたのアイデアを楽しみにしています。
java - キャンバスの外へのクリック
私は Pong プログラムを作成しており、すべてを描画し始める開始ボタンがあり、文字通りボールを転がします (しゃれは大歓迎です)。とにかく、開始ボタンを押すと、キャンバス上のどこかでマウスをクリックして優先順位を付けない限り、パドルを移動するためのキー リスナーは機能しません。ユーザーが煩わされることなく、キャンバス上で自動的に「クリック」するコードはありますか? 前もって感謝します。
ところで、これは awt を実行しています。スイングを学ばなければならないことはわかっていますが、スイングをすることはできませんでした。
java - テキストやラベルではなく、グラフのアフィン変換
この投稿は、私が質問した答えへのスイートです: Transforming a shape
ここに私が欲しい画像があります:
テキストが回転されていることがわかるように、単純なプログラムが生成する画像を次に示します。横書きのテキストが欲しい:
キャンバスは、描画を行うためにスケーリング、移動、回転されるため、テキストは水平方向に表示されず、フォント サイズを大幅に縮小する必要があります (1.4)。プログラムは Java (awt と JavaFX) で書かれていますが、問題は言語や技術に関連していないため、どんな提案も歓迎します。
簡単なプログラムは次のとおりです。
最初の画像 (目標) を表示するために使用されるプログラムでは、2 つのキャンバスを使用します。最初のキャンバスは拡大縮小、変換、回転されてテキストなしで描画され、2 番目のキャンバスはラベルを水平に描画するためだけに使用java.awt.geom.AffineTransform
され、座標を計算するために使用されます。最初のキャンバスに表示されるアイテムと一致するようにします。両方のキャンバスが重ねて表示され、透明になっています。
java - キャンバスをクリアして再利用するか、新しいオブジェクトを作成しますか?
私のセットアップ:
GWT Canvas
重いアルゴリズムに依存するいくつかのグラフィックを表示する があります。オブジェクトはドラッグ可能であるため、ドラッグ時に、ドラッグされたオブジェクトの横にあるすべてのものを一時的なキャンバスに保存し、これをドラッグ コンテキストの背後の画像として再利用します。
私の質問: 私のドラッグ キャンバスは再利用された Canvas オブジェクトであり、ドラッグを開始する前に静的コンテキストを保存する前に最初にクリアする必要があります。「新しいキャンバス オブジェクトを作成する」よりも「再利用してクリアする」方がよいのではないでしょうか。
どう思いますか?
毎回キャンバスをクリアする:
...または新しいオブジェクトを作成します:
java - ペイントメソッドを呼び出すとJavaが画面をクリアします - それを回避する方法は?
Java で Canvas に 2 つの線を描画しようとしており、2 つのメソッドを別々に呼び出していますが、2 つ目の線を描画すると、最初の線が消えます (Java が画面をクリアします)。どうすればそれを回避できますか? 2本の線が見たいです。ユーザーがマウスを使用して線を描画し、一方の線が描画されると、もう一方の線が消えないペイント チュートリアル (Windows 上のペイントのようなプログラムの作成方法) を見たことがあります。paint メソッドを呼び出すだけで、画面はクリアされません。
誰かが私を助けることができれば、私は感謝します。ありがとう。
クラスを見る
メインクラス
java - 配列の各要素を線として表す方法
このアプリケーションは、1 つの配列をソートします。行の等しい値によって変更された現在のアイテムを表現したい。メソッド「run()」で現在のアイテムを描画するためのペイント メソッド (または描画) をどこに置くかわかりません。
最終的には、次のようにしたいと考えています。
この配列 Arr[]={4,3,5,2,1} をキャンバスに描画するには:_ _ _ __ ___
(メソッドの 1 つを使用して並べ替えられたベクトルの 1 つを使用して並べ替えられた Arr)
1 2 3 4 5
java - 「canvas = Holder.lockCanvas();」、Android Java を使用すると、canvas が null になります
私は今、Android Javaに戻ってきて、以前に作成したテンプレートに従って簡単なゲームを作成していました(成功しました)。私の「キャンバス」を定義しようとすると、Holder.lockCanvas(); 「null」値を返しています(コマンド自体が失敗している可能性があります)。次のようにして、サーフェスが有効かどうかを既に確認しています。
必要に応じて残りのコードを以下に示します。問題は、クラス実行の下部にあります。
お時間をいただきありがとうございます。