問題タブ [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 - JTable は最初の可視行を取得します
Swing JTable があります。これは大きく、ユーザーは上下にスクロールして、作業したいデータの行を表示できます。ユーザーがスクロールを停止したときに、ユーザーが最初に表示できる JTable の行番号を知りたいです。これを使用して、ユーザーが追加の操作を行った後、テーブル内のこの位置にスクロールして戻りたいと思います (スクロール部分を実行する方法を知っています - 最初に表示される行を取得して困惑させます)。
java - JViewport.setView でのキャッチ不能なエラー
大規模なアプリの外部でエラーを再現できないため、SSCCE を提供できません。
しかし、ここにスニペットと出力があります:
出力は次のとおりです。
その後、プログラムは vp.setView(P) でフリーズしているように見えます。次の writePaneln が呼び出されないためです。
ただし、エラーもトラップされません....
ここに writePaneln (完全を期すため)
編集1
java.util.timer で invokeLater を使用するように変更しました。
java - JTabbedPane 内で JScrollPane を作成するにはどうすればよいですか?
JTabbedPane のタブの 1 つに JScrollPane を作成しようとしています。私はこれがうまくいくとは思っていたものを試しました:
ここで、ペインは JTabbedPane で、scrollPane は JScrollPane です。これにより、単に upgradesScreen タブが削除されました。私はこれを期待していましたが、他に何をすべきかわかりませんでした。それを理解するためにさらにコードが必要な場合は、教えてください。そうでない場合は、助けてくれてありがとう!
java - ビューポートの changelistener が複数回呼び出されるのはなぜですか
ビューポートがあり、変更リスナーをアタッチしました。ビューポートをスクロールするたびに、変更リスナーが約 4 回呼び出されます。これを回避する方法がわかりません。呼び出しを 1 回だけにしたいのですが?
java - JScrollPane 内の JTable モデルのすべての可視行を取得する方法
これまでのところ、JScrollPane の JViewPort オブジェクトを使用して、ある時点で特定の行を取得する方法を知っています。
JViewport.getMinimumY() と JViewport.getMaximumY() の間のすべての行を取得する方法を理解するのに苦労しています。これらの 2 つのビューポート ポイント間のすべての行項目を収集する方法はありますか、または JScrollPane ビューですべての行を取得する方法はありますか?
java - JScrollPane および JViewport の最大サイズがコンテンツより小さいスクロール制限
私は をJFrame
含むを持ってJScrollPane
いJPanel
ます。JPanel
にはたくさんのsJTextArea
が含まれています。私はそれらに大量のテキストをロードしています (約 8k-10k 文字)。
スクロールは少し遅れますが、レイアウトは問題なく動作します。
本当の問題は、32767 という厳しいサイズ制限があるように見えることです。そのため、JPanel
それより大きくなると、それ以上スクロールしてテキストの最後の 1/3 を表示することができなくなります。JScrollPane
JViewport
JTextArea
以下に、問題の最小限の例を示します。NetBeansJFrame
デザイナを使用したので、少し長くなるかもしれませんが、デフォルトから変更した唯一の点は、JTextArea
が の直接の子でありJPanel
、スクロールバー ポリシーであり、フォント サイズがわずかに大きいことです。
これを実行して一番下までスクロールすると、カウントが 10 000 に達すると予想されますが、1637 にしかならず、次の行の一番上のピクセルがほとんど表示されていないことがわかります。
私はすでに、 、setMaximumSize
およびsetSize
を試しましたが、何も変わりませんでした。また、1 万行のテキストがあり、そのうちのいくつかは表示するのに十分なほどスクロールできるにもかかわらず、メソッドとメソッドが元の値を返すことにもやや混乱しています。JPanel
JScrollPane
JViewport
getRows()
getSize()
JTextArea
32767 より大きいスクロール可能オブジェクトが必要な場合、この状況を処理する正しい方法は何ですか?
jscrollpane - setViewPosition() が呼び出されるたびに JViewport の再検証を回避できますか?
JViewport のサブクラスを使用して、カスタム スクロール ビューの問題をデバッグしていました。カスタム LayoutManager の layoutContainer() メソッドからいくつかの情報を出力していましたが、サイズ変更をトリガーすることなく、継続的に呼び出されていることがわかりました。ソースを調べたところ、呼び出しごとに JViewport.setViewPosition() が再検証されているように見えました。ありえないと思いました。そこで、標準の JScrollPane を使用して別のプロジェクトに戻り、次のコードを追加しました。
これにより、標準バージョンにも同じ問題があることが証明されました。これを回避する堅牢で受け入れられている方法はありますか? JViewport サブクラスのいくつかのインスタンスを使用して、JViewport.setViewPosition() を使用してリアルタイムでスクロールする波形やその他のものを表示し、10 ミリ秒ごとに (毎回まったく同じように) コンテナーを配置するのは非常に非効率的です。JViewport をサブクラス化してこれをオーバーライドすることはできますが、ビューの位置を変更するためだけに再検証が必要であると考えられた理由を理解することで、新たな問題の発生を回避することができます。現在、なぜこれが必要なのか、私は困惑しています。
したがって、当然の疑問は、「JViewport.setViewPosition()」が再検証を引き起こすのはなぜですか? ということです。
java - JScrollPane で JPanel を取得する
私は JScrollPane を持っていて、JPanel を JScrollPane に入れました。JPanel は可変量の JLabel を保持します。
これが私がそれを「新しい」方法です:
それらの JLabel を別のクラスで取得するにはどうすればよいのでしょうか? 次のコードを試しましたが、ClassCastException が発生して機能しません。そのクラスでは、JScrollPane の取得に成功し、scrollPane を使用してそれを表します。
実際、声明では:
ClassCastException がスローされます。
助けてくれてありがとう:)