2012-01-16 3 views
1

Я пытаюсь создать JXTable с фоновым изображением (текст также будет прекрасен). Вот мой расширенный класс JXTable:JXTable background image not Renders

public class JXTableWithBackground extends JXTable{ 

    ImageIcon image; 
    public JXTableWithBackground(ParticipantTableModel pTableModel, ImageIcon image){ 
     super(pTableModel); 
     this.image=image; 
    } 
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column){ 
     Component c = super.prepareRenderer(renderer, row, column); 
     // We want renderer component to be transparent so background image is visible 
     if(c instanceof JComponent)((JComponent)c).setOpaque(false); 
     return c; 
    } 

    @Override 
    public void paint(Graphics g) { 
     //draw image in centre 
     final int imageWidth = image.getIconWidth(); 
     final int imageHeight = image.getIconHeight(); 
     final Dimension d = getSize(); 
     final int x = (d.width - imageWidth)/2; 
     final int y = (d.height - imageHeight)/2; 
     g.drawImage(image.getImage(), x, y, null, null); 
     super.paint(g); 
    } 

Изображение не отображается - я вижу только пустое пространство. Есть идеи?

+0

Сотовый компонент может по-прежнему отображать непрозрачные пиксели из-за его цвета фона. Вы пытались вернуть непрозрачные пустые метки в качестве теста? – Thomas

+0

@Thomas Я просто попробовал, и все равно белый – Anthea

+0

Также обратите внимание, что сама таблица может иметь фон, поэтому вызов 'super.paint (g)' может фактически полностью скрыть ваше изображение. – Thomas

ответ

1

Для дальнейшего использования:

Проблема, кажется, что сама таблица не отображается прозрачно. Установка самой таблицы в opaque = false помогает.

1

Для SwingX рекомендуется использовать, например, непрозрачный компонент для визуализации, чтобы использовать интерфейс Highlighter. Поэтому вместо того, чтобы переопределять метод prepareRenderer, рекомендуется написать свой Highlighter и использовать метод JXTable#setHighlighters для установки на таблицу