2014-01-09 78 views
1

我试图让hist(HistoryPanel extends JPanel)成为JScrollPane的视口,histScroll。问题是水平滚动条不会显示出来,除非我强迫它显示滚动条策略(在下面的代码中),即使我强制它,也无处滚动。问题是HistoryPanel的大小拒绝水平增加。我尝试了不同的方式来设置hist的大小,但它仍然保持水平固定大小。但是,垂直方向,它工作得很好。我不明白问题是什么。JScrollPane视口大小

public SuperPanel(GoPanel panel) 
{ 
    super(new BorderLayout()); 
    setFocusable(false); 
    score = new ScorePanel(); 
    go = panel; 
    go.scorePanel = score; 
    score.setPreferredSize(new Dimension(panel.getWidth(), 20)); 
    hist = new HistoryPanel(go); 
    hist.setPreferredSize(new Dimension(panel.getWidth()*20, 100*5)); 
    //hist.setMinimumSize(new Dimension(panel.getWidth()*20, 100*5)); 
    //hist.setSize(new Dimension(panel.getWidth()*20, 100*5)); 
    go.histPanel = hist; 
    histScroll = new JScrollPane(hist, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
    histScroll.setPreferredSize(new Dimension(panel.getWidth(), 100)); 
    add(score, "North"); 
    add(panel, "Center"); 
    add(histScroll, "South"); 
} 

我可以向下滚动所有我想要的,但我无法滚动到右侧。这是一个大问题,因为它切断了一些图像,在这个程序中,水平滚动实际上比垂直滚动更重要。

enter image description here

+0

发布链接至您的图像。 – alex2410

+0

panel.getWidth()的值是什么? – wxyz

+0

[这是截图](http://i.imgur.com/cCEx8LI.png) – iamstickfigure

回答

1

你不需要设置首选大小组件,您添加到JScrollPane,因为这将是不可滚动的,只是删除下一行:

hist.setPreferredSize(new Dimension(panel.getWidth()*20, 100*5));

又读next post约将大小设置为组件。

+0

我不认为这真的有帮助。该面板必须是一个大型画布,可以显示我可以转动的图像。如果我删除该行,我无法滚动。 – iamstickfigure

+0

并且该面板中没有组件,所以它不像让布局管理器处理它那么简单。这只是一个我用paintComponent绘制的画布。我在上面的评论中发布了一个截图 – iamstickfigure