2012-03-04 1 views
1

JPanel의 다른 영역으로 스크롤 할 수있는 화면을 만들려고합니다. JPanel의 다른 영역을 보려면 JScrollPane을 사용하려고합니다. 즉, JPanel이 JFrame보다 큰 그림을 그리기를 원합니다.JScrollPane이 뷰를 이동하지 않습니다.

JFrame mainFrame = new JFrame("My Frame");   
mainFrame.setSize(700, 700); 

clickScreen = new ClickPanel(); 
clickScreen.setPreferredSize(new Dimension(2000, 2000)); 

JScrollPane scrollArea = new JScrollPane(clickScreen, 
             JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
             JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 


mainFrame.getContentPane().add(scrollArea, BorderLayout.CENTER); 

여기서 ClickPanel은 JPanel을 확장하고 그리기에 사용되는 클래스입니다.

내 문제는 : 스크롤 막대를 사용하여 스크롤 할 때 뷰 포인트가 이동하지만 내 paintComponent의 그림이 같은 위치에 표시됩니다. 나는 그 아래에있는 새로운 영역으로 스크롤하여 그곳에 그릴 수 있기를 원합니다.

+0

이 panel.setSize에 의해 또한 크기 (2000,2000)를 설정하려고 참조 할 수가 JScrollPane에 대한 자세한 내용을 알고; –

+0

이 방법으로'setPreferredSize()'를 사용하지 마십시오; 이 [Q & A] (http://stackoverflow.com/q/7229226/230513)도 참조하십시오. – trashgod

답변

2

이 작업을 시도 할 수 있습니다 :

import java.awt.BorderLayout; 
import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.SwingUtilities; 


public class ScrollingView extends JFrame { 

    private static final long serialVersionUID = -866635590539200791L; 

    private JScrollPane scrollPane; 
    private JPanel panel; 

    public ScrollingView() { 
     panel = new JPanel(); 
     panel.setPreferredSize(new Dimension(2000, 2000)); 
     panel.setLayout(new BorderLayout()); 

     panel.add(new JLabel("Label 1 Set to West"), BorderLayout.WEST); 
     panel.add(new JLabel("Label 2 Set to East"), BorderLayout.EAST); 

     scrollPane = new JScrollPane(panel); 

     setPreferredSize(new Dimension(700, 700)); 
     setContentPane(scrollPane); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new ScrollingView(); 
      } 
     }); 
    } 
} 
+1

Note 그림에 대해서만'setPreferredSize()'를 사용하십시오. 그리기 전용으로 사용하는 경우 OP의 'ClickPanel'이 자체 선호 크기를 결정해야합니다. – trashgod