2013-03-14 81 views
1

說,我有一個很大的JComponent:滾動的JComponent在JScrollPane中

Dimension componentSize = new Dimension(5000,5000); 

和一個較小的JScrollPane的:

Dimension scrollPaneSize = new Dimension(500,500); 

我想在JScrollPane中顯示我的JComponent的一部分,就像下面的圖片:

JComponent inside JScrollPane

白色矩形是我JScrollPane的,這當前顯示從(x1,y1)(x2,y2)的JComponent的一部分。


那麼,你有什麼我想:

我創建了一個新的JComponent:

JComponent component = new JComponent(){ 
    protected void paintComponent(Graphics g) 
    { 
     // Here I draw a background 
    } 
}; 

,把它作爲JScrollPane的視口視圖:

JScrollPane scrollPane = new JScrollPane(); 

scrollPane.setViewportView(component); 

然後我將JScrollPane附加到JFrame中:

JFrame frame = new JFrame(); 

frame.setLayout(new BorderLayout()); 

frame.add(scrollPane, BorderLayout.CENTER); 

frame.pack(); 
frame.setVisible(true); 

我試圖改變可視面積:

scrollpane.getViewport().setBounds(x1,y1,500,500) 

有什麼不對?

回答

4

setBounds用於確定組件在其父容器中的位置和大小。這不是你想要做的。除非您使用絕對佈局,否則不應使用此方法。

相反,嘗試

component.scrollRectToVisible(new Rectangle(x1, y1, 500, 500)); 

,而不是...

退房JComponent#scrollRectToVisible

+0

謝謝!它現在有效。這麼簡單... – 2013-03-14 01:05:37

+1

感謝Kleopatra如果你看到她,她教會我這個非常好的和簡單的解決方案:D – MadProgrammer 2013-03-14 01:07:34

2

此代碼總會引起不管視口的大小視口滾動。

scrollPane.getViewport().setViewPosition(new Point(x1, y1));