Фоновое изображение в JScrollpane с JTable - PullRequest
3 голосов
/ 25 января 2011

Я пытаюсь добавить центрированное фоновое изображение за JTable в JScrollPane.Положение фона относительно области просмотра должно быть центрированным и статичным.

Я пытался добавить JScrollPane в JPanel с нарисованным изображением и сделать все остальное полупрозрачным, но результат был уродливым и имел проблемы с рендерингом.

Ответы [ 3 ]

5 голосов
/ 25 января 2011

Ознакомьтесь с WatermarkDemo в конце статьи для полного примера.

3 голосов
/ 25 января 2011

Вы должны создать подкласс 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);
1 голос
/ 25 января 2011

Не уверен, что это то, что вам нужно, но взгляните на Substance Look and Feel, который поддерживает водяные знаки: https://substance.dev.java.net/docs/watermarks.html

...