저는 카드 레이아웃 JPANel을 가지고 있는데, 그 안에 JScrollPane이 있으며, 그 안에는 JPlayle이 있습니다. springlayout JPanel은 위에서 아래로 JPanels로 동적으로 추가되지만, JButton이 JPanel을 넘어 서면 JScrollPane은 추가 컨텐츠를 수용하지 않습니다. 또한, 분명히 springlayout JPanel의 높이는 내용이 추가 되더라도 0으로 유지됩니다. resizable 속성을 true로 설정하면 아무것도 수행되지 않습니다.JScrollPane은 JPanel의 크기가 조정되지 않아 반응하지 않습니다.
다음은 코드 단편입니다. 나는 cardlayout JPanel과 코드를 바꾸는 것을 생략했다.
SpringLayout mainlayout = new SpringLayout();
JPanel maincard = new JPanel(mainlayout); // springlayout JPanel
for (int i = 0; i < info.size(); i++) {
GridLayout entryLayout = new GridLayout(1, 1);
JPanel entry = new JPanel(entryLayout);
entry.setSize(800, 30);
JButton name = new JButton();
name.setSize(250, 30);
name.setText(info.get(i).name);
entry.add(name);
mainlayout.putConstraint(SpringLayout.NORTH, entry,
i * 100 + 5,
SpringLayout.NORTH, maincard); // moves JPanel lower and lower
maincard.add(entry);
}
maincard.setSize(width, 30 * (info.size() + 1));
maincard.revalidate();
JScrollPane scroll = new JScrollPane(maincard);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setSize(200, 200); // this and setPreferredSize don't affect
cardpanel.add(scroll, cardName);
cardpanel.setSize(20, 200); // no effect
'분명히 springlayout JPanel의 높이가 0입니다.'- SpringLayout은 필요한 모든 제약 때문에 사용하기에 더 복잡한 레이아웃 관리자 중 하나입니다. 내 제안은 다른 레이아웃 관리자를 사용하는 것입니다. 또는 SpringLayout을 실제로 사용하려면 [SpringLayout 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html)에서 Swing 자습서의 섹션을 읽어야합니다.) 자세한 내용 및 작업 예제. 이 자습서에는 다른 표준 레이아웃 관리자에 대한 섹션도 포함되어 있습니다. – camickr
예, 다른 레이아웃도 시도했음을 잊어 버렸습니다. 예상되는 출력은 JPanels라는 항목과 함께 연락처 목록과 같은 것으로 가정되었습니다. GridLayout을 시도했지만 항목의 크기를 제어 할 수 없습니다. Box/BoxLayout의 경우 항목이 컨테이너를 지나치지 않습니다 (그리드 레이 아웃). GridBagLayout도 같은 문제가 있습니다. 테두리는 문제가되지 않습니다 (오버레이 할 필요가 없습니다). 흐름은 줄 바꿈만으로 가로로 표시됩니다. –
구성 요소의 크기가 사용 가능한 공간에 맞게 조정 되었기 때문에 GridLayout이 작동하지 않습니다. BoxLayout 또는 GridBagLayout은 컴포넌트를 수직으로 추가하는 데 사용할 수 있습니다. – camickr