問題タブ [tablecellrenderer]
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 の列のサイズを変更できるようにする
幅を動的に変更するテーブルを作成しています。また、列も時間ごとに追加します。そして、このテーブルをスクロールペインにバインドしました。ここでは、JTable で自動サイズ変更を false に設定しています (そうしないと、最初から領域全体が塗りつぶされます)。
また、cellrenderer を使用してセルに画像を追加しています。ここで、ユーザーがこのテーブルの列のサイズを変更できるようにする必要があります。
何か案が?
java - JTableの行の背景色を変更します
3列のJTableがあります。私はTableCellRenderer
このように3つの列すべてにを設定しました(多分あまり効果的ではありませんか?)。
はgetTableCellRendererComponent()
、各行の背景色がランダムなコンポーネントを返します。
プログラムの実行中に背景を他のランダムな色に変更するにはどうすればよいですか?
swing - セルレンダラー使用後に行選択機能が無効になりました
私は明らかに何か間違ったことをしている。私の推測はコンポーネントですが、ここに問題があります。これは私のセルレンダラーです:
これが私のパネルでの設定方法です。
問題は、このレンダラーを設定すると、行が選択できなくなることです。表示する必要があるものを表示するには、別のコンポーネントを使用する必要がありますか?基本的に、0/1の値をNo/Yesの値として表示しています。
java - JTable CellRenderer が常に実行されているのはなぜですか?
//初心者の質問
ほとんど基本的なセルレンダラーを備えた JTable があります (線の色が異なります)。テーブルで何もしていない場合でも、画面に表示される行に対してセル レンダラーが常に実行されていることに気付きました。
それが本来あるべき姿ですか?各セルを一度レンダリングするべきではありませんでしたか? どうすれば停止し、変更時にのみ再計算できますか?
swing - Swing:テーブルセルのレンダリングがJXTableで正しく機能しませんか?
特定の行アイテムの値に基づいて、JXTableのハイライト色を上書きしようとしています。これは、行アイテムの値にが含まれている場合にハイライトが緑色になる例getNumber() % 2 == 0
です。
JTableの場合は正常に機能しますが、JXTableの場合は、問題の行が選択されていない限り、テーブルセルレンダラーは機能しないようです。なぜこのように動作するのですか、またどのように修正すればよいですか?
java - 列ヘッダーに「閉じる」ボタンがある JTable
カスタム列ヘッダーを持つテーブルを作成しようとしています。列ヘッダーに、ユーザーがクリックできるボタンを含めたいです。ボタンの機能は、テーブルから列を削除することです。基本的に、私はこのようなものを構築しようとしています。
これが私のコードです:
デフォルトでは、私の理解が正しければ、JTable は JLabel を使用して列ヘッダーをレンダリングします。私の考えは、カスタムの TableCellRenderer 実装を使用して、いくつかのコンポーネント、つまり JLabel と JButton を含む JPanel から独自の列ヘッダーを作成することです。getTableCellRendererComponent(...) 関数でビルドして返します。
視覚的に、これは機能します。問題は、ボタン (または、それを保持しているパネル) でのマウス クリックを検出できないことです。ボタンに MouseListener を追加するだけでは機能しません。イベントは決してそれに到達しません。
Web 上で同様のものをいくつか見つけましたが、それらは必要な機能を実現していません。
まず、JCheckBox をヘッダーに配置する方法の例を次に示します。
これの問題は、ヘッダー全体がチェックボックスになっていることです。チェックボックスまたは関連するラベルをクリックすると、同じ効果が得られます。したがって、列をソートすることはできません。ラベルをクリックすると列がソートされ、閉じるボタンをクリックするとテーブルから列が削除されるようにしたいと思います。つまり、ヘッダーには、別々のマウス イベント ハンドラを持つ 2 つの別々の領域が必要です。
ここで別の例を見つけました:
これには、テーブルのセルへの JButton の配置、テーブル自体でのマウス クリックの検出、クリックが発生した列と行の計算、および適切なボタンへのイベントのディスパッチが含まれます。
これにもいくつか問題があります。まず、ボタンはヘッダーではなくセルにあります。次に、これも 1 つのコンポーネントであり、JPanel 内の複数のコンポーネントではありません。この例からイベントをディスパッチするというアイデアを思いつきましたが、複合コンポーネントに対して機能させることはできません。
別のアプローチを試みました。閉じるボタンの座標を取得できれば、マウス クリックの座標がわかれば、どのボタンがクリックされたかを計算し、イベントを適切にディスパッチできると考えました。いくつかのテストを実行したところ、テーブル ヘッダー内のコンポーネントが実際には画面上に配置されていないことがわかりました。
メイン (パブリック) クラスに静的な JButton 変数を追加し、TableCellRenderer を実装するクラスをメイン クラスの内部クラスにしました。getTableCellRendererComponent(...) では、戻る前に、作成したばかりの JButton をその静的変数に割り当てます。このようにして、いわばそれを処理することができます。次に、メインで、その静的変数を使用して、getX()、getY()、getWidth()、getHeight()、および getLocationOnScreen() を試みました。X、Y、幅、高さはすべて 0 を返します。GetLocationOnScreen() は、この関数が機能するにはコンポーネントが画面上に存在する必要があることを示して、プログラムをクラッシュさせます。
このコードは次のようになります。
「class CustomColumnCellRenderer implement TableCellRenderer」は、CustomColumnHeadersTable の内部クラスになります。そのためには、CustomColumnCellRenderer の静的変数を放棄する必要があるため、アイコンや URL などを気にしませんでした。アイコン付きのボタンの代わりに、「BUTTON」と書かれたシンプルなボタンを使用しました...
次に、getTableCellRendererComponent(...) 内で、return ステートメントの直前に、
そして最後に、main() の中で、これをやってみました:
出力は次のようになります。
言い換えれば、ボタンの次元はすべて 0 であり、Java によれば、実際には画面上に配置されていません (私には見えますが...)。getLocationOnScreen() を呼び出すと、プログラムがクラッシュします。
ということで、よろしければご協力お願いします。多分誰かがこれを行う方法を知っています。たぶん、試してみるために他のアプローチを提案することもできます。または、それがまったく不可能であることを知っているかもしれません...
ご協力ありがとうございました。
java - TableCellRendererが選択したセルの問題
JTableコンポーネントのtablecellrendererを実装したいのですが、セルデータに応じて異なる色を表示する必要があります。これを取得しましたが、選択したセルの色を変更できません。私はこれをやろうとしました:
しかし、動作しません:S ..セルをクリックしても、JTableに何も変わらないため、問題はわかりません。
java - 前の行の値に応じてセルを特定の色でペイントするJXTreeTable
カスタムセルレンダラーを備えたJXTreeTableがあります。行のフィールドが前の行のフィールドと異なる場合に、行の背景色を変更しようとしています。たとえば、行にIDとして「1」が含まれているとします。前の行にも「1」が含まれている場合は、この行を同じ色でペイントします。前が「2」だった場合、この行を別の色でペイントしたいと思います。目的は、同じIDを持つ行をグループ化することです。
私は元々、以前にペイントした色を保存し、それを(値とともに)使用して、現在の行をペイントする色を決定していました。ただし、これはテーブルを上から下に完全にペイントする場合にのみ機能しました。私は現在、前の行の背景色を取得し、それを使用して決定していますが、行が選択されているか、そうでなければ異なる場合、これは色を台無しにします。これを行うためのより良い方法はありますか?
java - 行/セルが選択されているときに、Java カスタム セル レンダラーが強調表示を表示しないのはなぜですか?
より多くのコンテンツを読み取ることができるように、セルがワード ラップを行うためのカスタム セル レンダラーがあります。コードは次のとおりです。
更新: セル レンダラーは適切に使用されますが、ユーザーが JTable 内の行を選択すると、非カスタム レンダリング セルの強調表示のみが表示されます。ただし、その行の他のすべてのセルに対して強調表示が表示されます。これにより、背景が白いセルが1つだけ残り、行の残りの部分は強調表示された背景色として青(私の場合)になります。
java - 異なるルート タイプとノード タイプで TreeTable を使用する
次の問題があります。
ツリーのルート (以下のクラス) とノードが同じ型ではないことを除いて、JTeeTable のようなテーブル コンポーネントが必要です。
たとえば、次のクラスがあるとします。
これらの 2 つのクラスは似ており、継承のケースの動機となる可能性がありますが、そのように関連していません。車のパーツのリストを載せた車、または俳優のリストを載せた映画と考えてください。
この 2 週間、私は上記を視覚的に表現する方法を考え続けてきました。JTreeTable コンポーネントを使用することを考えましたが、サブエントリ (ノード??) がエントリ (リーフ??) と同じタイプである場合のクロス ショーの使用例はすべて表示されます。
これまでの私の考え: テーブルを使用すると、列が同じ名前を共有することを見て、テーブルと別のテーブルを TableCellRenderer として使用し、親行のダブルクリックで表示/非表示をサポートする必要があると考えました。
先行きが不安ですが…。
ですから、これについてどうすればよいかについて何かアイデアがあれば、あなたのアイデアを共有してください。
アップデート
同じアプローチに従う他の方法
アイデアを共有してくれたすべての人に感謝します。Trashgod にもう一度感謝します...