滚动窗格图形错误

时间:2014-09-27 10:08:32

标签: java jscrollpane paint graphic

我在JScrollPane上遇到了意外行为:  我的ScrollPanel充满了不同的面板 (需要透明度,因为最后我将在背景中而不是仅使用颜色)

我快速举例说明了我的问题:

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.*;
import javax.swing.border.Border;


 public class ScrollPaneTest extends JPanel{

  ScrollPaneTest(){

    JPanel Content = new JPanel();
    BoxLayout ColumnLayout = new BoxLayout(Content,BoxLayout.Y_AXIS);
    Content.setLayout(ColumnLayout);
    for(int i = 0 ; i < 10 ; i++){
        JPanel pane = new JPanel();
        JLabel elem = new JLabel("element "+i);
        pane.setBackground(new Color(0,0,0,125));
        pane.add(elem);
        Content.add(pane);

    }



    Content.setBackground(Color.ORANGE);

    JScrollPane scrollPane = new JScrollPane(Content);
    scrollPane.setPreferredSize(new Dimension(100,100));
    scrollPane.setBackground(new Color(0,0,0,250));
    add(scrollPane);
 }

 public static void main(String[] args) throws Exception {

    JFrame f =  new JFrame();
    JPanel bck = new JPanel();
    bck.setBackground(Color.RED);
    bck.add(new ScrollPaneTest());
    f.add(bck);

    f.setSize(200, 200);
    f.setVisible(true);
  }

}

有了这个,你可以看到当我滚动时,图形都搞砸了:/ 谢谢你的帮助:p

1 个答案:

答案 0 :(得分:1)

我有针对您的问题的以下解决方案

滚动元素时,元素不会重新绘制,因此在滚动滚动条时需要重新绘制它们。在此行之后添加以下代码JScrollPane scrollPane = new JScrollPane(Content);它将起作用!

    scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener(){
        @Override
        public void adjustmentValueChanged(AdjustmentEvent e) {
            repaint();
        }
    });