2012-02-22 85 views
17

我有一個JFrame,在這個JFrame中我有一個JPanel,我可以繪製這個面板可以是任何大小,所以我把它放到一個JScrollpane中,當面板大於窗口大小時,讓我滾動。JScrollPane中的Java JPanel?

  • JScrollPane的大小現在似乎鎖定在JPanel的大小

    1. 製作比JPanel的尺寸越小的JFrame窗口不顯示滾動條:

      遺憾的是並沒有如我所料工作我已經添加到它,其中它調整到它的JFrame窗口的邊界(它仍然有點這樣做,但只有垂直現在?!)

    2. JPanel似乎假定JScrollpane regar的大小什麼我的首選大小

    設置dless我知道我在做一些愚蠢的事,如果有人能指出我將不勝感激!

    JPanel _ImageCanvas = new JPanel(); // 'Canvas' to draw on 
    JScrollPane _ScrollPane = new JScrollPane(); 
    
    // set size of 'canvas' 
    _ImageCanvas.setMinimumSize(new Dimension(100,100)); 
    
    // Scroll pane smaller then the size of the canvas so we should get scroll bars right? 
    _ScrollPane.setMinimumSize(new Dimension(50,50)); 
    
    // Add a border to 'canvas' 
    _ImageCanvas.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); 
    
    _ScrollPane.setViewportView(JPanel); 
    

    非常感謝

    大衛

  • +8

    請學習Java命名約定並嚴格遵守 – kleopatra 2012-02-22 11:19:15

    +2

    當你說_ScrollPane.setViewportView(JPanel的);我假設你的意思是JPanel實例_ImageCanvas – 2012-02-22 11:22:40

    回答

    13

    setPreferredSize()是組件的技巧,setMinimumSize()甚至setSize()將被JScrollPane忽略。這是一個使用紅色邊框的示例。

    import java.awt.*; 
    
    import javax.swing.*; 
    
    public class Scroller extends JFrame { 
    
        public Scroller() throws HeadlessException { 
         final JPanel panel = new JPanel(); 
         panel.setBorder(BorderFactory.createLineBorder(Color.red)); 
         panel.setPreferredSize(new Dimension(800, 600)); 
    
         final JScrollPane scroll = new JScrollPane(panel); 
    
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         setLayout(new BorderLayout()); 
         add(scroll, BorderLayout.CENTER); 
         setSize(300, 300); 
         setVisible(true); 
        } 
    
        public static void main(final String[] args) throws Exception { 
         SwingUtilities.invokeLater(new Runnable() { 
          @Override 
          public void run() { 
           new Scroller().setVisible(true); 
          } 
         }); 
        } 
    } 
    
    0

    至於我記得有2個選項:

    有關詳細信息,請參閱的Javadoc: http://docs.oracle.com/javase/7/docs/api/javax/swing/JScrollPane.html

    +0

    您好Puce,感謝您的建議,事實證明,我需要添加一個'持有人'jPanel的scrollView,然後給它一個佈局管理器,以獲得所需的效果。 – FiniteRed 2012-02-22 11:33:21

    1
    • 設置首選大小的畫布上。
    • 增加尺寸100,100在我的電腦上至少太小。
    • 你可能想要使用新的GridLayout(1,1);對於你JFrame,如果你想在展開框架時展開scrollpane。
    7
    // suggest a size of 'canvas' 
    _ImageCanvas.setPreferredSize(new Dimension(100,100)); 
    
    // Scroll pane smaller then the size of the canvas so we should get scroll bars right? 
    _ScrollPane.setPreferredSize(new Dimension(50,50)); 
    
    // ..later 
    _Frame.pack(); 
    
    +0

    frame.pack();重新喜歡它。 – 2013-11-28 04:27:12

    0

    退房的Scrollable接口,這可能有助於與大小的問題。

    這兩種方法或許有所幫助:

    boolean getScrollableTracksViewportWidth(); 
    
    boolean getScrollableTracksViewportHeight();