2016-04-03 32 views
0

这个问题似乎是Linux/Ubuntu的系统外观,因为它可以在Windows和其他外观中使用。我似乎无法找到解决这个问题的方法。我目前使用Ubuntu 15.10。使用GTKLookAndFeel将图像插入到JTable单元中

// Set my look and feel in main() 
// Printed out: "com.sun.java.swing.plaf.gtk.GTKLookAndFeel" 
try { 
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
} catch (Throwable e) {} 


// I set my table to render images inside the ui method. Works with every other look and feel. 
ImageIcon document = new ImageIcon(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("/test/documents.png"))); 
DefaultTableModel model = new DefaultTableModel(new Object[]{"A","B"},0); 
table = new JTable(model); 
table.setRowHeight(document.getIconHeight()); 
table.getColumnModel().getColumn(0).setCellRenderer(table.getDefaultRenderer(ImageIcon.class)); 
for(int i=0; i<10; i++) 
    model.addRow(new Object[]{document,i}); 

// When the L&F is set to GTK, the table will just print out Object.toString() 
// For example: "[email protected]" 

我知道我可以切换我的外观和感觉,但有一个原因,这并不用GTK工作,是有办法来解决呢?

当表不为空,但返回以下打印出table.getDefaultRenderer(Icon.class)

javax.swing.plaf.synth.SynthTableUI$SynthTableCellRenderer[Table.cellRenderer,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,[email protected],flags=8388608,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text=,verticalAlignment=CENTER,verticalTextPosition=CENTER] 

使用自定义的默认渲染作品。我使用了JTable source中的IconRenderer类,它在制作自定义渲染器(例如居中图像并且没有指示您选择单元格)时解决了新问题。

​​

回答

2

那么你可以随时添加一个:

System.out.println(table.getDefaultRenderer(Icon.class)); 

语句来看看什么是返回。我总是使用图标,因此可以显示任何类型的图标。

有没有办法解决它?

如果它为空,那么你知道GTK没有默认的渲染器,所以你需要创建自己的图标渲染器。查看Using Custom Renderers的Swing教程中的部分以获取更多信息。

+0

表格的默认渲染器不会显示为空,并且我已将结果添加到我的问题中。我会给自定义渲染器一个镜头。 –

+0

使用自定义默认渲染器的作品,谢谢!仍然没有意义,它不会自行呈现。 –

+0

@Matthew,哎呀,你是正确的,它永远不会是null,因为即使没有一个图标的特定渲染器,默认的对象渲染器将被返回,这就是为什么你会得到图标的toString(..)表示。当我打印出我得到的值'javax.swing.JTable $ IconRenderer'。看起来你只是得到了默认的Object渲染器,因为我没有在名字的任何地方看到Icon。 – camickr