2016-04-03 11 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)をプリントアウトするとき

それがnullではありませんが、次の値を返します。

カスタムデフォルトレンダラの作品を使用して
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)); 

文が返されるかを確認します。私はいつもIconを使用しているので、どんな種類のIconでも表示できます。

これを回避する方法はありますか?

nullの場合、GTKにはデフォルトのレンダラーがないので、独自のアイコンレンダラーを作成する必要があります。詳細については、Using Custom RenderersのSwingチュートリアルのセクションを参照してください。

+0

テーブルのデフォルトのレンダラーはnullではないように見え、私の質問に結果を追加しました。私はカスタムレンダラにショットをつけます。 –

+0

カスタムデフォルトレンダラを使用すると、ありがとう!まだそれがそれをそれ自身でレンダリングしないということは意味を成さない。 –

+0

@Matthew、oopsあなたは正しいです。nullではありません。Iconのレンダラーがない場合でも、デフォルトのObjectレンダラーが返されるため、アイコンのtoString(..)表現が得られます。値をプリントアウトすると、 'javax.swing.JTable $ IconRenderer'を取得します。名前のどこにでもアイコンが表示されないので、デフォルトのObjectレンダラーを取得しているようです。 – camickr

関連する問題