2016-04-03 48 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