2014-07-10 4 views
0

내 JFrame에는 화면 치수보다 폭과 높이가 더 큰 중앙 패널이 있습니다.이 중앙 패널을 JScrollPane 내부에 표시하고 싶습니다. 이제 문제는 수직 스크롤 막대에 나타나지 않습니다. . JScrollPane는 수직이 아닌 수평 위치만을 표시합니다. 다음은 내 JFrame의 코드입니다. JScrollPane 내부의 JPanel : 세로 막대가 나타나지 않습니다.

import java.awt.*; 
import javax.swing.*; 

public class TestScroll extends JFrame { 

    public TestScroll() { 
     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 

     this.setSize(screenSize.width,screenSize.height); 
     getContentPane().setLayout(new BorderLayout()); 
     JPanel centerPanel=new JPanel(new BorderLayout()); 
     centerPanel.setSize(screenSize.width+50,screenSize.height+50);//I want centralPanel to be of more width and height so to test JScollPane 


     JPanel northPanel = new JPanel(); 
     Dimension d1=centerPanel.getSize(); 
     northPanel.setPreferredSize(new Dimension(d1.width,d1.height/3)); 
     northPanel.setBackground(Color.BLACK); 
     centerPanel.add(northPanel, BorderLayout.NORTH); 

     JPanel innerPanel = new JPanel(); 
     //Dimension d1=centerPanel.getSize(); 
     //panel2.setPreferredSize(new Dimension(d1.width,d1.height/2)); 
     innerPanel.setBackground(Color.ORANGE); 
     centerPanel.add(innerPanel, BorderLayout.CENTER); 

     JScrollPane pane=new JScrollPane(centerPanel); 
     pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 

     getContentPane().add(pane, BorderLayout.CENTER); 
     this.setVisible(true); 

    } 

    public static void main(String[] args) { 

new TestScroll(); 
    } 

} 

친절

+0

가능한 [중복] (http://stackoverflow.com/q/9092198/230513). – trashgod

답변

2

스윙에서, 당신은 구성 요소 배치에 대한 여러 가지 방법이 .. 나 세로 스크롤 막대를 표시하는 데 도움이 수동으로 모든 일을 나에 LayoutManager를 사용합니다.

setSize()으로 전화하는 것은 컨테이너에 LayoutManager을 사용하지 않을 때만 작동합니다. 패널은 기본적으로 컨테이너 크기 (윈도우)에 맞게 조정되며 구성 요소 크기를 관리하는 setSize() 메서드가 아니기 때문에 원하는 크기가 아니라 BorderLayout 관리자입니다.

그러나 화면 크기보다 큰 콘텐츠로 패널을 채우는 경우 스크롤 막대가 나타납니다.

구성 요소의 getPreferredSize()을 다시 정의 할 수 있으므로 herehere과 같이 원하는 차원을 반환합니다. 당신이 JScrollPane의보다 더 큰에서 구성 요소는 사용자가 설정할 수있는 경우에도 스크롤 막대를 표시하려면

는이 liek :

pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
+0

좋은 지적, 나는 대답을 편집했다 – Smajl

0

는이 innerPanel.setPreferredSize(new Dimension(d1.width,2*(d1.height/3))); 수직 스크롤 막대를 볼 수 있습니다.

+0

좋은 Krish! 귀하의 대답은 정확합니다 – user3741146

+0

@ user3741146 :이 답변이 도움이되었다고 생각하는 경우, 귀하는 그것을 수락하거나 투표를하실 수 있습니다. –

관련 문제