您的位置:首页 > Web前端 > JavaScript

固定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));  
    }  
}  

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);  
    }  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: