请参阅以下代码块
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();
}
}
为什么通过更改setBounds和setPreferredSize方法,同一程序的行为会有所不同;因为这两种方法在行为上看起来相同。
或者是这样的,当我们使用JScrollPane来获取Scrollbar时,我们必须使用setPreferredSize();我们将在JScrollPane中添加的组件的方法。
scrtemp.add(pnltemp);
它没有给出任何错误,但它也没有显示scrtemp中的pnltemp和滚动条。 但是当我们输入 scrtemp.getViewPort.add(pnltemp);
它没有给出任何错误,但它也显示了scrtemp中的pnltemp和滚动条。
我通过为JPanel和JScrollPane分配背景颜色来检查这一点。
任何人都能说明这个吗?
谢谢!
答案 0 :(得分:3)
来自JScrollPane
JavaDocs。
默认情况下,
JScrollPane
使用ScrollPaneLayout
来处理其子组件的布局。ScrollPaneLayout
以两种方式之一确定视口视图的大小:
- 如果视图实施
Scrollable
,则会使用getPreferredScrollableViewportSize
,getScrollableTracksViewportWidth
和getScrollableTracksViewportHeight
的组合,否则- 醇>
getPreferredSize
被使用。