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

我需要在我的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。 并在滚动窗格时。 也向下滚动图像。 并在每个卷轴重复图像。

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

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

下面的代码生成了这个截图:

截图

 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); } 
  • 你可以绘制JTable's backgroung ,与JComponents其余部分相同/相似

  • 你必须覆盖paintComponent()而不是方法paint()

  • 关于paintComponent()的示例,包括自定义行选择

  • 你可以画到JXLayer(Java6) ,还有JLayer (Java7)

  • 你可以画到GlassPane

  • 你可以画到JViewport