我试图在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;
}
}
出现滚动条,但滚动控制柄不显示。你能告诉我我错过了什么吗?
表格如下:
答案 0 :(得分:0)
我担心这不会像你想要的那样发挥作用。 JTable的工作方式是获取一个渲染器组件来绘制一次单元格,然后缓存它。简单来说,您返回的组件基本上只用于绘制单元格,但它不像普通组件那样工作 - 例如,它不接收事件。您可以使用单元格编辑器(将接收事件),但用户必须手动选择单元格。
通过安装自定义鼠标监听器可以使用一些技巧,但这些东西会变得非常复杂。问自己,你是否真的在寻找JTable(而不是自定义布局),或者是否可能嵌入JavaFX表,这可能会更好。