2012-02-22 92 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();