2
JTextArea를 JPanel로 유지하려고합니다. JPanel이 JTextArea의 preferredSize와 일치하도록 크기를 조정하기를 원합니다. JTextArea는 모든 텍스트를 표시하는 데 필요한 크기이기 때문입니다. 궁극적으로, 나는 JTextArea와 Jpanel 사이에 빈 경계를두기를 원하지만, 예제 코드에서는 생략했다.JFrame 주위의 선 경계선이 사라집니다.
또한 JPanel 주위에 선 테두리가 있어야합니다. 아래의 코드는 약간의 시간 동안 작동하지만 때로 lineBorder의 아래쪽과 오른쪽 부분이 사라집니다. 왜 이런 일이 일어나는 걸까요? 오후 8시 30 분 P.S. 나는 크기를 업데이트하는 나의 방식이 매우 우아하지 않다는 것을 안다. 더 좋은 방법이 있습니까? 내 문제
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
public class TextThoughtView extends JPanel {
private JTextArea myTextArea;
TextThoughtView(){
//configure the View
setBackground(new Color(0, 0, 0, 0));
setLayout(new BorderLayout());
myTextArea = new JTextArea();
add(myTextArea,BorderLayout.CENTER);
//configure the border
Border border = BorderFactory.createLineBorder(new Color(150,150,150));
setBorder(border);
//configure the textArea
Font font = new Font("Monospaced", Font.BOLD, 12);
myTextArea.setFont(font);
myTextArea.setBackground(new Color(50, 50, 50)); //same as the color of the canvas.
myTextArea.setForeground(new Color(255, 255, 255)); //sets the text color
//myTextArea.setBorder(new EmptyBorder(new Insets(5,5,5,5)));
myTextArea.getDocument().addDocumentListener(new MyDocumentListener()); //add a listener for text changes
myTextArea.setSize(new Dimension(10,20));
//sync this's size with the textArea
sizeToFitTextArea();
}
//accessors
private void sizeToFitTextArea(){
setSize(myTextArea.getPreferredSize().width,myTextArea.getPreferredSize().height);
}
private class MyDocumentListener implements DocumentListener {
public void insertUpdate(DocumentEvent e) {
sizeToFitTextArea();
}
public void removeUpdate(DocumentEvent e) {
sizeToFitTextArea();
}
public void changedUpdate(DocumentEvent e) {
//Plain text components do not fire these events
}
}
public static void main(String args[]){
JFrame myFrame = new JFrame();
myFrame.setLayout(new BorderLayout());
myFrame.setSize(new Dimension(400,300));
JPanel myPanel = new JPanel();
myPanel.add(new TextThoughtView());
myPanel.setBackground(new Color(50,50,50));
myFrame.add(myPanel,BorderLayout.CENTER);
myFrame.setVisible(true);
}}
myPanel이 FlowLayout을 사용하고 있습니다. 이로 인해 별 도움이되지 않을 수 있습니다. 열이나 행이없는 JTextArea는 기본 크기 인 0x0을 가질 수 있습니다. 즉, 레이아웃하려는 모든 구성 요소가 보이지 않게됩니다. 네가 왜 귀찮게하는지 잘 모르겠다. JTextArea를 스크롤 창과 동일한 결과에 추가하십시오. – MadProgrammer
코드 블록에 일관되고 논리적 인 들여 쓰기를 사용하십시오. 코드의 들여 쓰기는 사람들이 프로그램 흐름을 이해하도록 돕기위한 것입니다. –
의견을 내 주셔서 감사합니다. 문제의 해결책은 sizeToFitArea() 메서드에서 revalidate()를 호출하는 것이 었습니다. JVM이 페인트를 자동으로 호출하지 않는 이유는 확실치 않지만 작동합니다. –