如何在JTable上添加图像背景,滚动JTable时不滚动

时间:2012-04-20 11:26:33

标签: java swing background jtable jscrollpane

我需要在我的JTable后面添加一个图像背景,滚动我的JTable时不应该缩小。目前我添加了一个Image behing my JTable。使用绘画方法。

public void paint(Graphics g) 
            {
                // First draw the background image - tiled
                Dimension d = getSize();
                for (int x = 0; x < d.width; x += image.getIconWidth())
                    for (int y = 0; y < d.height; y += image.getIconHeight())
                        g.drawImage(image.getImage(), x, y, null, null);
                // Now let the regular paint code do it's work
                super.paint(g);
            }

问题是。这个JTable位于JScrollPane。并在滚动窗格时。也向下滚动图像。并在每个卷轴重复图像。

有没有办法限制只在背景上滚动。谢谢

2 个答案:

答案 0 :(得分:9)

JScrollPane上绘制背景。您还需要使用JTable使setOpaque(false)和单元格渲染器都透明。 (并在覆盖时使用paintComponent方法。)

以下代码生成了此屏幕截图:

screenshot

public static void main(String[] args) throws IOException {
    JFrame frame = new JFrame("Test");

    final BufferedImage image = ImageIO.read(new URL(
            "http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"));

    JTable table = new JTable(16, 3) {{
        setOpaque(false);
        setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {{
            setOpaque(false);
        }});
    }};

    frame.add(new JScrollPane(table) {{
            setOpaque(false);
            getViewport().setOpaque(false);
        }
        @Override
        protected void paintComponent(Graphics g) {
            g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
            super.paintComponent(g);
        }

    });
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

答案 1 :(得分:4)