이 코드를 실행하면 매우 이상한 동작이 발생합니다. 실행 중일 때 크기 조정 및 타이핑을 시도하여 의미를 확인하십시오. 이 하나 개의 라인으로JScrollPane에 구성 요소를 추가하면 이상한 동작이 발생합니다.
JScrollPane scrollPane = new JScrollPane();
scrollPane.add(jPanel);
을하고 동작이 예상대로 : 이제
import java.awt.BorderLayout;
import javax.swing.*;
public class FrameWithScrollPanel extends JFrame {
public static void main(String[] args) {
FrameWithScrollPanel myFrame = new FrameWithScrollPanel();
}
public FrameWithScrollPanel()
{
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
JTextArea textArea1 = new JTextArea(5, 30);
JTextArea textArea2 = new JTextArea(5, 30);
JPanel jPanel = new JPanel();
jPanel.setSize(400,400);
jPanel.setLayout(new BorderLayout());
jPanel.add(textArea1, BorderLayout.NORTH);
jPanel.add(textArea2, BorderLayout.SOUTH);
JScrollPane scrollPane = new JScrollPane();
scrollPane.add(jPanel);
getContentPane().add(scrollPane, BorderLayout.CENTER);
pack();
setVisible(true);
}
}
이 2 개 라인을 교체합니다.
JScrollPane scrollPane = new JScrollPane(jPanel);
설명서에 따라 JScrollPane 생성자는 Component를 받아들이므로 add()도 마찬가지입니다. 왜 행동의 차이가 있습니까?
감사에 표시하는 구성 요소입니다. 실제로 JScrollPane API에 대한 링크를 읽고 있었지만 대부분의 구성 요소가 add()를 사용하여 다른 패널에 추가 된 것 같기 때문에 JScrollPane은 add()가 대신 뷰포트를 대체하는 유일한 고유 한 JScrollPane입니다. 그것에 대한 추가 사항? –
@UnhandledException : JScrollPane는, 몇개의 서브 컴퍼넌트에 의해 구축 된 복잡한 컴퍼넌트입니다. 배제하고있는 중요한 것이 뷰포트입니다. 다른 구성 요소 구성 요소에는 여러 구성 요소로 구성된 JFrames와 같은 최상위 창을 포함 할 때주의해야합니다. 예를 들어 JFrame에서'setBackground (Color c)'를 호출하면 배경색이 변경되지 않습니다. 원하는 효과를 얻으려면 JFrame의 contentPane에서 메서드를 호출해야합니다. 그리고 JFrame에서'add (Component comp)'를 호출하면 실제로 contentPane에 추가됩니다. –