2017-01-03 9 views
-2

JPanel을 확장하는 클래스가 있는데 여기에서 paintComponent(Graphics g) 메서드를 재정의했습니다. 그러나, 내가 그린 직사각형이나 스크롤 막대를 볼 수 없습니다. 나는이 문제를 해결 한Java에서 JPanel을 스크롤 할 수있게 만드는 방법은 무엇입니까?

MyClass mainPanel = new MyClass(); 
    mainPanel.setPreferredSize(new Dimension(1000, 1000)); 
    mainPanel.setLayout(new BorderLayout()); 

    JPanel scrollPanel = new JPanel(); 
    scrollPanel.setSize(new Dimension(2000, 2000));  
    JScrollPane scrollPane = new JScrollPane(scrollPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //Let all scrollPanel has scroll bars 
    scrollPane.setViewportView(scrollPanel); 
    scrollPane.setOpaque(true); 

    scrollPanel.revalidate(); 
    mainPanel.add(scrollPane); 


    JFrame frame = new JFrame("Scrollable Panel"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(mainPanel); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
+0

가지고 당신에서 [공식 가이드]를 읽을 수 (https://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html) – AxelH

+2

시도'scrollPanel.setPreferredSize (새 치수 (2000, 2000));'. 현재 귀하의'scrollPanel'은 아무것도 축소하지 않으므로'scrollPane'은 스크롤 바를 보여줄 필요가 없습니다. – khelwood

+1

@ NimrodArgov, 코드를 읽었습니다. – AxelH

답변

0

: 나는 아래에 다음 코드가 메인 함수에서

. MyClass는 JPanel을 확장합니다. 그리고 Graphics를 통해 직사각형을 그리는 paintComponent (Graphics g) 메소드를 덮어 썼습니다.

MyClass mainPanel = new MyClass() 
mainPanel.setPreferredSize(new Dimension(7000, 1000)); 
mainPanel.setLayout(new BorderLayout()); 

JScrollPane scrollPane = new JScrollPane(mainPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //Let all scrollPanel has scroll bars 
scrollPane.setPreferredSize(new Dimension(1000, 900)); 


JFrame frame = new JFrame("Scrollable JPanel"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.add(scrollPane); 
frame.setSize(1000, 900); 
frame.pack(); 
frame.setLocationRelativeTo(null); 
frame.setVisible(true);