2013-06-03 3 views
2

버튼을 누를 때마다 런타임에 새 패널을 다른 패널에 삽입하려고합니다. 내 문제는 원래 패널의 공간이 부족하여 내가 추가 할 새 패널을 볼 수 없다는 것입니다. 내가 지금까지 시도했습니다 무엇런타임시 세로 스크롤 패널을 사용하여 JPanel을 다른 JPanel에 추가하는 방법은 무엇입니까?

: 없음 성공 세로 스크롤에 대한

  • 사용하여 스크롤.
  • flowlayout-no luck 사용. 수평 스크롤을 사용하지 않으려는 시도 - 새 패널을 오른쪽으로 계속 밀었습니다 (스크롤이 없기 때문에 새 패널을 가져올 수 없음).
  • borderlayout-no 행운을 사용해 보았습니다.

testpanel t = new testpanel(); 
t.setVisible(true); 
this.jPanel15.add(t); 
this.jPanel15.validate(); 
this.jPanel15.repaint(); 

jpanel15t 패널을 삽입하는 가정이 코드. flowlayout을 사용하면 t 패널을 아래쪽으로 밀어 넣을 수 있습니다. 수직 스크롤을 사용하지 않고 원하는대로 정렬 할 수 있습니다.

추신 : 내 GUI를 만들려면 netbeans를 사용하고 있습니다. 유일한 컨트롤로 BorderLayout.CENTER에서 JScrollPane에 넣어

답변

0
  1. 사용하는 대신 (외부)의 JScrollPaneJPanel
  2. 또는 JPanel에 대한 BorderLayout 있습니다. JScrollPane은 일반 JPanel을보기로 사용합니다.

은 어떤 경우에 당신은 다음 JScrollPane에 컨트롤을 추가합니다. 추가 컨트롤은 Ctrl 키입니다, 당신의 JScrollPane 변수가 spn한다고 가정 해 봅시다 :

// Creation of the JScrollPane: Make the view a panel, having a BoxLayout manager for the Y-axis 
JPanel view = new JPanel(); 
view.setLayout(new BoxLayout(view, BoxLayout.Y_AXIS)); 
JScrollPane spn = new JScrollPane(view); 

// The component you wish to add to the JScrollPane 
Component ctrl = ...; 

// Set the alignment (there's also RIGHT_ALIGNMENT and CENTER_ALIGNMENT) 
ctrl.setAlignmentX(Component.LEFT_ALIGNMENT); 

// Adding the component to the JScrollPane 
JPanel pnl = (JPanel) spn.getViewport().getView(); 
pnl.add(ctrl); 
pnl.revalidate(); 
pnl.repaint(); 
spn.revalidate(); 
+0

참고 경우 1/뷰 그 JScrollPane도 JPanel입니다. ctrl.setAlignmentX(Component.LEFT_ALIGNMENT);

+0

'JPanel pnl = (JPanel) spn.getViewport() .getView();'와 같이 추가 된 컨트롤의 맞춤을 직접 설정해야합니다. return null.it does not return the panel.I 주 패널에 JScrollPane을 추가하고 나머지 코드를 복사했지만 null 포인터 예외가 발생합니다. – user1864229

+0

당신은 JScrollPane을'JScrollPane spn = new JScrollPane (새로운 JPanel())'으로 만들어야 할 것입니다. 그것은 JPanel로 뷰를 설정하는 것을 의미합니다 (생성자의 매개 변수는 이유에 대한 뷰라고합니다).컨테이너가 RootPaneContainer (예 : JFrame 또는 JDialog)에서 파생되는 경우를 대비하여 스크롤 창을 내용 창으로 설정할 수 있습니다. –

1

내 문제는 원래 패널에 공간이 부족하고 내가 추가 해요 새로운 패널을 볼 수 없습니다입니다. 성공한 수직 스크롤을 위해서 스크롤 구획을 사용해 보았습니다.

FlowLayout은 수직 스크롤 막대가 표시되지 않도록 수직이 아닌 구성 요소를 가로로 추가합니다. 대신 Wrap Layout을 사용해보세요.

스크롤을 작성하는 기본 코드는 다음과 같습니다

JPanel main = new JPanel(new WrapLayout()); 
JScrollPane scrollPane = new JScrollPane(main); 
frame.add(scrollPane); 

을 그럼 당신은 동적으로 메인 패널에 구성 요소를 추가 할 때 당신이 할 것 :

main.add(...); 
main.revalidate(); 
main.repaint(); // sometimes needed