2012-04-20 193 views
2

我需要在我的JTable后面添加图像背景,不应该在滚动我的JTable时sc下去。目前我已经添加了图像behing我的JTable。使用绘画方法。如何在JTable上添加图像背景,滚动时不滚动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中。和滚动窗格时。也滚动图像。并在每次滚动时重复该图像。

是否有任何方法来限制仅在背景上滚动。谢谢

回答

8

改为在JScrollPane上绘制背景。您还需要使用setOpaque(false)JTable和单元格渲染器都设置为透明。 (并且在覆盖时使用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); 
} 
+0

它的工作。你救了我的一天,谢谢 – Asghar 2012-04-20 11:45:07