2012-12-04 51 views
0

我试图显示JTable单元格内的HTML文本,但滚动条没有显示出来。下面是我的代码...JTable单元格内的滚动条

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

+0

此外,请考虑使用'ListSelectionListener'的[备用方法](http://stackoverflow.com/a/11782366/230513),在[此处](http://stackoverflow.com/a/12306104/230513)中进行说明。 – trashgod

回答

0

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

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

+0

谢谢。我改变了我的观点,并没有使用表格。 – jumpa