предотвратить растяжение фонового изображения JTextArea при прокрутке вниз - PullRequest
1 голос
/ 16 октября 2019

У меня есть JTextArea с фоновым изображением, которое в основном отображает некоторый вывод. Проблема в том, что когда выходные данные добавляются, а JTextArea начинает «автоматически прокручиваться» вниз, фоновое изображение также растягивается ... Есть ли способ предотвратить это?

Чтобы нарисовать изображениемой 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 взят здесь для достижения умной прокрутки https://tips4java.wordpress.com/2013/03/03/smart-scrolling/)

Есть предложения? Дайте мне знать, если какой-либо дополнительный код должен быть опубликован.

1 Ответ

1 голос
/ 16 октября 2019

Вы должны отобразить изображение в зависимости от видимого прямоугольника. Как то так:

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