我的代碼是這樣的:如何獲取JScrollPane內部(可更改)組件的完整大小?
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JTextPane text = new JTextPane();
text.setPreferredSize(new Dimension(200,260));
text.setContentType("text/html");
text.setEditable(false);
text.setText("some random thing makes this pane bigger than its perferred size");
JScrollPane scroll = new JScrollPane(text);
panel.add(scroll);
frame.add(panel);
frame.setVisible(true);
frame.pack();
frame.validate();
我的問題是我不知道如何讓JTextPane
(在文本這裏)的實際大小。我已經嘗試了所有getSizes
& getVisibleRects
,scroll.getViewport().getViewSize()
......但他們都返回[200,260]
。有人可以幫我解決這個問題嗎?我非常感謝您提供的任何幫助。
編輯:我發現了問題:進行了驗證框架前被處決我getSizes
請求。 我可運行測試代碼:
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
public class Abcd {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JTextPane text = new JTextPane();
text.setPreferredSize(new Dimension(150,126));
text.setContentType("text/html");
text.setEditable(false);
//Alicia Vikander's photo. She's cute anw.
String tmp = "<a href=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Alicia_Vikander.jpg/220px-Alicia_Vikander.jpg\"><img src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Alicia_Vikander.jpg/220px-Alicia_Vikander.jpg\"/></a>";
//text.setText("asdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sfasdf fssdfsdf sfdsdf sd sdf sf");
text.setText(tmp);
JScrollPane scroll = new JScrollPane(text);
scroll.setPreferredSize(new Dimension(150,126));
panel.add(scroll);
frame.add(panel);
frame.setVisible(true);
frame.pack();
frame.validate();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for (double i = 0; i < 1000; i = i + 0.0001){
System.out.print(text.getHeight()+"\n");
if (text.getHeight()!=123){ //3 pixels for the scrollpane's border i guessed
System.out.print("i = "+i+", height = "+text.getHeight());
break;
}
}
}
在我的電腦i
大約是50 - 100。因此,我的新的問題是:是否有反正我可以,只要我可以,但仍然確保幀被驗證得到realsize ? 非常感謝。
你測試的規模實際上並沒有改變當我運行它時,「文本」的大小,而不是隻是換行。我把你的測試文本乘以50,然後它改變了大小,'text.getSize()'相應地改變了它的輸出 – phflack
',但它們都返回了[200,260]。 '不要使用'setPreferredSize()'方法。 – camickr
謝謝大家。我終於可以找出爲什麼他們返回'[200,260]'而不是實際大小:'getSizes'請求在幀被驗證之前完成。 我已經編輯了這個問題,把我的可運行示例(原來的那個比較微薄,我的錯誤)。我現在的問題是如何確保當框架已經過驗證時我可以獲得大小。 再次感謝您的幫助。 –