0

JTable のセル内に HTML テキストを表示しようとしていますが、スクロールバーがまったく表示されません。以下は私のコードです...

public class TableCellTextRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,     
        boolean hasFocus, int row, int column) {

        final JTextPane jtextPane = new JTextPane();
        JScrollPane scrollPane = new JScrollPane(jtextPane);
        scrollPane.setPreferredSize(new Dimension(350,350));
        scrollPane.setVisible(true);
        jtextPane.setEditable(false);
        jtextPane.setAutoscrolls(true);
        jtextPane.setContentType("text/html");
        jtextPane.setText(myHtmlText);
        jtextPane.setVisible(true);
        jtextPane.setPreferredSize(new Dimension(350,350));

        //this setViewPort has no effect 
        scrollPane.setViewportView(jtextPane);

        jtextPane.setVisible(true);
        scrollPane.setAutoscrolls(true);
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        JPanel jpanel = new JPanel();
        jpanel.setVisible(true);
        jpanel.setPreferredSize(new Dimension(360, 360));
        jpanel.add(scrollPane);

        return jpanel;
    }
}

スクロール バーは表示されますが、スクロール ハンドルは表示されません。私が欠けているものを教えてください。

テーブルは次のようになります。

jTable の最初の行

4

1 に答える 1

0

残念ながら、これはあなたが望むようには機能しません。JTable が機能する方法は、レンダラー コンポーネントを取得してセルを一度描画し、それをキャッシュすることです。簡単に言えば、返されるコンポーネントは基本的にセルを描画するために使用されるだけですが、通常のコンポーネントのようには機能しません。たとえば、イベントを受け取りません。セル エディター (イベントを受け取る) を使用できますが、ユーザーはセルを手動で選択する必要があります。

カスタム マウス リスナーをインストールすることで使用できるいくつかのトリックがありますが、これは非常に複雑になります。(カスタム レイアウトではなく) 本当に JTable を探しているのか、それとも JavaFX テーブルを埋め込むことが可能かどうかを自問したほうがよいでしょう。

于 2012-12-04T17:41:07.133 に答える