`
ljl_xyf
  • 浏览: 620509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Swing控件JSplitPane的使用(常用方法说明)

阅读更多

 1、swing分割窗口控件JSplitPane,用来将窗口分割成两个部分。

 

 2、分割后的窗口每个窗口只能放一个控件,想要方多个控件的话,可以在上面方一个JPane面板,这样就可以方多个控件。

 

 3、JSplitPane myJSplitPane=new JSplitPane(int newOrientaion,boolean new ContinuousLayout);

         newOrientaion:可选值为:JSplitPane.HORIZONTAL_SPLIT

                                         JSplitPane,VERTUCAL_SPLIT

 

   4、常用方法

       ①、setDividerSize(int size)设置分割条的大小。

       ②、getDividerSize()得到分割条的大小。

       ③、setDividerLocation(int size)按照百分比设置分割条的位置。

       ④、getOrientation获得方向。

 

  5、使用 JSplitPane 监听窗口缩放事件

 

 

JSplitPane splitPane = new javax.swing.JSplitPane();     
         splitPane.addPropertyChangeListener(new java.beans.PropertyChangeListener() {     
             public void propertyChange(java.beans.PropertyChangeEvent evt) {     
                 if (evt.getPropertyName().equals(JSplitPane.DIVIDER_LOCATION_PROPERTY)) {     
                     //action code     
                 }     
             }     
         });    
 

   6、JSplitPane按比例分割的问题

 

 

JSplitPane看似比Delphi的spliter难用许多。不过介于swing可以方便的使用记事本一类文本编辑器直接书写依据布局的界面代码我们还是姑且容忍它带来的不便。但在使用JSplitPane时候在MSDN上被问的比较频繁却没有良好答案的问题是JSplitPane如何按比例分割,setDividerLocation(double d)为什么没有作用。

要解决这个问题首先看JAVA DOC.关于setDividerLocation的介绍是这样的:
setDividerLocation

public void setDividerLocation(double proportionalLocation)

    设置分隔条的位置为 JSplitPane 大小的一个百分比。

    根据 setDividerLocation(int) 来实现此方法。(http://www.my400800.cn )此方法以分隔窗格的当前大小为基础迅速改变窗格的大小。如果分隔窗格没有正确地实现并且不显示在屏幕上,此方法将不产生任何影响(新的分隔条位置将成为 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都会按比例分割。

 

分享到:
评论

相关推荐

    swing分割窗口控件JSplitPane使用方法详解

    主要为大家详细介绍了swing分割窗口控件JSplitPane的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Swing拆分窗格控件JSplitPane使用详解

    主要为大家详细介绍了Swing拆分窗格控件JSplitPane的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    java swing-JSplitPane的使用

    JSplitPane是Swing库提供的一个分割面板组件。它可以在图形界面中创建两个子组件,并允许用户通过拖动分割条来调整子组件的大小。

    JSplitPane

    JSplitPane

    Swing组件下载(常用组件)

    Swing组件(javax.swing.-) 面板:JPanel 标签化窗格:JTabbedPane 拆分窗格:JSplitPane 滚动窗格:JScrollPane 工具栏:JToolBar 桌面窗格:JDesktopPane 内部框架:JInternalFrame 分层窗格:JLayeredPane ...

    JSplitPane的用法

    JSplitPane的具体用法,分隔面板的使用,适合初学者。若是有更深层的见解,请作补充

    Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例

    主要介绍了Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例,本文直接给出代码实例和效果截图,需要的朋友可以参考下

    java-swing 学习代码

    如何使用面板组件 使用JPanel 使用JScrollPane 使用JSplitPane 使用JTabbedPane 使用JIntemalFrame 使用JLayeredPane 使用JRootPane

    Swing 窗口与面版的使用

    介绍Frame和Panel容器的使用方法和时机。针对JFrame,JInternalFrame,JLayeredPane,JPanel,JScrollBar,JSplitPane,JTabbedPane写有详细的可执行代码。

    oracle jdk自带swing 代码示例swingset3

    包含swing入门组件完整示例, 几乎包含swing所有组件介绍 ,可以带你入门了解swing的各种UI效果和使用示例,让你对swing有个整体了解. 顶层容器:JFrame/JDialog/JWINDOW 容器:JTabbedPane/JScrollPane/JSplitPane/...

    基于Swing的类似编辑器的界面

    基于Swing的类似编辑器的界面,java培训时的作业。 其中显现了可关闭的选项卡面板、复制文件功能、滚动面板的实现,功能比较简单。但自己觉得可以整理为自己的控件库。

    javaSE代码实例

    16.4.9 防止错误的使用wait、notify、notifyAll方法 371 16.5 获取当前正在运行的线程 372 16.6 volatile关键字的含义与使用 372 16.7 小结 373 第17章 高级线程开发 374 17.1 线程池的使用 374 17.1.1...

    flex4 实现分隔栏 类似java里面的JSplitPane的功能

    NULL 博文链接:https://silentwu.iteye.com/blog/1605617

    Java开发技术大全 电子版

    14.7.3分隔板(JSplitPane)使用示例482 14.7.4选项板(JTabbedPane)使用示例485 14.7.5工具栏(JToolBar)使用示例486 14.8常用组件488 14.8.1标签(Jlabel)使用示例488 14.8.2按钮(JButton)使用示例491 ...

    kk.rar_jsplitpane UI_成绩管理系统

    这是一个成绩管理系统,对于初学者来说,值得拿来看看。

    疯狂JAVA讲义

    4.4.3 使用return结束方法 87 4.5 数组类型 87 4.5.1 理解数组:数组也是一种类型 88 学生提问:int[]是一种类型吗?怎么使用这种类型呢? 88 4.5.2 定义数组 88 4.5.3 数组的初始化 89 学生提问:能不能只...

    Java高级程序设计:第10章-图形界面起步-容器和布局.pptx

    Swing vs AWT;GUI API;Container(容器);Component(组件类);Helper(辅助类);GUI开发的层次结构 ;顶级容器和中间级容器;创建窗口(JFrame);setDefaultCloseOperation方法;向窗口中放组件;布局管理(Layout Managers);...

    SuperMap Objects Java 独立的鹰眼、放大镜面板

    MapEagleEyesPanel工程中定义了地图...MainFrame通过JSplitPane容器分别添加主地图控件,鹰眼面板和放大镜面板。主地图刷新时更新鹰眼面板和放大镜面板的地图,鹰眼面板的红框改变位置也同步更新主地图和放大镜面板。

    Jtree

    XML的树形目录,转载。

    java pdf 查看器

    import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.JToggleButton; import javax.swing.JToolBar; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; ...

Global site tag (gtag.js) - Google Analytics