- 浏览: 465804 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
bewithme:
我把一个透明背景的PNG画到了另外一张图片上,为啥透明背景就变 ...
Java绘制PNG图片时的黑色背景问题 -
davidwkj:
Y坐标的公式不对。算出来的值是错的!!!!!!!!!!!!!! ...
两条线段是否相交,计算交点公式。 -
zhang9181156:
茅塞顿开哈,感谢
android--相机开发 -
leecinwell:
哈
Android条用照相机,实现可剪切功能 -
life_菜鸟飞:
非常感谢作者这么详细的讲解,自己也动手实践了一下,发现前面几个 ...
android--相机开发
JSplitPane看似比Delphi的spliter难用许多。不过介于swing可以方便的使用记事本一类文本编辑器直接书写依据布局的界面代码我们还是姑且容忍它带来的不便。但在使用JSplitPane时候在MSDN上被问的比较频繁却没有良好答案的问题是JSplitPane如何按比例分割,setDividerLocation(double d)为什么没有作用。
要解决这个问题首先看JAVA DOC.关于setDividerLocation的介绍是这样的:
setDividerLocationpublic void setDividerLocation(double proportionalLocation)设置分隔条的位置为 JSplitPane 大小的一个百分比。
根据 setDividerLocation(int) 来实现此方法。此方法以分隔窗格的当前大小为基础迅速改变窗格的大小。如果分隔窗格没有正确地实现并且不显示在屏幕上,此方法将不产生任何影响(新的分隔条位置将成为 0(当前的 size * proportionalLocation ))。
参数:proportionalLocation - 指示百分比的双精度浮点值,从 0 (top/left) 到 1.0 (bottom/right)抛出:IllegalArgumentException- 如果指定的位置为 < 0 or > 1.0
看完后没什么概念。。。只觉得写的不是那么直白,也许确有什么猫腻在里边。特别是"如果分隔窗格没有正确地实现并且不显示在屏幕上,此方法将不产生任何影响"这句,没大理解。。。
因而去看看JSplitPane的源码。关于setDividerLocation大致如下:
public void setDividerLocation(double proportionalLocation) {
if (proportionalLocation < 0.0 ||
proportionalLocation > 1.0) {
throw new IllegalArgumentException("proportional location must " +
"be between 0.0 and 1.0.");
}
if (getOrientation() == VERTICAL_SPLIT) {
setDividerLocation((int)((double)(getHeight() - getDividerSize()) *
proportionalLocation));
} else {
setDividerLocation((int)((double)(getWidth() - getDividerSize()) *
proportionalLocation));
}
}
这下有些明白了,setDividerLocation(double)这个函数会用到getWidth()或者getHeight()这样的函数,而java桌面程序在没有主窗体setVisible之前,如果使用布局,尚未validate()和paint()每个组件的宽和高默认都是0。也就是说一定要在主窗体setVisible(true)之后再使用setDividerLocation(double)才会有效。
下边给出一个例子:
package tlw.zbe.info.stratch;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import java.awt.BorderLayout;
import javax.swing.JPanel;
public class MainFrame extends JFrame {
public static void main(String[] args){
MainFrame f=new MainFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设定窗体关闭后自动退出进程
f.setSize(800,600);//设定窗体的默认尺寸
f.setExtendedState(JFrame.MAXIMIZED_BOTH);//设定窗体状态为屏幕最大化,即全屏尺寸。
f.setVisible(true);//显示窗体
f.jSplitPane1.setDividerLocation(0.7);//设定分割面板的左右比例(这时候就生效了,如果放在setVisible(true)这据之前就不会有效果。)
}
public MainFrame() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);
jSplitPane1.add(jPanel1, JSplitPane.LEFT);
jSplitPane1.add(jPanel2, JSplitPane.RIGHT);
}
JSplitPane jSplitPane1 = new JSplitPane();
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
}
很好看出是JBuilder的界面代码,运行它会发现JSplitPane已经乖乖的按照比例分割。问题是当拖动split后界面做一个最大化后比例不能维持。解决这个问题就是加一个ComponentListener。例如下:
package tlw.zbe.info.stratch;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentAdapter;
public class MainFrame extends JFrame {
public static void main(String[] args){
MainFrame f=new MainFrame();
}
private void myInit(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设定窗体关闭后自动退出进程
setSize(800,600);//设定窗体的默认尺寸
setVisible(true);//显示窗体
jSplitPane1.setDividerLocation(0.7);//设定分割面板的左右比例(这时候就生效了,如果放在setVisible(true)这据之前就不会有效果。)
/*****初始化事件***/
this.addComponentListener(new ComponentAdapter(){
public void componentResized(ComponentEvent e) {
jSplitPane1.setDividerLocation(0.7);
}
});
}
public MainFrame() {
try {
jbInit();
myInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);
jSplitPane1.add(jPanel1, JSplitPane.LEFT);
jSplitPane1.add(jPanel2, JSplitPane.RIGHT);
}
JSplitPane jSplitPane1 = new JSplitPane();
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
}
看到有个myInit()方法?这是我个人的习惯,自己写的界面代码区为了分于生成的都放在myInit()下边。一般来说里边初始化一些界面默认值和界面事件。添加的ComponentListener决定了任意改变界面尺寸后JSplitPane都会按比例分割。
发表评论
-
Java绘制PNG图片时的黑色背景问题
2013-03-13 16:09 45441. 生成png图片 int width = ... -
Swing开发时必定会碰到的11个问题及解决方案
2013-03-07 09:50 18161.JTable ,JTable如何在内容里面存放组件(下拉 ... -
Java新浪微博客户端开发第六步(完结&&开源)
2012-11-07 16:04 1232这次所达到的:修 ... -
Java新浪微博客户端开发第四、五步
2012-11-07 16:04 11850、Main:主函数入 ... -
Java新浪微博客户端开发第二、三步
2012-11-07 16:03 1368MainDialog:此微博客户端的界面,分上下 ... -
Java新浪微博客户端开发第一步
2012-11-07 15:50 1456到http://open.weibo.com/w ... -
JTree用法及JTree使用经验总结
2011-11-29 13:35 1167import java.awt.Dimension; ... -
java解析xml文件四种方式
2011-11-29 13:27 10111.介绍 1)DOM(JAXP Cri ... -
JFrame设置大小和显示setSize和pack
2011-11-25 15:29 2368/* * 总结: ... -
java web start 的相关配置
2011-10-27 10:54 1246部署 五、把包放到服务器webapps目录中 ... -
JAVA文件打包成可执行文件
2011-10-27 10:53 1927一、编写程序Test.java并编译为Test.clas ... -
jdom操作xml,解析和写入
2011-10-17 14:42 31751、解析xml import java.util.It ... -
一个关于java继承的题目
2011-09-28 09:35 1856复制来的: 一个关于java继承的题目,跟大家分享下。题目如 ... -
ArrayList、 Vector 、LinkedList区别与用法
2011-09-27 17:16 4214一: 最近用到了,所 ... -
我对Swing各组件的认识
2011-06-30 10:08 10192010-09-28 我对Swing各组件的认识 注:整 ... -
JDialog关闭的问题
2011-06-12 16:30 5743今天用到JDialog,突然发现,点击关闭后不能完全退出, ... -
关于JComboBox触发事件总是执行两次的问题
2011-05-11 17:46 6647今天用到JcomBox,在JComboBox的监听事件时总 ... -
关于JPanel的布局显示问题
2011-05-09 15:07 3495关于JPanel的布局显示: 前几天写一个小程序,用到 ... -
JTree 和 JTable 的综合应用 Demo
2011-04-29 09:22 1784本文是一个 JTree 和 JTable 的综合应用 Demo ... -
JSplitPane按比例分割的问题
2011-04-28 08:51 6918JSplitPane看似比Delphi的spliter难用许多 ...
相关推荐
JSplitPane
JSplitPane的具体用法,分隔面板的使用,适合初学者。若是有更深层的见解,请作补充
JSplitPane是Swing库提供的一个分割面板组件。它可以在图形界面中创建两个子组件,并允许用户通过拖动分割条来调整子组件的大小。
主要介绍了Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例,本文直接给出代码实例和效果截图,需要的朋友可以参考下
主要为大家详细介绍了swing分割窗口控件JSplitPane的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
NULL 博文链接:https://silentwu.iteye.com/blog/1605617
这是一个成绩管理系统,对于初学者来说,值得拿来看看。
本章目标;常见的GUI组件;Swing vs AWT;GUI API;Container(容器);Component(组件类);Helper(辅助类);GUI开发的层次结构 ;...分割条面板JSplitPane;分割条面板JSplitPane;;菜单;使用菜单;Color类;Font类;ImageIcon类
主要为大家详细介绍了Swing拆分窗格控件JSplitPane的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2 主窗体的显示,JFRAME 类实现,JSplitPane.HORIZONTAL_SPLIT类将主窗体左右分割 3 JPanel 应用 创建 LEFT 1 2 3,RIGHT 1 2 3来添加左右窗体 4 获取当前日期Calendar类实现 Calendar.Year Calendar.Month ...
XML的树形目录,转载。
编写继承自JFrame类的窗口应用程序,...窗口中间使用JSplitPane类实现水平分割效果:左边是一个面板(流式布局),其中放置5个按钮;右边是一个面板(边框布局),面板东、南、西、北各放置1个按钮,面板中间放一个文本区。
JSplitPane spane=new JSplitPane(JSplitPane.VERTICAL_SPLIT); //实例化分隔面板 p1.add(new JLabel("地址")); //增加组件到面板上 p1.add(jtfAddress); spane.add(new JScrollPane(jtpShow),...
拆分窗格:JSplitPane 滚动窗格:JScrollPane 工具栏:JToolBar 桌面窗格:JDesktopPane 内部框架:JInternalFrame 分层窗格:JLayeredPane 标签:JLabel 按钮:JButton 开启/关闭按钮:JToggleButton 复选框:...
句法: [h1,h2,hDivider] = uisplitpane(hParent,'propName',propVal,...) 描述: UIPLITPANE 将指定的容器(图形、面板或框架,由句柄 hParent 引用)拆分为由可移动分隔线分隔的两个不同的窗格(面板)。...
JAVA JTREE实例代码、JAVA JTABLE实例代码
JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); //实例化分隔面板 split.setDividerLocation(140); //设置分隔位置 split.add(list); //增加组件到分隔面板 split.add(jta); ...
1.JPanel面板 2.JScrollPane滚动窗格 3.JSplitPane拆分窗格
如何使用面板组件 使用JPanel 使用JScrollPane 使用JSplitPane 使用JTabbedPane 使用JIntemalFrame 使用JLayeredPane 使用JRootPane
一个JSplitPane,左边JTree,右边JTable。实现学生管理系统 连接数据库获取数据表