Asg*_*har 3 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);
}
Run Code Online (Sandbox Code Playgroud)
问题是.这个JTable位于JScrollPane.并在滚动窗格时.也向下滚动图像.并在每个卷轴重复图像.
有没有办法限制只在背景上滚动.谢谢
在背景上绘制背景JScrollPane.您还需要使用,使JTable单元格和单元格渲染器都透明setOpaque(false).(并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);
}
Run Code Online (Sandbox Code Playgroud)