問題タブ [jviewport]
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 - 自動的にスクロールするビューフレームを表示するためにJavaSwingコンポーネントを利用する微妙な問題
私は、JavaSwingコンポーネントを使用してGUIベースのゲームアプリケーションをプログラムしようとしている最中です。基本的なフレームワークは次のとおりです。aとaJFrame
を含むA。さらに、それ自体が2つを含む2つの層を含むを含みます。(不思議なことに、この2つは、最上部の不透明でないパネルのユニットペインと、最下部の不透明なパネルの地形ペインに対応しています。)JScrollPane
JPanel
JScrollPane
JPanel
JLayeredPane
JPanels
JPanels
自動ウィンドウスクロールは、現状のプログラムの機能です。明確にするために、記述されたコードは、ウィンドウターゲットとして適切なユニットを自動的に指定し、ウィンドウ表示を前提として、そのユニットを画面の中央位置にできるだけ近く表示するように、表示されているウィンドウをスクロールします。制約。この手順が私のジレンマの原因です。ウィンドウのサイズを変更する前に行われたメソッドの呼び出しを除いて、特定のメソッドの実行では、メソッドは正しく機能します。メソッドが正しく機能しないのは、アプリケーションの最初の起動時のみです。
私のコードは長すぎてこの投稿のコンテキストで完全に投稿できないと思うので、最初はウィンドウスクロールを処理するコードのみを提供し、次に必要に応じてパブリックDropBoxアカウントに追加のコードを投稿します。
私はすでにこのメソッドのかなり堅牢なテストを完了しており、結果は次のとおりです。アプリケーションを最初に起動したとき、upLeftX
と内に保持されている値upLeftY
は両方とも-24に設定されています。これは、プログラムの実行全体を通じて一貫しています。(それぞれが負の値に設定されているのはかなり奇妙ですが、十分に管理しやすいようです。)ただし、範囲内の値scrollDest
は、プログラムの最初の起動とその後の実行の間で異なります。基本的に、発生するのは、コードが-24未満の負の整数であるscrollDest.xおよびscrollDest.yの値を取得することです。
printステートメントを含む簡単な例の実行後、次の結果が出力されました。
scrollDest.xおよびy:-800 -336
scrollDest.xおよびy:0 0
scrollDest.xおよびy:1051 2145
scrollDest.xおよびy:1051 2145
scrollDest.xおよびy:610 -312
scrollDest.xおよびy:610 0
この行は、上記のメソッドの2つのステートメントのSystem.out.println("scrollDest.x and y: " + scrollDest.x + " " + scrollDest.y);
前後の両方に配置されました。if
値は、便宜上ONEと呼ばれるユニットでのプログラムによるメソッドの最初の呼び出し、ボード上の別のユニットでのプログラムによる2番目の呼び出し、TWOを反映し、最後にメソッドの3番目の呼び出しが1回続きます。再びONEに。
この不一致は私の問題の根本または反映のいずれかであり、私はまだ問題を修正するための信頼できる方法を考案していません。
説明や詳細についての質問には喜んでお答えします。よろしくお願いします!
java - JViewportを正しく拡張する方法は?
グリッドを備えた無限の座標ボードのクラスを設計しようとしています。aを延長し、JViewport
初期位置ok(内側JScrollPane
)で描画します。どの方向にもスクロールできるスペースがあることをスクロールペインに伝えるにはどうすればよいですか?
以下は役に立ちません
アップデート
JScrollPaneがビューポートからスクロール範囲を決定する方法を知っている人はいますか?
UPDATE2
呼び出し後に最大値と最小値を設定すると、スクロールバーが機能しないように見えることがわかりましたsetVisible
。
しかし、残念ながら、paintConponent
スクロール時に呼び出されません。
なんで?
UPDATE3
スクロールバーは機能しますが、ビューポートの位置は変更されません。
なんで?
java - JScrollPane 原点の上の JScrollPane の画像原点
私はプログラミング初心者なので、これが明らかな質問である場合はご容赦ください。ただし、ガント チャートを作成するアプリケーションに取り組んでいます。
私が抱えている問題は、パネルの 1 つ (namesPanel) に関連する画像が表示されますが、上部から約 10 ピクセルが欠落していることです。描画中に y 変数の開始点に 10 ピクセルを追加することで、画像が正しく見えるようにすることができますが、これは正しくないと感じます。バグがある場合は、今すぐつぶしたいと思います。
チャートは実際には、JPanel にネストされた 3 つの異なる JScrollPanes で構成され、GridBagLayout で配置されます。
この理由は、ユーザーがマウスを使用して ganttChart をスクロールできるようにするためです。これにより、後で、namesPanel と datesPanel のスクロールバーが ganttChart と同じ JScrollBar のインスタンスに設定されます。
次に、プログラムはメモリを節約するためにすべての画像のサイズを変更します。最初にすべての画像が同じサイズに設定されているのは、最終的な画像の境界を設定するために特定のグラフィックス計算が必要なためです。グラフィックス オブジェクトを取得するイメージ。また、画像を大きくする方法がわかりません:
最後に、プログラムは実際に画像を描画します。この領域にはサブメソッドへのリファクタリングが必要であることはわかっていますが、次のとおりです。
私は困惑しています-問題の原因となっている行を見つけることができず、namesPanel の処理方法と他の処理方法との違いがわかりません。画像の配置と寸法に影響を与えるフィールドを変更しても役に立ちません。JViewport を操作することもできません。:-(
繰り返しになりますが、これが長すぎる場合は申し訳ありませんが、コードのどの領域に注目すればよいかわかりません。
java - ビューポートに適合する場合にのみJTableの自動サイズ変更を有効にする
サイズ変更可能な列を使用してJScrollPane内にJTableを作成する必要があります(ユーザーが列幅を増やすと、水平スクロールバーが表示されます)。このために私は使用していますtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
。また、ビューポートがテーブル全体を含むのに十分な幅である場合、列はビューポートの幅を満たすように引き伸ばされる必要があります。これを実現するためにgetScrollableTracksViewportWidth()
、次のようにJTableクラスのオーバーライドメソッドを使用します。
このアプローチは、1つのことを除いて、うまく機能します。最初に列のサイズを変更しようとすると、開始位置に独自の幅が返されます。列のサイズをすばやく変更してマウステーブルを離すと、引き続き正常に機能します。それで、そのような行動の理由は何ですか?getScrollableTracksViewportWidth()
falseを返してもテーブルのサイズを変更しようとするのはなぜですか?または、おそらく、そのようなサイズ変更モードを実装するためのより良いソリューションを提案できますか?
以下は、上記の問題の簡単な実例です。
java - ジオメトリ機能のコレクションをペイントしますか?
こんにちは、私の機能(特定の色のジオメトリのコレクション)をペイントしようとしていますが、このエラーが発生します:キャストされる配列リストに問題がありますが、修正する方法がありませんPLZは私を助けてくれます事前に感謝します
java.util.ArrayListは、javax.swing.AbstractButtonのcom.vividsolutions.jump.workbench.ui.plugin.specific.SearchPropertiesPlugin $ 3.actionPerformed(SearchPropertiesPlugin.java:205)のcom.vividsolutions.jts.geom.GeometryCollectionにキャストできません。 .fireActionPerformed(AbstractButton.java:1995)at javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2318)at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)at javax.swing.DefaultButtonModel.setPressed( DefaultButtonModel.java:242)at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)at java.awt.Component.processMouseEvent(Component.java:6297)at javax.swing.JComponent.processMouseEvent(JComponent .java:3275)at java.awt.Component.processEvent(Component.java:6062)atjava.awt.Container。processEvent(Container.java:2039)at java.awt.Component.dispatchEventImpl(Component.java:4660)at java.awt.Container.dispatchEventImpl(Container.java:2097)at java.awt.Component.dispatchEvent(Component.java :4488)at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575)at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)at java .awt.Container.dispatchEventImpl(Container.java:2083)at java.awt.Window.dispatchEventImpl(Window.java:2489)at java.awt.Component.dispatchEvent(Component.java:4488)atjava.awt.EventQueue。 dispatchEventImpl(EventQueue.java:668)at java.awt.EventQueue.access $ 400(EventQueue.java:81)at java.awt.EventQueue $ 2.run(EventQueue.java:627)at java.awt.EventQueue $ 2.run( EventQueue.java:625)Javaで。security.AccessController.doPrivileged(Native Method)at java.security.AccessControlContext $ 1.doIntersectionPrivilege(AccessControlContext.java:87)at java.security.AccessControlContext $ 1.doIntersectionPrivilege(AccessControlContext.java:98)at java.awt.EventQueue $ 3.run (EventQueue.java:641)at java.awt.EventQueue $ 3.run(EventQueue.java:639)at java.security.AccessController.doPrivileged(Native Method)at java.security.AccessControlContext $ 1.doIntersectionPrivilege(AccessControlContext.java:87 )at java.awt.EventQueue.dispatchEvent(EventQueue.java:638)at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)at java.awt java.awtの.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)。EventDispatchThread.pumpEvents(EventDispatchThread.java:169)at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
ここで彼は例外を取得します:
//この行で:
そして、これが必要な他の方法です:
java - JScrollPane での JComponent のスクロール
たとえば、大きな JComponent があるとします。
そして小さい JScrollPane:
下の図のように、JScrollPane に JComponent の一部を表示したいと考えています。
白い四角形は私の JScrollPane で、現在(x1,y1)から(x2,y2)までの JComponent の一部を表示しています。
それで、私は何を試しましたか:
新しい JComponent を作成しました。
JScrollPane のビューポート ビューとして配置します。
次に、JScrollPane を JFrame にアタッチしました。
そして、次の方法で可視領域を変更しようとします:
どうしたの?
java - スクロール中にjscrollpaneの左上隅に画像を残したい
JScrollpaneにJPanelがあります。JPanelに表示するBufferedImageを描画します。JScrollpaneの左上隅に、残りのJPanelを表示するために下にスクロールしても常にその隅にとどまる画像が必要です。ここで、JpanelのpaintComponentメソッドは次のとおりです。
parent.getViewPosition()でscrollPane.getViewport()。getViewPosition()を取得できます。起動すると、左上隅に赤い長方形のバッファリングされた画像が表示されます。下にスクロールすると、バッファリングされた画像の残りの部分が表示されますが、赤い長方形が上に移動してから消え、上にスクロールしても元に戻りません。コンソールでは、スクロールするとポイントpが変化することがわかります。
誰かがこの問題で私を助けることができますか?
java - スクロールした Java Mouse Position カウント領域
私はこれに良いタイトルを付ける方法を知りませんでした..しかし、ここに行きます:
JScrollPane の JViewPort に追加した MouseAdapter を使用して、ラベルをクリックしたときに正確なマウス位置を取得しようとしています。私のパネル自体は JScrollPane 内に追加されます。
そして、マウスの位置の座標を取得しようとすると、常に表示されているパネルの領域に相対的です..スクロールのために表示されていない領域はカウントされません..
私が自分自身を明確にしたかどうかはわかりません..すでにJViewPortとJScrollPaneからgetMousePositionを使用しようとしましたが、うまくいきませんでした..事前にたくさんありがとう!!
ここにいくつかのコードがあります: 内部にパネルがあるフレームの構造..
java - 内部にコンポーネントがある JScrollPane Zoom ビュー
ビューポートのビューをズームしたいが、内部のコンポーネントの位置が変わらない方法はありますか? 設定は、ビューをズームモードに変更したいだけのjscrollpane内に大きなjpanelがあることです。オブジェクトはパネル内のどこにでもドラッグ アンド ドロップできるため、xy 位置を維持することが重要です。
これが私の現在のズームコードです。私がしているのは、グラフィックスの2Dスケールを使用してビューをズームすることです。問題は、位置がめちゃくちゃなことです。また、パネル全体がjscrollpaneに収まるようにズームアウトしたいと考えています。
ビューポートの操作も考えています。これが私のビューポートの初期化です。2000 x 1000 の寸法はパネルで、750 x 698 はビューポートのエクステント サイズです。コンポーネントの位置を台無しにせずにズームする方法について何か提案はありますか? おそらく、setviewposition を移動することは解決策の一部ですか?