我有一個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與空佈局,無需代碼,對不對?
你是否將LineWrap&WrapStyleWord設置爲true? – MadProgrammer
你有SSCCE嗎? – StanislavL
你不明白。我已經設置好了,是的,文本將包裝,但前提是容器中有足夠的空間容納JTextArea本身(JPanel(b))。但是,我的容器大小與JTextArea的當前大小相匹配,我希望它在出現換行時展開。但是,它永遠不會發生,因爲容器太小。 不久之後,我想讓我的JPanel跟上由於我的JPanel被固定到JTextArea當前高度而被阻塞的JTextArea自動調整大小功能。 –