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

这可能吗?

对于纯文本来说几乎是微不足道的(height = line count * line height, width = 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 = r.y + 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); 
    } 
} 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!