JScrollpane中的背景图像与JTable

时间:2011-01-25 07:39:21

标签: java swing jtable jscrollpane

我试图在JScrollPane中的JTable后面添加一个居中的背景图像。 背景相对于视口的位置应居中且静态。

我尝试将JScrollPane添加到带有绘制图像的JPanel中,并使其他所有内容都是半透明的,但结果很难看并且有渲染问题。

3 个答案:

答案 0 :(得分:5)

查看文章末尾的WatermarkDemo以获取完整示例。

答案 1 :(得分:3)

您应该对JTable进行子类化并覆盖其paint方法,以便绘制背景图像。以下是一些示例代码:

final JTable table = new JTable(10, 5) {

    final ImageIcon image = new ImageIcon("myimage.png");

    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
        final Component c = super.prepareRenderer(renderer, row, column);
        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);
    }
};
table.setOpaque(false);

final JScrollPane sp = new JScrollPane(table);

final JFrame f = new JFrame();
f.getContentPane().add(sp);
f.setSize(200,200);
f.setVisible(true);

答案 2 :(得分:1)

不确定这是否是您所需要的,但请查看支持水印的Substance Look and Feel: https://substance.dev.java.net/docs/watermarks.html