Горизонтальное перемещение 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);
Когда я набираю достаточно текста в одной строке, появляется горизонтальная ручка - пока все хорошо. Но когда я начинаю двигать ручку влево и вправо, текст становится размытым (см. Изображение). Интересно, что ничего странного не происходит, когда я перемещаю текстовую область вверх и вниз.
Я использую 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.