2012-08-28 2 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); 

} 
} 

페이지 클래스는 오른쪽, 널 (null) 레이아웃으로 JPanel의 자체 코드가 필요 없다?

+0

LineWrap 및 WrapStyleWord를 true로 설정 했습니까? – MadProgrammer

+1

SSCCE를 보유하고 있습니까? – StanislavL

+0

당신은 그것을 얻지 못합니다. 네, 그렇습니다. 그리고 텍스트가 줄 바꿈 될 것입니다,하지만 JTextArea 자체를 포함하는 컨테이너에 충분한 공간이있는 경우에만 (JPanel (b)). 그러나 컨테이너 크기가 JTextArea의 현재 크기와 일치하며 줄 바꿈이 발생할 때 컨테이너 크기가 확장되기를 원합니다. 그러나 컨테이너가 너무 작기 때문에 절대 발생하지 않습니다. 잠깐, 제 JPanel이 JTextArea 현재 높이로 고정되어 있기 때문에 막히는 JTextArea 자동 크기 조정 기능을 따라 잡기를 바랍니다. –

답변

0

내가 생각하는 수평 BoxLayout는 당신을하고있다.

을 그것은 (인스턴스에 getPreferredSize()를 사용하여) 선호하는 크기로 구성 요소를 표시하고 나는 그것이 쉽게 당신을 위해 크기를 조정합니다 생각하지 않습니다. Panel (b)를 BorderLayout으로 변경하고 EAST, WESTJTextAreaCENTER으로 구성 요소를 추가 할 수 있습니다.

+0

아니, 도움이되지 않습니다. 그리고'JTextArea'는 실제로 서쪽입니다 ... –