3

複数行のセルがあり、複数の(1つのセル内の)URLをクリック可能なハイパーリンクに変換し、基本的なスタイル操作(太字、斜体、下線)をサポートするJTableが必要です。つまり、テキストの入力中または入力後にスタイルを編集できます。また、スタイル設定されたセルのコンテンツをデータベースに保存できるようにするためにも必要です。これを達成する最も簡単な方法は何ですか?

私はすでにカスタムセルエディタを作成しようとしました(そして複数行の問題を整理しました)。これはJTextPaneを使用し、「スペース」文字が解放されたときにリッスンするキーリスナーを追加し、最後の単語が「http://」で始まる場合は削除します。ドキュメントから追加し、href属性と青色のスタイル付きテキストとして再度追加します。また、ハイパーリンクでのマウスクリックをリッスンするリスナーを追加しました。編集中はすべて機能しますが、セルのフォーカスが失われると、すべてのテキストのスタイルが解除されて黒になります。別のレンダラーとエディターを使用しているためかもしれませんが、主要なリスナーもレンダラーに追加しています。また、アプリを閉じたり起動したりするときに、テーブルセルの値を保存したり、特に設定したりするのに大きな問題があります。続けてこのように機能させる必要がありますか、それとも戻って別のアプローチを取る必要がありますか?JTextPaneのコンテンツタイプを「text/html」に設定するようなものです。これを行った場合、入力時にURLをハイパーリンクに変換する方法がわかりません。

ところで、エディターはAbstractCellEditを拡張し、レンダラーはJTextPaneを拡張します。

どんな助けでもありがたいです。

4

2 に答える 2

2
  • あなたのアプローチでは、カスタムレンダラーも必要になります。編集を停止すると、レンダラーが引き継ぐため、レンダラーはエディターと同じスタイリングオプションをサポートする必要があります。
  • テーブル内のクリック可能なハイパーリンクは単純ではありません。レンダラーコンポーネントはの一部ではJTableなく、スタンプとしてのみ使用されます。その結果、コンポーネントはSwing階層の一部ではないため、コンポーネントにアタッチする、、、、...などの通常のものはすべてトリガーされませんMouseListener。私の記憶が正しければ、SwingXにはsのハイパーリンクのサポートが組み込まれていますが、スタイル付きのHTMLドキュメントと組み合わせることができるかどうかはわかりません。ActionListenerFocusListenerJTable
  • エディターを拡張するときは、代わりにをJTextPane使用してくださいDocumentListenerKeyListener
  • 保存/読み込みとは、基本的には永続的な状態にダンプTableModelして戻すことです。これは要件の簡単な部分のように見えます
于 2012-10-19T19:04:33.947 に答える
1

ロビンはその部分であなたに答えましたJTable、そして私はテキストについて追加します。

実際のHTMLが必要ない場合、つまりのようなリンクが必要な場合は、セルのモデルとして<a href="http://example.com">link text</a>使用できます。DefaultStyledDocumenthttpプレフィックス付きのテキストをリンクとして表示するには、色を青に設定し、下線属性を追加します。(DefaultStyledDocumentモデルはより単純ですHTMLDocument。)

フォーマットを維持するにはDocument、セルごとにテキストモデルをSwingに保存する必要があります。

スタイリングを追加するためにテキストを削除して再挿入する必要はありません。すでにドキュメントにあるテキストにスタイルを適用するには、setCharacterAttributesメソッドを使用します。

また、Swingテキストコンポーネントのレンダリングエンジンを実際に再利用して、セルをレンダリングできます。を使用して、プレゼンテーション用のルートビューを取得できますTextUI.getRootView()。ビュー階層はテキストをレンダリングし、マウスクリックをテキストに変換するElementのに役立ちます。これを使用してハイパーリンクを起動できます。

于 2012-10-19T20:12:35.147 に答える