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

恐怕这不会像你想要的那样工作。JTables 的工作方式是通过获取渲染器组件来绘制一次单元格,然后将其缓存。简单来说,您返回的组件基本上只是用于绘制单元格,但它不像普通组件那样工作 - 例如,它不接收事件。您可以使用单元格编辑器(它将接收事件),但用户必须手动选择单元格。

您可以通过安装自定义鼠标侦听器来使用一些技巧,但是这些东西会变得非常复杂。最好问问自己是否真的在寻找 JTable(而不是自定义布局),或者是否可以嵌入 JavaFX 表。

于 2012-12-04T17:41:07.133 回答