gpt4 book ai didi

java - 将 JScrollPane 添加到覆盖的 JPanel

转载 作者:行者123 更新时间:2023-12-01 18:07:02 25 4
gpt4 key购买 nike

我正在尝试创建一个计算循环算法的程序。逻辑工作得很好。我的问题是 overriden JPanel我用它来绘制时间线。时间线一直持续下去,没有明确的线长度。我想将覆盖面板添加到滚动 Pane ,以便它可以滚动。

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 无法工作。好像没有检测到这条线。我该如何解决这个问题?

最佳答案

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

仅当添加到滚动 Pane 视口(viewport)的组件的首选大小大于滚动 Pane 的大小时,滚动条才会出现。

The timeline goes on and on without definite line length.

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

关于java - 将 JScrollPane 添加到覆盖的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35617963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com