2012-05-05 33 views
2

維持秩序,我的其他問題繪畫的問題,有人建議要問seperately如下:定製的ScrollPane

以下是測試類的代碼,我在其中添加我的自定義的JScrollBar

public class TestScrollBar { 

    private static JFrame   f; 
    private static Container  pane; 
    private static JScrollPane  scroll1; 
    private static JScrollBar  scrollbar; 
    private static JPanel   panel; 
    private static JList<String> list1; 

    public static void main(String[] arg){ 
     createBasic(); 
     createComponents(); 
     f.setVisible(true); 
    } 

    private static void createBasic(){ 
     f = new JFrame("ScrollbarTest"); 
     f.setBounds(100,100,300,300); 

     pane = f.getContentPane(); 
     pane.setLayout(null); 

     panel = new JPanel(); 
     panel.setBackground(Color.GREEN); 
     panel.setLayout(null); 
     panel.setBounds(50,50,200,150); 
    } 

    private static void createComponents(){ 

     String[] data = {"ggggg", "ggggg", "ggggg", "ggggg", "ggggg", "ggggg", "ggggg", "ggggg", "ggggg", "ggggg", "ggggg", "ggggg"}; 
     list1 = new JList<String>(data); 
     list1.setBackground(new Color(0,0,0,0)); 

     scrollbar = new JScrollBar(); 
     CustomScrollBarUI ui = new CustomScrollBarUI(); 
     scrollbar.setUI(ui); 
     scrollbar.setOpaque(false); 

     scroll1 = new JScrollPane(list1); 
     scroll1.setBounds(20,20,160,110); 
     scroll1.setOpaque(false); 
     scroll1.getViewport().setOpaque(false); 
     scroll1.setVerticalScrollBar(scrollbar); 

     panel.add(scroll1); 
     pane.add(panel); 
    } 
} 

定製的ScrollBarUI可以在這裏看到:Custom JScrollBar-Thumb is painted, but doesn't move 我改變(感謝mgarin)的唯一事情是 g.drawImage(img, thumbBounds.x, thumbBounds.y, new Color(255,255,255,0), null);

和下面的情況發生,如果我移動日UMB(請不要介意設計,它只是爲了測試一些不透明的東西...)

http://tinypic.com/r/sz94pf/6

+1

你能發表一個實際的問題嗎?我在上面的原文中沒有看到一個,只是描述性的東西。另外,我爲您的問題添加了一個「java」標記。 –

+0

從圖片判斷,滾動容器在滾動時不會更新,並且會從前面的內容中獲得這些線條。您可能只需在滾動結束時執行'SwingUtilities.updateComponentTreeUI(scroll1)'操作,以便正確更新。 – Ozzy

回答

2

您的上榜透明的背景;

list1.setBackground(new Color(0,0,0,0)); 

如果您刪除該線條,它會很好。

在另一個注意:如果你想給你的單元格自定義背景顏色,嘗試使用自定義ListCellRenderer,使用JList上的setCellRenderer()方法。然後,您可以設置您返回的組件的背景顏色。

+0

謝謝。實際上,我希望整個JList都是透明的,因爲我想看看添加了Jlist的JPanel的背景(在這個測試用例中是JPanel面板)。所以你說我應該創建一個自定義的「myCellRenderer」來實現ListCellRenderer?有沒有更簡單的方法來設置JList的背景透明? –

+0

@ValentinoRu號沒有。使組件的背景透明並不是一件普通的事情。我做了一些實驗,並且自定義列表單元格渲染器實際上也不起作用。現在我唯一能想到的就是自己實現一個類似JList的組件,在其中將每個列表項(JPanel)的背景設​​置爲透明的alpha。 – Bartvbl

+0

@ValentinoRu萬一重要,將列表添加到滾動窗格後,在JList上調用setOpaque(false),使JList和JList.getParent()的背景透明,並在返回之前創建一個單元渲染器,以將組件的背景設置爲透明實際上使列表透明,但會弄亂選擇顏色。我不想花更多時間在自己身上,但這可能實際上是實現它的工作而不必做太多'哈克'的東西。 – Bartvbl