`
ljl_xyf
  • 浏览: 636548 次
  • 性别: 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使用方法详解

    JSplitPane是Java Swing库中用于创建可分割窗口界面的一个控件。通过JSplitPane,我们可以把一个主窗口分割成两个部分,每部分可以分别放置不同的组件,以实现复杂布局的设计。这种控件非常适合于那些需要动态分配...

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

    JSplitPane使用时非常灵活,可以包含更多的组件,并且组件间的关系可以是水平分割也可以是垂直分割。通过不同的属性设置,JSplitPane能够满足不同的界面布局需求。 除此之外,JSplitPane还可以通过监听器来控制分割...

    JavaSwing界面设计(所有控件及示例)

    Java Swing 是Java编程语言中用于构建图形用户界面(GUI)的一个强大的工具包。它是对早期的Abstract Window Toolkit (AWT) 的扩展,...理解和熟练掌握Swing,能够帮助开发者创建出高效、美观且易于使用的应用程序。

    gui swing 控件-源代码

    标题“GUI Swing 控件-源代码”表明这是一个包含Swing控件使用示例的源代码集合。这样的资源对于学习和快速应用Swing组件到实际项目中非常有价值。通过查看和运行这些源代码,开发者可以直观地理解如何创建、配置和...

    控件位置可以配置的Swing桌面

    在"ZWorkSpace"这个压缩包文件中,可能包含了一个示例项目,展示如何使用Swing构建可配置控件位置的桌面应用。源码分析可以帮助我们理解如何在实践中实现这样的功能。通常,你会看到如何创建JFrame,添加布局管理器...

    JSplitPane的用法

    1. **构造方法**:`JSplitPane`提供了多种构造方法,最常用的是`JSplitPane(int orientation)`和`JSplitPane(int orientation, Component first, Component second)`。 - `orientation`参数定义了分隔方向,可以是`...

    JavaSwing界面设计所有控件及示例.ppt

    JavaSwing界面设计所有控件及示例 JavaSwing是一种广泛使用的Java图形用户界面(GUI)工具包,用于设计和实现图形用户界面。该工具包提供了各种控件和容器,用于创建复杂的用户界面。 界面设计概述 界面设计是指...

    swing layout 参考资料

    7. **Swing控件JSplitPane**: JSplitPane是Swing中用于分隔两个或更多组件的特殊容器。它可以水平或垂直分割,并允许用户动态调整两个部分的大小。这对于创建可调整大小的面板非常有用,例如编辑器和大纲视图。 8...

    Swing 扩展组件 Swing 扩展组件

    Swing还支持自定义组件,开发者可以通过继承现有的组件类并重写其方法,或者使用`JComponent`类来构建完全自定义的UI元素。这种灵活性使得Swing成为Java GUI开发的强大工具,可以满足各种复杂应用的需求。 在实际...

    java swing学习资料

    - Swing 提供了丰富的组件库,如 `JTabbedPane`(选项卡面板)、`JSplitPane`(分割面板)、`JOptionPane`(对话框)等,满足各种界面需求。 10. **Swing 构建工具**: - NetBeans、IntelliJ IDEA 和 Eclipse 等...

    Java-Swing嵌入浏览器(本地浏览器和webkit浏览器-火狐内核)

    3. **设置浏览器容器**:将`Browser`实例放入Swing的容器,如`JPanel`或`JSplitPane`,以在Swing应用中显示。 4. **加载网页**:调用`Browser`对象的`setUrl()`方法,传入你要加载的网页URL。 5. **事件处理**:...

    swing 应用程序框架

    Swing的一个显著特点是其轻量级特性,因为它不依赖于操作系统提供的GUI控件,而是使用Java实现,这使得Swing应用在不同平台上有一致的用户体验。此外,Swing支持模态和非模态对话框,以及多种布局管理器,如...

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

    本文将深入探讨基于Swing的"类似编辑器的界面"的设计与实现,以及涉及到的关键技术,包括可关闭的选项卡面板、文件复制功能、JSplitPane和滚动面板。 首先,"可关闭的选项卡面板"是一种常见的用户界面设计,常用于...

    java swing笔记

    ### Java Swing知识点详解 #### 一、JSplitPane:实现窗口动态分割 ...综上所述,通过以上介绍我们可以了解到Java Swing中的一些重要组件和布局管理器的使用方法,这些知识对于开发复杂的GUI应用程序是非常有用的。

    JAVA Swing容器

    JAVA SWING 相关的知识,特别是在什么里面控件的运用。Swing 是 Java 的一個GUI 组件库,提供了許多实用的组件,可以用来构建复杂的图形用户界面。 JComponent JComponent 是一个抽象类,用于定义所有子类组件的...

    java控件示例代码(内还有完整系统一个)

    在这个名为“java控件实例源码”的压缩包中,你将找到一系列的Java控件示例,很可能包括按钮、文本框、下拉菜单、标签、面板等常用控件,以及可能的一个完整的图书馆管理系统。 首先,让我们来了解一下Java中的一些...

    JavaSwing界面设计(所有控件及示例).ppt

    Swing 使用事件监听器模型处理用户交互。每个组件都可以注册一个或多个事件监听器,当特定的事件发生时,监听器对象的相应方法会被调用。例如,按钮点击事件可以通过添加 `ActionListener` 来处理。 ### 菜单和表格...

    java图形设计卷2swing

    在学习Java图形设计卷2和Swing时,你将了解如何使用各种组件创建用户界面,如何处理事件,以及如何利用Swing的高级特性来提升应用的用户体验。通过实践,你将掌握创建复杂GUI应用程序的技巧,并能熟练地运用到实际...

    swing界面总结

    6. **轻量级与重量级组件**:Swing是轻量级的GUI库,它使用Java自己的绘图机制,而不同于AWT(Abstract Window Toolkit)的重量级组件,后者依赖于操作系统提供的原生控件。 7. **Swing工具包扩展**:除了基本组件...

Global site tag (gtag.js) - Google Analytics