2011-02-25 33 views
1

我有一個JScrollPane和JPanel裏面(我想在JPanel上繪製)。另外我有一種方法可以繪製線條長度的參數。如果該行的長度超過JScrollPane上的JPanel的大小(高度或寬度),我希望我的JScrollPane滾動。 我該怎麼做?JScrollPane的使用

P.S.我試過jScrollPane.scrollRectToVisible,但它不起作用

+2

而不是說「不行」。請解釋發生了什麼以及期望的結果。 – jzd 2011-02-25 20:12:38

+0

它將線條拉到JPanel的最後(即使線條比面板的尺寸更長),就這些了。我想讓我的JScrollPane滾動(滾動條必須出現,我可以看到該行的全長) – maks 2011-02-25 20:25:25

回答

1

這裏是實現你想要什麼

import java.awt.Dimension; 
import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

public class DrawLine { 

    JFrame j; 
    JPanel p; 
    JScrollPane sp; 

    public DrawLine() { 
     j = new JFrame(); 
     p = new JPanel() { 
      public void paintComponent(Graphics g) { 
       g.drawLine(20, 20, 250, 250); 
      } 
     }; 
     p.setPreferredSize(new Dimension(300, 300)); 
     sp = new JScrollPane(p); 
     j.getContentPane().add(sp); 
     j.setSize(300, 300); 
     j.setVisible(true); 
    } 

    public static void main(String[] args) { 
      new DrawLine(); 
     } 
} 

注意這檯面板的最佳尺寸線p.setPreferredSize(new Dimension(300, 300));一個例子。

+0

該示例可能無法正確重新繪製組件,只能演示如何使用'JScrollPane',但正如您所說的那樣_「我也有一種繪製線條長度參數的方法。」_它不會是一個問題。 – Alpine 2011-02-25 20:57:50

+0

實際上,當我按下按鈕時,我想要滾動。我貼這個和平p。setPreferredSize(new Dimension(weidth,height))代碼到我的繪圖函數中,但它完全忽略了這一行,所以繪製的線條與我在第一篇文章中提到的相同 – maks 2011-02-25 21:21:06

+0

@maks你可以發佈繪圖函數嗎? – Alpine 2011-02-25 21:24:22

0

您需要將JScrollPanel與滾動的JPanel相關聯。也就是說,你需要

​​

這將創建一個JScrollPane自動大小自身滾動過任何linePanel的大小。

務必確保包含您的線條的面板實際上足夠大以適合整條線。也就是說,你可能有類似的東西

linePanel.setSize(myLine.getWidth(), myLine.getHeight()); 

或任何您的關聯的行大小。需要注意的是像

lineScrollPanel.setSize(new Dimension(600, 400)); 

將調整滾動面板而不是裏面的東西 - 那就是,這將是一個600x400滾動窗格,但內部面板可以是更大更小,它會滾動。

+0

實際上在Netbeans中,當我向JScrollPane添加JPanel時,它會自動將JScrollPane與JPanel相關聯。當我做linePanel.setSize(myLine.getWidth(),myLine.getHeight());在我的代碼中:它清除面板上的所有行和滾動條不出現 – maks 2011-02-25 20:59:33

+0

如果沒有問題中的某些代碼,就很難知道自己做錯了什麼。 – donnyton 2011-02-25 21:30:32

1

您需要在LinePanel類定義如下方法:

public Dimension getPreferredSize() { 
    return new Dimension(myLine.getWidth(), myLine.getHeight()); 
    } 

確保myLine對象可用上述方法。而且,您將根據需要獲得滾動條。

P.S .:我假設LinePanel延伸JPanel並且是繪製線條的面板。

+0

+1重寫getPreferredSize()方法以返回首選大小的動態值是使用setPreferredSize()方法的首選方法。 – camickr 2011-02-25 21:11:07