2016-12-23 14 views
0

저는 카드 레이아웃 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 
+0

'분명히 springlayout JPanel의 높이가 0입니다.'- SpringLayout은 필요한 모든 제약 때문에 사용하기에 더 복잡한 레이아웃 관리자 중 하나입니다. 내 제안은 다른 레이아웃 관리자를 사용하는 것입니다. 또는 SpringLayout을 실제로 사용하려면 [SpringLayout 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html)에서 Swing 자습서의 섹션을 읽어야합니다.) 자세한 내용 및 작업 예제. 이 자습서에는 다른 표준 레이아웃 관리자에 대한 섹션도 포함되어 있습니다. – camickr

+0

예, 다른 레이아웃도 시도했음을 잊어 버렸습니다. 예상되는 출력은 JPanels라는 항목과 함께 연락처 목록과 같은 것으로 가정되었습니다. GridLayout을 시도했지만 항목의 크기를 제어 할 수 없습니다. Box/BoxLayout의 경우 항목이 컨테이너를 지나치지 않습니다 (그리드 레이 아웃). GridBagLayout도 같은 문제가 있습니다. 테두리는 문제가되지 않습니다 (오버레이 할 필요가 없습니다). 흐름은 줄 바꿈만으로 가로로 표시됩니다. –

+0

구성 요소의 크기가 사용 가능한 공간에 맞게 조정 되었기 때문에 GridLayout이 작동하지 않습니다. BoxLayout 또는 GridBagLayout은 컴포넌트를 수직으로 추가하는 데 사용할 수 있습니다. – camickr

답변

0

나는이 문제에 약간의 문제가있었습니다. 나를 위해 일한 것은 경계선을 사용하는 것이 었습니다. 스크롤 패널을 업데이트하기 위해 새 요소를 추가 한 후 revalidate를 호출해야합니다.

public BookingTable() 
{ 
    super(new BorderLayout()); 
    _contentPanel = new JPanel(); 
    _contentPanel.setLayout(new BoxLayout(_contentPanel, BoxLayout.Y_AXIS)); 
    _scrollPane = new JScrollPane(_contentPanel); 

    add(_scrollPane, BorderLayout.CENTER); 
} 

private void addToPanel(EntryView panel) 
{ 
    panel.setPreferredSize(new Dimension(150, 35)); 
    panel.setMaximumSize(new Dimension(160, 45)); 
    panel.setMinimumSize((new Dimension(80, 30))); 

    _contentPanel.add(panel); 
    _contentPanel.revalidate(); 
} 

희망이 당신을 도와줍니다 : 여기

내가 잠시 다시 내 프로젝트에 사용 된 코드의 예입니다! 또 다른 팁은 Scrollpane에서 요소를 제거하는 경우 Repaint를 호출하여 요소를 UI에서 실제로 제거하기 위해 Repaint를 호출해야합니다.

+0

메소드 이름은 대문자로 시작하면 안됩니다. – camickr

+0

저는 최근에 저 혼자서 발걸음을 옮겼습니다. 제가 바꾸어 놓은 오래된 코드예요. –