固定JSplitPane比例分割
2016-06-25 17:30
411 查看
从事Swing的开发已经有一年时间了,常常涉及一些Swing控件的使用,比如JSplitPane,有时要求以固定的比例来分割左右/上下子控件的固度/高度。
JSplitPane提供了这样一个方法来控制分割栏所处的位置:
public void setDividerLocation(double proportionalLocation)
设置分隔条的位置为 JSplitPane 大小的一个百分比。
根据 setDividerLocation(int) 来实现此方法。此方法以分隔窗格的当前大小为基础迅速改变窗格的大小。如果分隔窗格没有正确地实现并且不显示在屏幕上,此方法将不产生任何影响(新的分隔条位置将成为 0(当前的 size * proportionalLocation ))。
参数:
proportionalLocation - 指示百分比的双精度浮点值,从 0 (top/left) 到 1.0 (bottom/right)
抛出:
IllegalArgumentException - 如果指定的位置为 < 0 or > 1.0
我们来看下setDividerLocation(double
proprtionalLocation)的实现:
Java代码
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(int)来实现的,呵呵~
下面是一个小小的示例:
Java代码
import java.awt.BorderLayout;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
final JSplitPane splitPane = new JSplitPane();
splitPane.add(new CustomPanel(), JSplitPane.LEFT);
splitPane.add(new CustomPanel(), JSplitPane.RIGHT);
splitPane.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
splitPane.setDividerLocation(1.0 / 3.0);
}
});
frame.add(splitPane);
frame.setTitle("Hello JSplitPane");
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class CustomPanel extends JPanel {
private static int id = 0;
public CustomPanel() {
setLayout(new BorderLayout());
add(new JTextArea("" + id++), BorderLayout.CENTER);
}
}
JSplitPane提供了这样一个方法来控制分割栏所处的位置:
public void setDividerLocation(double proportionalLocation)
设置分隔条的位置为 JSplitPane 大小的一个百分比。
根据 setDividerLocation(int) 来实现此方法。此方法以分隔窗格的当前大小为基础迅速改变窗格的大小。如果分隔窗格没有正确地实现并且不显示在屏幕上,此方法将不产生任何影响(新的分隔条位置将成为 0(当前的 size * proportionalLocation ))。
参数:
proportionalLocation - 指示百分比的双精度浮点值,从 0 (top/left) 到 1.0 (bottom/right)
抛出:
IllegalArgumentException - 如果指定的位置为 < 0 or > 1.0
我们来看下setDividerLocation(double
proprtionalLocation)的实现:
Java代码
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));
}
}
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(int)来实现的,呵呵~
下面是一个小小的示例:
Java代码
import java.awt.BorderLayout;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
final JSplitPane splitPane = new JSplitPane();
splitPane.add(new CustomPanel(), JSplitPane.LEFT);
splitPane.add(new CustomPanel(), JSplitPane.RIGHT);
splitPane.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
splitPane.setDividerLocation(1.0 / 3.0);
}
});
frame.add(splitPane);
frame.setTitle("Hello JSplitPane");
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class CustomPanel extends JPanel {
private static int id = 0;
public CustomPanel() {
setLayout(new BorderLayout());
add(new JTextArea("" + id++), BorderLayout.CENTER);
}
}
相关文章推荐
- CornerStone —— 医学影像显示的JavaScript库简介
- JavaScript ----------------- 寄生式继承
- jsoup爬取百度瀑布流图片
- JSON初步
- jsoncpp初探
- jsoncpp初探
- JavaScript学习笔记十一:高阶函数-map/reduce
- 焦点图的实现
- js获取浏览器信息
- js深浅复制
- js声明匿名函数
- JavaScript ----------------- 原型式继承
- js基本语法介绍
- js中的事件委托或是事件代理详解
- javaScript学习基础篇(1)(数组)
- javascript事件代理(delegate)原理解析
- 常用的4种js面向对象写法
- 通过javascript进行UTF-8编码
- javascript var 一个对象
- 解释型语言与编译型语言的区别