2016-10-13 2 views
0

JPanel 카드를 기본 패널에 여러 개 놓으려고합니다. 새 카드 패널이 맞지 않으면 다음 줄에 넣기를 원합니다. 아래 이미지에서 모든 카드 패널이 오른쪽으로 가고, HORIZONTAL_SCROLLBAR_ALWAYS 가로 스크롤이 설정되어있는 것을 볼 수 있습니다. 그래서 여기에 내 메인 패널의 각 라인에 4 개의 카드 패널이 있어야 세로 스크롤이 작동합니다. 아래 응답에 따른 스 네일 흐름 레이아웃 요소에서 스크롤 가능 JPanel

public class PanelTraining extends JPanel{ 
    private static final long serialVersionUID = 1L; 


    public PanelTraining(List<FccMeta> ffcms) { 
     super(new BorderLayout()); // set layout to absolute 
     setPreferredSize(new Dimension(880, 580)); 
     setBorder(new LineBorder(Color.decode("#A11E1E"),1, true)); 

     JPanel pnlChart = new JPanel(); 

     pnlChart.setPreferredSize(new Dimension(860, 180)); 
     pnlChart.setBackground(Color.YELLOW); 
     add(pnlChart, BorderLayout.NORTH); 

     JPanel pnlTrSet = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5)); 
     //pnlTrSet.setSize(860, 380); 

     for (FccMeta fccMeta : ffcms) { 
      JPanel pnlCard = new MyCustomPanelCard(); 
      pnlTrSet.add(pnlCard); 
     } 


     JScrollPane scroll = new JScrollPane(pnlTrSet); 
     //scroll.setPreferredSize(new Dimension(860, 380)); 
     scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     add(scroll, BorderLayout.CENTER); 

    } 
} 

enter image description here

EDIT

. 나는 this Class

ScrollablePanel pnlTrSet = new ScrollablePanel(new FlowLayout()); 
pnlTrSet.setScrollableWidth(ScrollablePanel.ScrollableSizeHint.FIT); 
pnlTrSet.setScrollableBlockIncrement(
     ScrollablePanel.VERTICAL, ScrollablePanel.IncrementType.PIXELS, 230); 
당신은 스크롤의 뷰포트의 크기에 고정 된 폭을 갖도록하여 패널의 Scrollable 인터페이스를 구현해야

enter image description here

+1

1) 더 나은 도움을 받으려면 [MCVE] 또는 [Short, Self Contained, Correct Example] (http://www.sscce.org/)를 게시하십시오. 2) ASCII 아트 또는 GUI의 * 의도 된 * 레이아웃의 간단한 그림을 최소한의 크기로 제공하고 크기를 조정할 수 있으면 더 많은 너비와 높이를 제공하십시오. –

답변

3

으로 내 구현을 변경했습니다.

기본적으로 getScrollableTracksViewportWidth() 메서드를 재정 의하여 "true"를 반환해야합니다.

쉬운 방법은 Scrollable Panel을 사용하는 것입니다. 이 속성을 제어 할 수있는 메서드가 있습니다.

편집 :

위의 경우 가로 스크롤 막대가 나타나지 않습니다. 그러나 패널의 기본 크기 계산이 여전히 올바르지 않기 때문에 FlowLayout은 모든 행을 하나의 행에 계속 표시합니다.

버튼을 줄이려면 패널의 FlowLayout을 Wrap Layout으로 바꿔야합니다. 은 패널의 기본 높이를 올바르게 다시 계산하므로 구성 요소를 줄 바꿈하고 세로 스크롤 막대가 나타날 수 있습니다.

+0

답변을 상세하게 부탁드립니다. 내 패널의 Scrollable 인터페이스가 무엇을 의미합니까? – gabby

+1

@gabby, 1) Scrollable 인터페이스에 대한 자세한 내용은 API를 읽으십시오. 누군가가 당신이 알지 못하는 수업/인터페이스를 제안 할 때 처음 시작하는 곳입니다. 2) 제안 된 방법을 사용하는 예를 포럼/웹에서 검색하십시오. 3) [스크롤 - 알기 쉬운 클라이언트 구현] (http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html#scrollable)에 대한 스윙 튜토리얼의 섹션을 읽으십시오. – camickr

+0

예. 나는 당신이 제공 한 것을 얻은 결과로 내 질문을 업데이트했습니다. – gabby