将JScrollPane添加到重写JPanel

时间:2016-02-25 03:54:14

标签: java swing jpanel jscrollpane

我正在尝试创建一个计算Round Robin算法的程序。逻辑很好。我的问题在于我用来绘制时间轴的overriden JPanel。时间线一直持续,没有明确的线长。我想将覆盖面板添加到滚动窗格,以便它可以滚动。

SampleGPane.class

||
return (x < DIM && x >= 0 && y < DIM && y >= 0);

调用

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.class

问题是,JScrollPane不起作用。它似乎没有检测到这条线。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

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

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

  

时间线在没有明确的行长度的情况下继续。

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