2014-09-27 55 views
0

我得到了我的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); 
    } 

} 

有了這個,你可以看到,當我滾動,圖形都搞砸了:在救助/ 感謝:對

回答

1

我爲您的問題提供以下解決方案

當您滾動瀏覽元素時,元素不會重新繪製,因此您需要在滾動滾動條時重新繪製它們。在這行JScrollPane scrollPane = new JScrollPane(Content);之後添加下面的代碼就可以了!

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

感謝的人\ O/ 我想我可能要實現對滾動窗格這樣的事件。 您的方法非常簡單方便:) – Nerevar 2014-09-27 10:46:28

+0

歡迎您! – Muhammad 2014-09-27 10:48:17