5

I have a TextArea inside JScrollPane inside standard 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);

When I type enough text in a single row the horizontal knob appears - so far good. But when I start moving the knob left and right, the text gets blured (see image). Interestingly, nothing weird happens when I move the textarea up and down.

blured text in jscrollpane when scrolling horizontally

I use Ubuntu 12.04 with Unity. This graphic artifact never appeared to me before. Any hints what could be the problem?

Peter Csiba
  • 461
  • 2
  • 10
  • 1
    1) `fieldBodyScrollPane.setBounds(70, 140, 790, 500);` Is likely indicative of the root of the problem. ***Use layouts***. 2) For better help sooner, post an [SSCCE](http://sscce.org/). – Andrew Thompson Oct 08 '12 at 12:01
  • try to test with `myJViewPort.setScrollMode(JViewport.BLIT_SCROLL_MODE);` and/or `myJViewPort.setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE);` and/or `myJViewPort.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);` and/or ??? – mKorbel Oct 08 '12 at 18:19

3 Answers3

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

I do not see any scroll artifacts in this SSCCE. Do you?

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
2

Here's @Andrew's SSCCE displaying itself; it looks the same with either Ambience or 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)

Addendum: Looking closer at your screenshot, failing to honor the opacity property can cause such rendering artifact, and the default setting may vary among Look & Feel implementations.

trashgod
  • 203,806
  • 29
  • 246
  • 1,045
2

This problem happens in OpenJDK (6 and 7, at least; and at least on Linux), and does not happen in Oracle Java 6 and 7 (on Linux).

The workaround suggested by mKorbel works for me:

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

So I guess it's a bug in OpenJDK.

Robert Fleming
  • 1,337
  • 17
  • 13