水平移动JScrollPane会导致文本模糊

时间:2012-10-08 11:52:15

标签: java swing jscrollpane ubuntu-12.04 visual-artifacts

我在标准JPanel中的JScrollPane中有一个TextArea。

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

当我在一行中键入足够的文本时,水平旋钮出现 - 到目前为止还不错。但是当我开始左右移动旋钮时,文本会变得模糊(见图)。有趣的是,当我上下移动textarea时,没有什么奇怪的事情发生。

blured text in jscrollpane when scrolling horizontally

我在Unity中使用Ubuntu 12.04。这个图形神器之前从未出现过。有什么提示可能是什么问题?

3 个答案:

答案 0 :(得分:4)

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中没有看到任何滚动瑕疵。你呢?

答案 1 :(得分:2)

这是@Andrew的SSCCE展示自己;它看起来与 Ambience Radiance 相同。

image

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.1 LTS
Release:    12.04
Codename:   precise
$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1)
OpenJDK Client VM (build 20.0-b12, mixed mode, sharing)

附录:仔细观察截图,未能遵守opacity属性会导致此类渲染工件,默认设置可能因Look&感觉实施。

答案 2 :(得分:1)

这个问题发生在OpenJDK(至少6和7;至少在Linux上),并且在Oracle Java 6和7(在Linux上)中不会发生。

mKorbel建议的解决方法适用于我:

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

所以我猜这是OpenJDK中的一个错误。