0

があり、透かしとしてのJTable後ろに画像を挿入しようとしていますJTable

tblMainView= new JTable(dtModel){

        public Component prepareRenderer(TableCellRenderer renderer, int row, int column) 
        {
        Component c = super.prepareRenderer( renderer, row, column);
        // We want renderer component to be transparent so background image is visible
        if( c instanceof JComponent )
        ((JComponent)c).setOpaque(true);
        return c;
        }
        ImageIcon image = new ImageIcon( "images/watermark.png" );

          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);
        }


        public boolean isCellEditable(int rowIndex, int colIndex) {
          return false;
        }
        public Class getColumnClass(int col){
            if (col == 0)  
            {  
            return Icon.class;  
            }else if(col==7){
                return String.class;
            }
        else
            return String.class;  

        }   
        public boolean getScrollableTracksViewportWidth() {
            if (autoResizeMode != AUTO_RESIZE_OFF) {
                if (getParent() instanceof JViewport) {
                return (((JViewport)getParent()).getWidth() > getPreferredSize().width);
                }
            } 
            return false;
            }

    };

上記は私のJTableコードですが、透かしは見えません。後で追加させてください。これJTableJScrollPaneandに配置しJSplitPaneます。

4

3 に答える 3

3

いくつかの間違いがあります

本当に良くないアイデアの使用paint(Graphics g)Swing JComponentspaint()AWTコードの場合、Swingが存在する場合、SwingpaintComponent(Graphics g)での使用はpaint(Graphics g)、SwingGUIに予期しない出力を表示する可能性があります。

paint(Graphics g)AWTコードまたはpaintComponent(Graphics g)いずれかの内部のSwingコードについては本当に良い考えではありませんRenderer

ここに示されているように、JTableのBackGroungを準備する必要がありますTableWithGradientPaint

于 2011-07-20T14:28:27.703 に答える
3

2つの解決策が考えられますが、どちらかわかりません。:DI 最初のアプローチが成功する可能性が最も高いと思います。

最初のアプローチ

paintComponent(Graphics g)メソッドをオーバーライドします。

public void paintComponent(Graphics g)
{
    //First super
    super.paintComponent(g);

    g.drawImage(0, 0, getWidth(), getHeight());
}

2 番目のアプローチ

JTable opaque を false に設定します。メソッドをtable.setOpaque(false);
オーバーライドします。paintComponent(Graphics g)

public void paintComponent(Graphics g)
{
    //First draw
    g.drawImage(0, 0, getWidth(), getHeight());

    super.paintComponent(g);
}
于 2011-07-20T14:48:05.580 に答える
1

super.paint(g)透かしをペイントする前に電話してみてくださいJTable。おそらく画像の上にペイントされています。

于 2011-07-20T14:16:14.883 に答える