Горизонтальное перемещение JScrollPane приводит к размытому тексту

У меня есть TextArea внутри JScrollPane внутри стандартного JPanel.

    JPanel panelMain = new JPanel();
    panelMain.setBorder(titledBorder1);
    panelMain.setBounds(new Rectangle(2, 5, 970, 700));
    panelMain.setLayout(null);

    JTextArea fieldBody = new JTextArea();
    JScrollPane fieldBodyScrollPane = new JScrollPane(fieldBody);
    fieldBodyScrollPane.setBounds(70, 140, 790, 500);
    panelMain.add(fieldBodyScrollPane);

Когда я набираю достаточно текста в одной строке, появляется горизонтальная ручка - пока все хорошо. Но когда я начинаю двигать ручку влево и вправо, текст становится размытым (см. Изображение). Интересно, что ничего странного не происходит, когда я перемещаю текстовую область вверх и вниз.

Размыли текст в jscrollpane при горизонтальной прокрутке

Я использую Ubuntu 12.04 с Unity. Этот графический артефакт никогда не появлялся мне раньше. Любые намеки, в чем может быть проблема?

3 ответа

Решение
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.border.*;

public class CaseForLayoutsNumber547 {

    CaseForLayoutsNumber547() {
        Border titledBorder1 = new TitledBorder("Case for Layouts #547");
        // START: code snippet variant
        JPanel panelMain = new JPanel(new GridLayout());
        panelMain.setBorder(titledBorder1);

        JTextArea fieldBody = new JTextArea(5,40);
        JScrollPane fieldBodyScrollPane = new JScrollPane(fieldBody);
        panelMain.add(fieldBodyScrollPane);
        // END: code snippet variant
        JOptionPane.showMessageDialog(null, panelMain);
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                new CaseForLayoutsNumber547();
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

Я не вижу никаких артефактов прокрутки в этом SSCCE. Вы?

Вот SSCCE Эндрю, отображающий себя; это выглядит одинаково с Ambience или Radiance.

образ

$ lsb_release -a
Модули LSB не доступны.
Идентификатор распространителя: Ubuntu
Описание:    Ubuntu 12.04.1 LTS
Релиз:    12.04
Кодовое имя: точный
$ java -версия
Java-версия "1.6.0_24"
Среда выполнения OpenJDK (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1)
OpenJDK Client VM (сборка 20.0-b12, смешанный режим, совместное использование)

Приложение: Если присмотреться к скриншоту, то, если не учитывать свойство непрозрачности, это может привести к такому артефакту рендеринга, и настройки по умолчанию могут различаться в разных вариантах Look & Feel.

Эта проблема возникает в OpenJDK (по крайней мере, 6 и 7; и, по крайней мере, в Linux), и не возникает в Oracle Java 6 и 7 (в Linux).

Обход, предложенный mKorbel, работает для меня:

scrollPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);

Так что я думаю, что это ошибка в OpenJDK.

Другие вопросы по тегам