代码之家  ›  专栏  ›  技术社区  ›  fiskeben

使JTextPane根据内容调整高度

  •  4
  • fiskeben  · 技术社区  · 15 年前

    我想得到一个 JTextPane 根据我喂它的内容调整它的高度。我所能做的就是用像素设置一个固定的像素高度。

    我该怎么做 文本窗格 折叠/展开以适合内容?

    我可以补充说我在 GridBagLayout 埃德 JPanel 已经添加到 JScrollPane .

    2 回复  |  直到 11 年前
        1
  •  0
  •   camickr    15 年前

    我不知道有什么直接的方法,但这可能会给你一些想法:

    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);
        }
    
        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);
        }
    }
    
        2
  •  0
  •   iKlsR    11 年前
    JTextPane tp = new JTextPane();
    setLayout(new BorderLayout()); // set layout on parent
    add(tp, BorderLayout.CENTER);
    

    这对我有用。