Java 将JScrollPane添加到覆盖的JPanel

Java 将JScrollPane添加到覆盖的JPanel,java,swing,jpanel,jscrollpane,Java,Swing,Jpanel,Jscrollpane,我正在尝试创建一个程序来计算循环算法。逻辑运作良好。我的问题是我用来画时间线的。时间线不停地前进,没有确定的线长。我想将覆盖面板添加到滚动窗格中,使其可以滚动 采样板类 import java.awt.*; import javax.swing.*; public class SampleGPane { /* Timeline elements */ Container timelineContainer; JFrame timelineFrame = new JF

我正在尝试创建一个程序来计算循环算法。逻辑运作良好。我的问题是我用来画时间线的。时间线不停地前进,没有确定的线长。我想将覆盖面板添加到滚动窗格中,使其可以滚动

采样板类

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);
            }
        }
    }

}

问题是,JScrollPane无法工作。它似乎没有检测到线路。如何修复此问题?

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

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

时间线不停地前进,没有确定的线长


线条长度需要与您的绘画代码相匹配。因此,您需要参数来控制要绘制的内容。这些参数也将用于计算部件的尺寸。在您的示例中,您迭代35次并将x增加50,这样宽度将为1750加上起始x偏移量。

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

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

时间线不停地前进,没有确定的线长


线条长度需要与您的绘画代码相匹配。因此,您需要参数来控制要绘制的内容。这些参数也将用于计算部件的尺寸。在您的示例中,您迭代35次,并将x增加50,因此宽度将为1750加上起始x偏移量。

谢谢!这有助于我解决问题。因此,关键是计算花费的时间,将其传递给构造函数,构造函数将设置一个变量来覆盖
getPreferredSize()
方法,然后启动框架。谢谢!这有助于我解决问题。因此,关键是计算花费的时间,将其传递给构造函数,构造函数将设置一个变量来覆盖
getPreferredSize()
方法,然后启动框架。
public class
SampleLaunch 
{
    public static void main (String args[]) {
        SampleGPane sgp = new SampleGPane ();
        sgp.launchFrame ();
    }
}