2017-01-03 111 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。我已經覆蓋了paintComponent(Graphics g)方法,其中我通過Graphics繪製矩形。

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);