【发布时间】:2020-03-24 03:58:02
【问题描述】:
我有一个 JScrollPane,里面有一个 JPanel,除了一个缺陷外,它工作得很好。当我运行程序时,JScrollPane 被添加并显示在它的父面板上就好了,但是里面的内容没有显示出来。
如果我调整窗口大小或在 JPanel 上滚动,内容会立即显示。我还检查了 JPanel 和 JScrollPane 的尺寸都是正确的。 Repaint 也被调用,所以我认为我没有遗漏任何东西。
我也看过这个问题,但没有帮助: JScrollPane doesn't show scroll bars when JPanel is added
有意使用 Null 布局,我正在做自己的格式设置,而不是考虑多种尺寸的屏幕。提前谢谢你!
class FilesPanel extends JPanel
{
public JScrollPane scroller;
private FileHolderPanel holder;
public FilesPanel()
{
//setLayout(null);
setBackground(extraLight);
holder = new FileHolderPanel();
System.out.println(holder.getWidth() + " " + holder.getHeight() + " " + holder.getX() + " " + holder.getY() + " " + holder.getBounds());
scroller = new JScrollPane();
JViewport viewport = new JViewport();
viewport.add(holder);
scroller.setViewport(viewport);
scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scroller.setBorder(BorderFactory.createEmptyBorder());
scroller.setBackground(blue);
add(scroller);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
scroller.setLocation(0, 0);
scroller.setSize(filesWidth, frame.getHeight() - 40);
}
class FileHolderPanel extends JPanel
{
public FileHolderPanel()
{
setBackground(extraLight);
setLayout(null);
setVisible(true);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
}
}
}
【问题讨论】:
-
从
paintComponent中取出代码,这不是自定义绘画的使用方式,也不是一个好主意。据我所知,“主要”问题是FileHolderPanel未能为JScrollPane使用提供适当的大小提示 -
viewport.add(holder);也不是必需的 -
做你自己的布局比你正在做的事情要复杂得多。布局确实让事情变得更容易。
-
这里添加了完整的代码文件夹:drive.google.com/drive/folders/…这个类叫做FilePanel
-
嗨布拉德凯尔。在 Stack Overflow 上,您应该在问题中包含 minimal reproducible example。你不能指望人们去其他地方寻找资源来解决你的问题。不仅如此,Stack Overflow 是一个问题和答案的存储库,旨在帮助任何面临类似问题的人。一旦你从你的谷歌驱动器中删除代码,你的问题就会变得毫无用处。
标签: java swing jscrollpane