JTable单元格内的滚动条

时间:2012-12-04 17:26:48

标签: java swing scroll jtable

我试图在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;
    }
}

出现滚动条,但滚动控制柄不显示。你能告诉我我错过了什么吗?

表格如下:

First row on jTable

1 个答案:

答案 0 :(得分:0)

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

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