gpt4 book ai didi

java - 将组件添加到 JScrollPane 有奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 04:44:38 25 4
gpt4 key购买 nike

执行这段代码会产生非常奇怪的行为。运行时,尝试调整大小并键入以了解我的意思。

import java.awt.BorderLayout;
import javax.swing.*;

public class FrameWithScrollPanel extends JFrame {
public static void main(String[] args) {
FrameWithScrollPanel myFrame = new FrameWithScrollPanel();
}


public FrameWithScrollPanel()
{
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
JTextArea textArea1 = new JTextArea(5, 30);
JTextArea textArea2 = new JTextArea(5, 30);

JPanel jPanel = new JPanel();
jPanel.setSize(400,400);
jPanel.setLayout(new BorderLayout());
jPanel.add(textArea1, BorderLayout.NORTH);
jPanel.add(textArea2, BorderLayout.SOUTH);

JScrollPane scrollPane = new JScrollPane();
scrollPane.add(jPanel);
getContentPane().add(scrollPane, BorderLayout.CENTER);
pack();
setVisible(true);
}
}

现在,替换这两行:

    JScrollPane scrollPane = new JScrollPane();
scrollPane.add(jPanel);

有了这一行,行为就如预期的那样。

    JScrollPane scrollPane = new JScrollPane(jPanel);

根据文档,JScrollPane 构造函数接受一个组件,add() 也是如此。为什么行为不同?

最佳答案

这是错误的:

scrollPane.add(jPanel);

由于您要用此添加替换 JScrollPane 的所有重要视口(viewport),因此无法正常运行。您应该按照 JScrollPane tutorial 将其添加到 JScrollPane 的视口(viewport)中和 JScrollPane API :

scrollPane.setViewportView(jPanel);

scrollPane.getViewport().add(jPanel);

故事的寓意:如有疑问,请阅读文档。

请注意,如果将 jPanel 传递给 JScrollPane 的构造函数,

JScrollPane scrollPane = new JScrollPane(jPanel);

它会自动为您将组件放置到视口(viewport)中。

根据 API:

public JScrollPane(Component view)
Creates a JScrollPane that displays the contents of the specified component, where both horizontal and vertical scrollbars appear whenever the component's contents are larger than the view.
Parameters:
view - the component to display in the scrollpane's viewport

关于java - 将组件添加到 JScrollPane 有奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37738321/

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