Swing中JScrollPane添加JPanel设置setPreferredSize问题
来源:互联网 发布:电脑数据流量统计 编辑:程序博客网 时间:2024/05/16 08:47
panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
Dimension ds = new Dimension(100, 100);panel.setPreferredSize(ds);jspane.setViewportView(panel);
上面的代码是在jspane的滚动视图组件中添加一个流式布局的JPanel。然后设置一个panel的prefSize首选值。
在java api中这样解释:
setPreferredSizepublic void setPreferredSize(Dimension preferredSize)设置此组件的首选大小。如果 preferredSize为 null,则要求 UI 提供首选大小。
就是说如果不提供这个值,ui会进行计算并设置这个值,这里,会根据jspane的ui来设置值。(默认的JScrollPane组件是自动添加横竖滚动条的)
panel中添加组件,默认FlowLayout布局器会进行流式布局,这里定义是左对齐。如果没有设置prefSize值,则使用根据JScrollPane组件jspane的ui自动进行计算的首选大小prefSize。而JScrollPane组件默认是会进行滚动显示,所以,如果panel中添加的组件过多导致超出了panel的宽度,JScrollPane的ui会计算一个合适的prefSize值来提供给panel组件,此时,panel的流布局会一直在同一水平方向布局,而不会换行。如下图显示:
就算取消了JScrollPane的横向滚动条,panel也不会进行换行布局,此时获取panel的prefSize也会远远大于panel的默认长宽
java.awt.Dimension[width=6845,height=110]
Component中的preferredSize()方法
- public Dimension preferredSize() {
- /* Avoid grabbing the lock if a reasonable cached size value
- * is available.
- */
- Dimension dim = prefSize;//获取默认prefSize
- if (dim == null || !(isPreferredSizeSet() || isValid())) {
- synchronized (getTreeLock()) {
- prefSize = (peer != null) ?
- peer.getPreferredSize() :
- getMinimumSize();
- dim = prefSize;
- }
- }
- return new Dimension(dim);
- }
此时设置panel的prefSize值,JScrollPane就不会计算panel的大小,panel的组件如果超出panel的宽度,流布局就会自动转行。
不过,这样设置的效果是,JScrollPane的竖方向也不会计算panel的大小,一旦panel的组件过多,导致超出panel的高度,滚动条也不会显示,可以手动计算panel的组件数量布局,然后设置panel的prefSize。
- private void resize()
- {
- int nums = panel.getComponentCount(); //组件数量
- //100 添加的组件长和宽, 5是流布局FlowLayout的默认组件间隔
- int h = (nums / (panel.getWidth() / (100+5))) * (100 + 5);
- panel.setPreferredSize(new Dimension(100, h));
- //手动设置panel的首选大小,如果不需要横向滚动,width的值可以设置和前面默认一样
- updateUI();
- }
- Swing中JScrollPane添加JPanel设置setPreferredSize问题
- Swing中JScrollPane添加JPanel设置setPreferredSize问题
- JScrollPane控件中添加JPanel后滚动条显示问题
- swing中Jpanel设置透明度
- 在JPanel面板中添加JScrollPane滚动条
- JScrollPane中添加JPanel不出现滚动条
- JScrollPane中添加JPanel不出现滚动条
- JScrollPane控件中添加其他控件的问题&&JScrollPane设置滚动条&&调整滚动速度
- java中向Jscrollpane中加入Jpanel
- 4、Swing在JPanel中添加背景图片方法
- swing 中setSize和setPreferredSize的区别
- swing中setSize与setPreferredsize的区别
- swing中setSize和setPreferredSize区别
- JPanel、JScrollPane 面板详解
- swing JList JScrollPane使用时不显示数据的问题 JList设置可多选
- swing JList JScrollPane使用时不显示数据的问题 JList设置可多选
- JFrame(框架)中添加和设置JPanel(面板)的方法
- JFrame(框架)中添加和设置JPanel(面板)的方法
- 深入剖析MFC中Windows消息处理机制
- CareerCup-4.6
- C# DataGridView给行加序号
- 设计模式之状态模式
- RGB和Raw RGB
- Swing中JScrollPane添加JPanel设置setPreferredSize问题
- Tar.bz2怎么安装,tar.gz怎么安装
- 线程同步基础知识
- Android开发之Spinner的使用
- WebView作为嵌入浏览器进行OAuth1.0认证
- POJ2553 The Bottom of a Graph
- PB编译生成的BIN文件的格式
- Friends ZOJ Problem Set - 3710 the 10th 浙江ACM赛
- 黑马程序员 ASP.NET中 CheckboxList.Items.Count=0的解决办法