2012-08-28 2 views
3

나는 JFrame 윈도우를 가지고 있으며, 중간에 스크롤 가능한 JTable을 추가하고 싶습니다. 나는 JScrollPane을 생성하는 collectionTableScrollPane()이라는 메서드를 가지고 있습니다 (그리고 이것이 작동한다는 것을 알고 있습니다).작동하는 JScrollPane이 표시되지 않는 이유는 무엇입니까?

그런 다음 내 mainPanel 패널에 추가합니다. 그러나 JScrollPane의 왼쪽과 오른쪽에 강제로 30px 패딩을 추가하고 싶습니다. 논리적으로, 나는 을 중심으로 보유 JPanel을 만들고, JScrollPane의 어느 한쪽에 Box.createHorizontalStrut(30)을 추가합니다.

JPanel tableHolderPanel = new JPanel(new FlowLayout()); 
mainPanel.add(tableHolderPanel); 
tableHolderPanel.add(Box.createHorizontalStrut(30)); 
tableHolderPanel.add(collectionTableScrollPane()); 
tableHolderPanel.add(Box.createHorizontalStrut(30)); 

그러나, 나는 (화살표로 표시) 윈도우의 중간에 JScrollPane의 일종의 비효율적이되는 이상한 결과를 얻고있다.

문제가 무엇인지 아는 사람이 있습니까?

1

노트는 JTable은 두 개의 볼 수있는 네 개의 행을 포함하고있다.

+0

테이블을 확장하여 남은 공간을 차지 하시겠습니까? 이것은 플로우 레이아웃에서는 일어나지 않을 것입니다. 테이블의 크기가 적당합니다. –

+0

@IngoKegel 테이블의 크기가 올바르지 않으므로 행이 4 개 있으므로 – Redandwhite

답변

3

JScrollPaneFlowLayout과 함께 사용하면 과거에 몇 가지 문제가있었습니다. 동작이 까다로울 수 있습니다. 내용이 커지면 가로 스크롤 막대가 나타나거나 FlowLayout이 새 행을 추가해야합니다. JComponents에서 온

JPanel tableHolderPanel = new JPanel(new BorderLayout()); 
mainPanel.add(tableHolderPanel); 
tableHolderPanel.add(Box.createHorizontalStrut(30), BorderLayout.WEST); 
tableHolderPanel.add(collectionTableScrollPane(), BorderLayout.CENTER); 
tableHolderPanel.add(Box.createHorizontalStrut(30), BorderLayout.EAST); 
+1

그건 정확히 내가 한 일이고 완벽하게 작동합니다. 감사! – Redandwhite

2

알고있는 한 BoxBoxLayout과 함께 사용하는 것으로 가정합니다. 이로 인해 문제가 발생할 수 있습니다. 대신에 EmptyBorder을 사용하지 마십시오. tableHolderPane

+0

+1입니다. 항상 유용한 'BorderFactory'를 사용하여 EmptyBorder 기술을 완전히 잊었습니다. 나는 다른 곳에 그것을 사용하는 것을 끝내었다. – Redandwhite

1

BoxLayout 받아들이 크기, 당신은 JPanel

  1. 에 대한 pre_implemented 기본 FlowLayout과 같은 문제 :

    귀하의 경우

    , 나는 FlowLayoutBorderLayout 부산물을 대체합니다 오버플로로 PreferredSize을 반환하려면 JPanel 중첩 JScrollPane,

  2. 다른 LayoutManager을 사용하십시오. 당신이 정말로 빈 영역을 만들려 할 경우는 EASTWEST 영역 (PreferredSize를 반환 EI)이 개 JLabel들 넣어 GridBagLayout 또는 오늘날의 MigLayout

  3. BorderLayout를 사용하여 사용 NestedLayout

  4. 모든 것이 달려있다 수치 수정이 가능한지 여부

관련 문제