如何测量/计算文档需要呈现的大小?

我有一个javax.swing.text.Document ,我想计算文档需要呈现自身的边界框的大小。

那可能吗?

对于纯文本( height = line count * line heightwidth = max width over each line )几乎是微不足道的。但是,我怎样才能用RTF,HTML或任何其他文件呢?

这段代码可能会给你一些想法:

 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; public class TextPanePerfectSize extends JFrame { JTextField textField; JTextPane textPane; public TextPanePerfectSize() { textField = new JTextField(20); textField.setText("add text"); getContentPane().add(textField, BorderLayout.NORTH ); textField.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { try { Document doc = textPane.getDocument(); doc.insertString(doc.getLength(), " " + textField.getText(), null); textField.setText(""); Dimension d = textPane.getPreferredSize(); Rectangle r = textPane.modelToView( textPane.getDocument().getLength() ); d.height = ry + r.height; textPane.setPreferredSize( d ); getContentPane().validate(); // pack(); } catch(Exception e2) {} } }); JLabel label = new JLabel("Hit Enter to Add Text to Text Pane"); getContentPane().add(label); JPanel south = new JPanel(); textPane = new JTextPane(); textPane.setText("Some text"); textPane.setEditable( false ); // textPane.setPreferredSize( new Dimension(120, 23) ); south.add( textPane ); // getContentPane().add(south, BorderLayout.SOUTH); getContentPane().add(textPane, BorderLayout.SOUTH); } public static void main(String[] args) { JFrame frame = new TextPanePerfectSize(); frame.setSize(200, 200); frame.setLocationRelativeTo( null ); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setVisible(true); } } 

Document界面是文本组件的模型 ,所以Document没有真正的边界; 但是View有许多“在模型和视图坐标系之间转换”的方法。 根据目标,可能有所帮助。

尝试使用这个来测量固定宽度的高度。 http://java-sl.com/tip_text_height_measuring.html

getPreferred将返回你的宽度和高度。