gpt4 book ai didi

java - 如何获取 JScrollPane 内(可更改)组件的完整大小?

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:11 24 4
gpt4 key购买 nike

我的代码是这样的:

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(此处的文本)的实际大小。我已经尝试了所有 getSizesgetVisibleRectsscroll.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。所以我的新问题是:我是否可以尽快获得实际大小,但仍确保框架经过验证?非常感谢。

最佳答案

我强烈建议您开始使用不同的 Layout managers .

如果我对你的代码进行一些调整:

JFrame frame = new JFrame();

final JTextPane text = new JTextPane();
text.setContentType("text/html");
text.setEditable(false);
text.setText("some random thing makes this pane bigger than its perferred size");

final JScrollPane scroll = new JScrollPane(text);
scroll.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
System.out.println("Size of JScrollPane is: " + scroll.getSize());
System.out.println("Size of JTextPane is: " + text.getSize());
}
});

frame.setLayout(new BorderLayout());
frame.add(scroll,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);

我们将获得调用其 scroll.getSize() 的滚动组件的大小和调用其 text.getSize() 的文本组件的大小

关于java - 如何获取 JScrollPane 内(可更改)组件的完整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34534889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com