A imagem de fundo JXTable não renderiza
Pergunta
Estou tentando gerar um JXTable com uma imagem de fundo (um texto também seria adequado).Aqui está minha classe estendida JXTable:
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);
}
A imagem não aparece - só vejo o espaço em branco.Alguma ideia?
Solução
Para referência futura:
O problema parece ser que a própria tabela não é renderizada de forma transparente.Definir a própria tabela como opaque= false ajuda.
Outras dicas
Para SwingX
, a maneira recomendada de, por exemplo, usar um componente opaco para renderização é usar Highlighter
.Portanto, em vez de substituir o método prepareRenderer
, é recomendável escrever seu Highlighter
e usar o JXTable#setHighlighters
método para definirna mesa
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow