将 JScrollPane 添加到覆盖的 JPanel
Adding a JScrollPane to an overriden JPanel
我正在尝试创建一个程序来计算循环算法。逻辑工作正常。我的问题是我用来绘制时间线的 overriden 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.class
被 SampleLaunch.class
调用
public class
SampleLaunch
{
public static void main (String args[]) {
SampleGPane sgp = new SampleGPane ();
sgp.launchFrame ();
}
}
问题是,JScrollPane 无法工作。它似乎没有检测到该行。我该如何解决这个问题?
您需要将自定义面板的 getPreferredSize()
方法重写为 return 合理的大小。
只有当添加到滚动窗格视口的组件的首选大小大于滚动窗格的大小时,滚动条才会出现。
The timeline goes on and on without definite line length.
线长需要与您的绘画代码相匹配。所以你需要参数来控制画什么。这些参数也将用于计算组件的大小。在您的示例中,您迭代 35 次并将 x 增加 50,因此宽度将为 1750 加上起始 x 偏移量。
我正在尝试创建一个程序来计算循环算法。逻辑工作正常。我的问题是我用来绘制时间线的 overriden 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.class
被 SampleLaunch.class
public class
SampleLaunch
{
public static void main (String args[]) {
SampleGPane sgp = new SampleGPane ();
sgp.launchFrame ();
}
}
问题是,JScrollPane 无法工作。它似乎没有检测到该行。我该如何解决这个问题?
您需要将自定义面板的 getPreferredSize()
方法重写为 return 合理的大小。
只有当添加到滚动窗格视口的组件的首选大小大于滚动窗格的大小时,滚动条才会出现。
The timeline goes on and on without definite line length.
线长需要与您的绘画代码相匹配。所以你需要参数来控制画什么。这些参数也将用于计算组件的大小。在您的示例中,您迭代 35 次并将 x 增加 50,因此宽度将为 1750 加上起始 x 偏移量。