2016-02-25 82 views
0

我正在尝试创建一个计算循环算法的程序。逻辑工作正常。我的问题是用于绘制时间线的overriden JPanel。时间线继续而且没有明确的线条长度。我想将重写面板添加到滚动窗格,以便它可以滚动。将JScrollPane添加到被覆盖的JPanel

SampleGPane.class

import java.awt.*; 
import javax.swing.*; 

public class 
SampleGPane 
{ 

    /* Timeline elements */ 
    Container timelineContainer; 
    JFrame timelineFrame = new JFrame(); 
    JPanel pnlDraw = new JPanel(); 
    JScrollPane timelineScroll; 

    public void 
    launchFrame() 
    { 
     GPanel gpane = new GPanel(); 
     timelineContainer = timelineFrame.getContentPane(); 
     timelineScroll = new JScrollPane (gpane); 
     timelineContainer.add (timelineScroll); 

     timelineFrame.setSize (500, 250); 
     timelineFrame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     timelineFrame.setVisible (true); 
    } 

    private class 
    GPanel extends JPanel 
    { 
     @Override 
     public void 
     paintComponent (Graphics g) 
     { 
      super.paintComponent (g); 
      int runningLineX = 0; 
      int runningLineY = 0; 

      // g.drawLine (50, 50, orderCount * 5, 50); 

      runningLineX += 50; 
      runningLineY += 50; 

      for (int count = 0; count < 35; count++) { 
       g.drawString ("J" + (count + 1), runningLineX + 50, 25); 
       runningLineX += 50; 
       // runningLineY += 50; 
       g.drawLine (runningLineX, runningLineY, runningLineX + 50, runningLineY); 
      } 
     } 
    } 

} 

SampleGPane.classSampleLaunch.class

public class 
SampleLaunch 
{ 
    public static void main (String args[]) { 
     SampleGPane sgp = new SampleGPane(); 
     sgp.launchFrame(); 
    } 
} 

的问题是所谓的,JScrollPane的将无法正常工作。它似乎没有检测到这条线。我该如何解决?

回答

4

您需要覆盖自定义面板的getPreferredSize()方法以返回合理的尺寸。

只有在添加到滚动窗格的视口的组件的首选大小大于滚动窗格的大小时,滚动条才会显示。

时间线继续而且没有明确的线条长度。

行长将需要匹配您的绘画代码。所以你需要参数来控制要绘制的内容。这些参数也将用于计算组件的大小。在你的例子中,你迭代35次,并将x增加50,所以宽度将是1750加上开始的x偏移量。

+0

谢谢!这有助于我解决我的问题。所以关键在于计算花费的时间,将其传递给构造函数,构造函数将设置一个用于覆盖'getPreferredSize()'方法的变量,然后启动框架。 –