向下滚动时防止 TextArea 背景图像拉伸

prevent JTextArea's background image from stretching when getting scrolled down

我有一个带有背景图像的 JTextArea,基本上可以显示一些输出。问题是当输出被追加并且 JTextArea 开始变得 "auto-scrolled" 时,背景图像也被拉伸...有什么办法可以防止这种情况发生吗?

为了绘制图像,我的 JTextArea 覆盖了 paintComponent,如下所示:

public void paintComponent(final Graphics g)
{
    try {
        g.drawImage(imageIcon.getImage(),0,0,getWidth(),getHeight(),this);
        super.paintComponent(g);
    } catch(Exception e) {
        e.printStackTrace();
    }
}

然后对于滚动窗格:

DefaultCaret caret3 = (DefaultCaret)jTextArea2.getCaret();
caret3.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
jScrollPane5.setViewportView(jTextArea2);
new SmartScroller(jScrollPane5);

(SmartScroller class取自这里实现智能滚动 https://tips4java.wordpress.com/2013/03/03/smart-scrolling/ )

有什么建议吗? 让我知道是否需要发布任何进一步的代码。

您应该根据可见矩形显示图像。像这样:

    @Override
    protected void paintComponent(Graphics g) {
        Rectangle rect = getVisibleRect();
        g.drawImage(image.getImage(), rect.x, rect.y, rect.width, rect.height, this);
        super.paintComponent(g);
    }