我有一個JScrollPane和JPanel裏面(我想在JPanel上繪製)。另外我有一種方法可以繪製線條長度的參數。如果該行的長度超過JScrollPane上的JPanel的大小(高度或寬度),我希望我的JScrollPane滾動。 我該怎麼做?JScrollPane的使用
P.S.我試過jScrollPane.scrollRectToVisible,但它不起作用
我有一個JScrollPane和JPanel裏面(我想在JPanel上繪製)。另外我有一種方法可以繪製線條長度的參數。如果該行的長度超過JScrollPane上的JPanel的大小(高度或寬度),我希望我的JScrollPane滾動。 我該怎麼做?JScrollPane的使用
P.S.我試過jScrollPane.scrollRectToVisible,但它不起作用
這裏是實現你想要什麼
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));
一個例子。
該示例可能無法正確重新繪製組件,只能演示如何使用'JScrollPane',但正如您所說的那樣_「我也有一種繪製線條長度參數的方法。」_它不會是一個問題。 – Alpine 2011-02-25 20:57:50
實際上,當我按下按鈕時,我想要滾動。我貼這個和平p。setPreferredSize(new Dimension(weidth,height))代碼到我的繪圖函數中,但它完全忽略了這一行,所以繪製的線條與我在第一篇文章中提到的相同 – maks 2011-02-25 21:21:06
@maks你可以發佈繪圖函數嗎? – Alpine 2011-02-25 21:24:22
您需要將JScrollPanel與滾動的JPanel相關聯。也就是說,你需要
這將創建一個JScrollPane自動大小自身滾動過任何linePanel的大小。
務必確保包含您的線條的面板實際上足夠大以適合整條線。也就是說,你可能有類似的東西
linePanel.setSize(myLine.getWidth(), myLine.getHeight());
或任何您的關聯的行大小。需要注意的是像
lineScrollPanel.setSize(new Dimension(600, 400));
將調整滾動面板而不是裏面的東西 - 那就是,這將是一個600x400滾動窗格,但內部面板可以是更大更小,它會滾動。
您需要在LinePanel
類定義如下方法:
public Dimension getPreferredSize() {
return new Dimension(myLine.getWidth(), myLine.getHeight());
}
確保myLine
對象可用上述方法。而且,您將根據需要獲得滾動條。
P.S .:我假設LinePanel
延伸JPanel
並且是繪製線條的面板。
+1重寫getPreferredSize()方法以返回首選大小的動態值是使用setPreferredSize()方法的首選方法。 – camickr 2011-02-25 21:11:07
而不是說「不行」。請解釋發生了什麼以及期望的結果。 – jzd 2011-02-25 20:12:38
它將線條拉到JPanel的最後(即使線條比面板的尺寸更長),就這些了。我想讓我的JScrollPane滾動(滾動條必須出現,我可以看到該行的全長) – maks 2011-02-25 20:25:25