2016-04-03 47 views
0

ile JTable hücresine görüntülerin yerleştirilmesi Sistem, Windows ve diğer görünüm ve hislerde çalıştığı için Linux/Ubuntu için görünüm ve izlenim gibi görünüyor. Bunu düzeltmenin bir yolunu bulamıyorum. Şu anda Ubuntu 15.10 kullanıyorum.GTKLookAndFeel

// 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]" 

benim göz açıp hissediyorum ama bu GTK ile çalışmaz ve etrafında almak için bir yol yoktur bir neden yoktur farkındasın?

aşağıdaki o boş değil ama döndüren tablo için table.getDefaultRenderer(Icon.class) dışarı yazdırırken:

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] 

özel varsayılan oluşturucu işleri kullanma. ImageRealer sınıfını, görüntüyü ortalamak ve hücreyi seçtiğinize dair herhangi bir gösterge olmaksızın özel oluşturucu oluştururken yeni sorunları çözen JTable source'dan aldım.

import javax.swing.Icon; 
import javax.swing.JLabel; 
import javax.swing.table.DefaultTableCellRenderer; 

class IconRenderer extends DefaultTableCellRenderer.UIResource { 
    public IconRenderer() { 
     super(); 
     setHorizontalAlignment(JLabel.CENTER); 
    } 

    public void setValue(Object value) { 
     setIcon((value instanceof Icon) ? (Icon) value : null); 
    } 
} 

cevap

2

Eh her zaman bir ekleyebilirsiniz:

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

deyimi döndürülen ne olduğunu görmek için. Her zaman Simge kullanabilirim, böylece her türlü Simge görüntülenebilir.

Etrafında dolaşmanın bir yolu var mı?

Eğer boşsa o zaman GTK'nin varsayılan bir oluşturucusuna sahip olmadığını bilirsiniz, böylece kendi Simge oluşturucunuzu oluşturmanız gerekir. Daha fazla bilgi için Swing öğreticisinden Using Custom Renderers numaralı bölüme bakın.

+0

Tablo için varsayılan oluşturucu boş görünmüyor ve sonucu ekledim. Özel oluşturucuya bir çekim yapacağım. –

+0

Özel bir varsayılan oluşturucu kullanılması işe yarar, teşekkürler! Yine de, bunu kendi başına üretmeyeceğini anlamıyor. –

+0

@Matthew, oops haklısınız, asla boş olmayacaktır çünkü bir Simge için belirli bir oluşturucu olmasa bile, varsayılan Nesne oluşturucu geri dönecektir, bu yüzden Simge'nin toString (..) gösterimini elde edersiniz. Javax.swing.JTable $ IconRenderer 'değerini aldığımda çıktı aldım. Simgesini, adında herhangi bir yerde görmediğim için varsayılan Nesne oluşturucuyu aldığınız anlaşılıyor. – camickr