2012-08-28 25 views
-2

我有一個JPanel(a)與盒子佈局,並且所有組件垂直堆疊它。 其中,我有一個JPanel(b)水平框佈局。對於JPanel(b)我添加了剛性區域JPanel和JTextArea。JTextArea和行(字)包裝

我想要的是,JPanel(b)每次JTextArea由於自動換行而擴展時都會增加它的高度。但是,由於我的JPanel在開始時具有單行的高度。 JTextArea不擴展,因爲所有空間都已填充。

有沒有辦法解決這個問題,一個替代方案?

它並不一定是JPanel和JTextArea,只是可以包含組件和一個JTextComponent來支持多行。

class Question extends JPanel 
{ 
public JPanel questionArea; 
public JTextArea number, question; 

public Question(Page page) 
{ 
    setSize(new Dimension(556, 100)); 
    setBackground(Color.PINK); 
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); 

    Border in = BorderFactory.createDashedBorder(Color.BLACK); 
    Border out = BorderFactory.createMatteBorder(0, 0, 10, 0, Color.WHITE); 
    setBorder(BorderFactory.createCompoundBorder(out, in)); 

    questionArea = new JPanel(); 
    questionArea.setPreferredSize(new Dimension(556, 32)); 
    questionArea.setBackground(Color.YELLOW); 
    questionArea.setLayout(new BoxLayout(questionArea, BoxLayout.LINE_AXIS)); 

    out = BorderFactory.createMatteBorder(0, 0, 8, 0, Color.WHITE); 
    setBorder(BorderFactory.createCompoundBorder(out, in)); 

    number = new JTextArea(); 
    number.setPreferredSize(new Dimension(25, 32)); 
    number.setBackground(Color.GREEN); 
    number.setFont(new Font("Arial", Font.BOLD, 15)); 
    number.setText("10."); 
    number.setEditable(false); 

    question = new JTextArea(); 
    question.setPreferredSize(new Dimension(494, 32)); 
    question.setBackground(Color.PINK); 
    question.setFont(new Font("Arial", Font.BOLD, 15)); 
    question.setText("What is the first question?"); 

    questionArea.add(Box.createRigidArea(new Dimension(35, 32))); 
    questionArea.add(number); 
    questionArea.add(question); 

    add(questionArea); 

    page.editArea.add(this, page.content); 
} 
} 

休息

class Page extends JPanel 
{ 
public JPanel editArea; 
public Box.Filler blank; 

public Page(JPanel panel) 
{ 
    setLayout(null); 
    setBounds(92, panel.getPreferredSize().height+40, 794, 1123); 

    setBackground(Color.WHITE); 

    editArea = new JPanel(); 
    editArea.setLayout(new BoxLayout(editArea, BoxLayout.PAGE_AXIS)); 
    editArea.setBounds(119, 96, 556, 931); 
    editArea.setBackground(Color.LIGHT_GRAY); 

    blank = new Box.Filler(new Dimension(556, -1), new Dimension(556, 931), new Dimension(556, 931)); 
    editArea.add(blank); 

    add(editArea); 

} 
} 

Page類是本身的一個JPanel與空佈局,無需代碼,對不對?

+0

你是否將LineWrap&WrapStyleWord設置爲true? – MadProgrammer

+1

你有SSCCE嗎? – StanislavL

+0

你不明白。我已經設置好了,是的,文本將包裝,但前提是容器中有足夠的空間容納JTextArea本身(JPanel(b))。但是,我的容器大小與JTextArea的當前大小相匹配,我希望它在出現換行時展開。但是,它永遠不會發生,因爲容器太小。 不久之後,我想讓我的JPanel跟上由於我的JPanel被固定到JTextArea當前高度而被阻塞的JTextArea自動調整大小功能。 –

回答

0

我覺得水平BoxLayout做你。

它將(使用getPreferredSize()在實例)顯示在其首選大小的組件和我不相信它會很容易調整它。您可能需要將Panel(b)更改爲BorderLayout,並將組件添加到CENTER中的EAST,WESTJTextArea

+0

不,它沒有幫助,而'JTextArea'實際上是西... –