2011-11-30 161 views
3

所以,我有一个网格布局,它将JScrollPane存储在每个单元格中。这些也被放入一个数组用于其他目的。 “视图”扩展了“JPanel”,因此它只是一个具有图像支持的常规面板。应用程序启动时,单元格填充了包含尚未有图像的View的scrollPane。JScrollPanes滚动条不显示

在这一点上,我看不到滚动条,但这并不重要,因为JPanel内没有任何东西。只要我打开一个图像并在JPanel的paintComponenet中使用drawImage,我就看不到滚动条了。以下是我创建的网格和滚动面板

private void createContentPane() 
{ 
     GridLayout gridLay = new GridLayout(GRID_ROWS, GRID_COLUMNS); 
     perspectiveTbl = new JScrollPane[NUM_PERSPECTIVE]; 
     mainPane = new JPanel(); 
     mainPane.setLayout(gridLay); 

     int idx = 0; 

     while(idx < perspectiveTbl.length) 
     { 
      perspectiveTbl[idx] = new JScrollPane(new View(modelImage)); 
      mainPane.add(perspectiveTbl[idx]); 
      idx++; 
     } 

     this.getContentPane().add(mainPane, BorderLayout.CENTER); 
} 

我不知道是什么原因滚动条的都没有显示出来,他们应该已经设置在面板的图像里面?

这里的应用程序的图像,你可以看到鞋的图片,所以没有办法查看照片的其他部分没有收到滚动条的:

Picture

+0

您确定滚动窗格需要滚动吗?他们的内容够大吗? – cdeszaq

+0

是的,图像很大,所以视图应该添加scrollPane。我觉得它没有考虑面板内的图像。 –

回答

0

感谢提示斯坦尼斯拉夫,我实际上已经想出了它,并在一小时前得到了它的工作,但是你确实给了正确的路径来使用preferredSize属性修复它。我最终重新实现了getPreferredSize与面板内的图像大小,添加了对绘制事件的重新验证,以便在加载图像后立即显示条形图。

public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    g.drawImage(image, 0, 0, null); 
    this.getViewScrollPane().revalidate(); 
} 

public Dimension getPreferredSize() 
{ 
    if(image != null) 
     return new Dimension(image.getWidth(),image.getHeight()); 
    else 
     return super.getPreferredSize(); 
} 
2

你可以用户不使用的JPanel图像,但通常的JLabel与图像

呼叫setPreferredSize()的面板,以反映图像的大小。

+1

为了更好地控制,请考虑实施Scrollable:http://docs.oracle.com/javase/6/docs/api/javax/swing/Scrollable.html – Puce