2013-02-21 100 views
-1

我正在尝试设计一类无限坐标板与网格。我已经扩展了JViewport,它在初始位置绘制ok(在JScrollPane之内)。如何告诉滚动窗格有任何方向滚动的空间?如何正确地扩展JViewport?

下不利于

  JCoordinateViewport coordinate = new JCoordinateViewport(); 
      coordinate.setBackground(Color.WHITE); 
      //coordinate.setPreferredSize(new Dimension(10000, 10000)); 

      JScrollPane scroll = new JScrollPane(); 
      //scroll.setViewportView(coordinate); 
      scroll.setViewport(coordinate); 
      scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
      scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
      scroll.getVerticalScrollBar().setMinimum(-10000); 
      scroll.getVerticalScrollBar().setMaximum(+10000); 
      scroll.getHorizontalScrollBar().setMinimum(-10000); 
      scroll.getHorizontalScrollBar().setMaximum(+10000); 

UPDATE

有谁知道JScrollPane中如何确定滚动的范围从它的视?

UPDATE2

我发现,如果最大值和最小值都setVisible称为后置出现滚动科技工作。

但不幸的是,paintConponent没有调用滚动。

为什么?

UPDATE3

虽然滚动条的工作,他们不改变视口位置。

为什么?

+0

滚动是基于加入到该滚动窗格的视口中的部件的优选尺寸。 – camickr 2013-02-21 22:29:07

+0

我没有组件,我扩展'JViewport',它的组件是'null'。 – 2013-02-21 22:35:51

+0

那么一个scrollpane被设计为在其视口中显示一个组件,所以这将是你的问题。 – camickr 2013-02-22 01:23:26

回答

2
CoordinateViewport coordinate = new JCoordinateViewport(); coordinate.setBackground(Color.WHITE); //coordinate.setPreferredSize(new Dimension(10000, 10000)); 

JScrollPane scroll = new JScrollPane(); //scroll.setViewportView(coordinate); 
scroll.setViewport(coordinate); 
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
scroll.getVerticalScrollBar().setMinimum(-10000); 
scroll.getVerticalScrollBar().setMaximum(+10000); 
scroll.getHorizontalScrollBar().setMinimum(-10000); 
scroll.getHorizontalScrollBar().setMaximum(+10000); 

下不利于

  • 那么问题应该是只在类名CoordinateViewport

  • 为更好地帮助越早张贴SSCCE,短,可运行,编译,大约是JFrameJScrollPaneJViewport

  • JViewport闪烁的减少需要设置

    1. 自己RepaintManager

    2. ,并通过在JViewport

    JViewport.setScrollMode使用/使用BUILT_IN方法(JViewport.BLIT_SCROLL_MODE ); JViewport.setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE); JViewport.setScrollMode(JViewport。SIMPLE_SCROLL_MODE);

  • 请参阅Passing current DateJTable how to change BackGround Color作为潜在来源SSCCE

2

如图here,在JViewport画出现“粘”到视,而在底层滚动组件滑动画下方。尺寸是TILE的整数倍:出于演示目的,视口的首选尺寸比底层面板小;在实践中,最好覆盖getPreferredSize()。另请参阅ScrollAction,当鼠标悬停在任何边界附近时,它会自动滚动。

image