gpt4 book ai didi

java - 为什么当我们对添加到 JScrollPane 的 JPanel 使用 setPreferredSize 时它会向 JScrollPane 显示滚动条

转载 作者:行者123 更新时间:2023-11-29 06:04:14 28 4
gpt4 key购买 nike

请看下面的代码块

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
public class test extends JFrame {
public test(){

this.setBounds(0,0,300,700);

JPanel pnltemp= new JPanel();

//pnltemp.setBounds(0,0,400,1000);
pnltemp.setPreferredSize(new Dimension(400,1000));

JScrollPane scrtemp= new JScrollPane();


scrtemp.getViewport().add(pnltemp);
this.getContentPane().add(scrtemp);

this.getContentPane().add(scrtemp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);

}

public static void main(String args[]){
new test();

}
}
  1. 当我们通过注释“pnltemp.setBounds(0,0,400,1000);”来运行上面的代码时并将其替换为“pnltemp.setPreferredSize(new Dimension(400,1000));”窗口显示水平和垂直滚动条。但是当我们通过注释“pnltemp.setPreferredSize(new Dimension(400,1000));”来运行同一个程序时并将其替换为“pnltemp.setBounds(0,0,400,1000)”窗口不显示水平和垂直滚动条。

为什么同一个程序通过更改 setBounds 和 setPreferredSize 方法表现不同;因为这两种方法在行为上看起来相同。

或者是这样的,当我们使用 JScrollPane 来获取滚动条时,我们必须使用 setPreferredSize();我们要在 JScrollPane 中添加的组件的方法。

  1. 我的第二个问题是当我们将 pnltemp 添加到 scrtemp 时,即 JPanel 被直接添加到 JScrollPane 然后它不会给出错误意味着当我们说

scrtemp.add(pnltemp);

它没有给出任何错误,但它也没有在 scrtemp 中显示 pnltemp 和滚动条。但是当我们输入scrtemp.getViewPort.add(pnltemp);

它没有给出任何错误,但它还在 scrtemp 中显示了 pnltemp 和滚动条。

我通过将背景颜色分配给 JPanel 和 JScrollPane 来检查这一点。

有人能解释一下吗?

谢谢!

最佳答案

来自JScrollPane JavaDocs。

By default JScrollPane uses ScrollPaneLayout to handle the layout of its child Components. ScrollPaneLayout determines the size to make the viewport view in one of two ways:

  1. If the view implements Scrollable a combination of getPreferredScrollableViewportSize, getScrollableTracksViewportWidth and getScrollableTracksViewportHeight is used, otherwise
  2. getPreferredSize is used.

关于java - 为什么当我们对添加到 JScrollPane 的 JPanel 使用 setPreferredSize 时它会向 JScrollPane 显示滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9092198/

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