我试图在JScrollPane中的JTable后面添加一个居中的背景图像。 背景相对于视口的位置应居中且静态。
我尝试将JScrollPane添加到带有绘制图像的JPanel中,并使其他所有内容都是半透明的,但结果很难看并且有渲染问题。
答案 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