2012-09-25 519 views
0

我在JScrollPane中有一個JTextPane,並且我想在JTextPane的頂部添加一個空的「填充空間」,以便JTextPane中的第一個實際文本行出現在底部JViewport。我有一個模糊的想法,在JTextPane的開頭可能有一個空的段落,並在每次調整JViewport的大小時修改其高度。任何人都有想法如何實現這樣的事情?也許有一個更簡單的方法?JTextPane和空填充空間

+0

爲什麼? (15個字符) – kleopatra

+0

我使用JTextPane作爲聊天組件,許多聊天客戶端都有這種行爲。 – n00bster

+0

感謝您的解釋 - 不是自言自語:-) – kleopatra

回答

3

您可以使用setMargin()來設置組件邊框與其文本之間的邊距。例如:

textPane.setMargin(new Insets(20, 0, 0, 0)); 

編輯:

請看下面的非常簡單的例子演示了使用setMargin()

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.FontMetrics; 
import java.awt.Insets; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextPane; 

public class MarginDemo { 
    private static void createAndShowUI() { 
     final JTextPane textPane = new JTextPane(); 
     final JScrollPane scrollPane = new JScrollPane(textPane); 

     String text = "Lorem ipsum dolor sit amet, " 
       + "consectetur adipiscing elit." 
       + "Fusce nec sapien id diam consequat adipiscing."; 
     textPane.setText(text); 

     JFrame frame = new JFrame("MarginDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(scrollPane); 

     frame.setSize(new Dimension(200, 200)); 
     frame.setVisible(true); 

     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       FontMetrics metrics = textPane.getFontMetrics(textPane 
         .getFont()); 
       textPane.setMargin(new Insets(scrollPane.getViewport() 
         .getHeight() - metrics.getHeight(), 0, 0, 0)); 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 

下面是結果:

enter image description here

+0

完美!就是我以後的樣子。 – n00bster