2011-11-30 154 views
3

所以,我有一個網格佈局,它將JScrollPane存儲在每個單元格中。這些也被放入一個數組用於其他目的。 「視圖」擴展了「JPanel」,因此它只是一個具有圖像支持的常規面板。應用程序啓動時,單元格填充了包含尚未有圖像的View的scrollPane。JScrollPanes滾動條不顯示

在這一點上,我看不到滾動條,但這並不重要,因爲JPanel內沒有任何東西。只要我打開一個圖像並在JPanel的paintComponenet中使用drawImage,我就看不到滾動條了。以下是我創建的網格和滾動面板

private void createContentPane() 
{ 
     GridLayout gridLay = new GridLayout(GRID_ROWS, GRID_COLUMNS); 
     perspectiveTbl = new JScrollPane[NUM_PERSPECTIVE]; 
     mainPane = new JPanel(); 
     mainPane.setLayout(gridLay); 

     int idx = 0; 

     while(idx < perspectiveTbl.length) 
     { 
      perspectiveTbl[idx] = new JScrollPane(new View(modelImage)); 
      mainPane.add(perspectiveTbl[idx]); 
      idx++; 
     } 

     this.getContentPane().add(mainPane, BorderLayout.CENTER); 
} 

我不知道是什麼原因滾動條的都沒有顯示出來,他們應該已經設置在面板的圖像裏面?

這裏的應用程序的圖像,你可以看到鞋的圖片,所以沒有辦法查看照片的其他部分沒有收到滾動條的:

Picture

+0

您確定滾動窗格需要滾動嗎?他們的內容夠大嗎? – cdeszaq

+0

是的,圖像很大,所以視圖應該添加scrollPane。我覺得它沒有考慮面板內的圖像。 –

回答

0

感謝提示斯坦尼斯拉夫,我實際上已經想出了它,並在一小時前得到了它的工作,但是你確實給了正確的路徑來使用preferredSize屬性修復它。我最終重新實現了getPreferredSize與面板內的圖像大小,添加了對繪製事件的重新驗證,以便在加載圖像後立即顯示條形圖。

public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    g.drawImage(image, 0, 0, null); 
    this.getViewScrollPane().revalidate(); 
} 

public Dimension getPreferredSize() 
{ 
    if(image != null) 
     return new Dimension(image.getWidth(),image.getHeight()); 
    else 
     return super.getPreferredSize(); 
} 
2

你可以用戶不使用的JPanel圖像,但通常的JLabel與圖像

呼叫setPreferredSize()的面板,以反映圖像的大小。

+1

爲了更好地控制,請考慮實施Scrollable:http://docs.oracle.com/javase/6/docs/api/javax/swing/Scrollable.html – Puce