JSplitPane固定分割比例和禁止拖动分割条

有知友问JSplitPane的问题,在写代码的时候不想让分割条拖动,结果找不到方法,百度了 居然也找不到...

后来在一个犄角旮旯里发现了 ,,  就写上来让大家看看吧...

import java.awt.event.ComponentAdapter;

import java.awt.event.ComponentEvent;

import javax.swing.JFrame;

import javax.swing.JSplitPane;

public class Test {

  public static void main(String[] args) {

    JFrame frame=new JFrame("Test");

    final JSplitPane jsp=new JSplitPane();

    frame.add(jsp);

    frame.setLocation(200,200);

    frame.setSize(400,400);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    jsp.setEnabled(false);//进制拖动分割条

    frame.setVisible(true);

    frame.addComponentListener(new ComponentAdapter(){

      public void componentResized(ComponentEvent e) {

     jsp.setDividerLocation(0.67);

  }

    });

    jsp.setDividerLocation(0.67);//设置分割比例,注意必须在frame.setVisible(true);之后才有效..  理由看下边..

  }

}

理由:

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)才会有效。

  1. 1.设置窗口最大(伪最大化)
  2. JFrame frame =new JFrame();
  3. frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
  4. frame.setLocation(0,0);
  5. frame.show();
  6. 2.设置最大化(JDK1.4以上)
  7. JFrame frame =new JFrame();
  8. frame.show();
  9. frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
  10. 3.设置全屏模式
  11. GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(frame);

java swing 学习的更多相关文章

  1. Java Swing学习

    在Java学习的过程中,我们时常会因为控制台程序的枯燥而失去了学习Java的乐趣,那么今天我们就开始学习Java的Swing.也就是GUI(Graphical user interface),在应用到 ...

  2. Java Swing学习笔记——创建JFrame

    创建显示一个空JFrame import javax.swing.JFrame; public class JFrameDemo extends JFrame{ public JFrameDemo() ...

  3. Java Swing 资料(转载学习)

    Swing图像界面简介:https://blog.csdn.net/xietansheng/article/details/72814531 Swing实用经验总结篇:https://blog.csd ...

  4. Java swing项目-图书管理系统(swing+mysql+jdbc) 总结

    (一)java Swing的学习. (1)学习如何安装windowbuilder插件的安装. <1>在eclipse中点击help <2>在help的下拉选中选择install ...

  5. Java Swing快速构建窗体应用程序

    以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...

  6. Java Swing的进化

    摘 要:Swing已是一个比较老的工具集了,在美观的用户界面出来之前需要开发很长时间.它缺少一些你在开发富UI时所需的组件.幸运地是,像 Substance,SwingX及Java Look-and_ ...

  7. Java Swing界面编程(1)

    写多了jsp,对于页面式的系统已经写烦了,本人也開始着手于java swing的学习,作为菜鸟,仅想用博客记录下我的swing学习的历程.话不多说,首先開始我的第一个窗体化程序. 下面给出源码: pa ...

  8. Java Swing 使用总结(转载)

    随笔转载自:此去经年ぢ 地址:http://www.cnblogs.com/FLFL/p/5369756.html 1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在 ...

  9. 客户端是选择Java Swing还是C# Winform

      登录|注册     mentat的专栏       目录视图 摘要视图 订阅 [专家问答]韦玮:Python基础编程实战专题     [知识库]Swift资源大集合    [公告]博客新皮肤上线啦 ...

  10. Swing学习1——总体概述

    以下来自于JDK1.6 一.Swing学习我划分为两个方面: 一方面Swing的界面设计部分,包括相关组件类的继承关系,组件的功能用途,布局管理: 1.首先继承关系上自上而下为 java.lang.O ...

随机推荐

  1. java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator 问题解决

    目录 报错情况 分析原因 解决方法 本文author:@愷龍 报错情况 在一次使用JSP的jstl时候按照正常引入jstl和使用for each标签出现了如下报错: 分析原因 经过一番调查研究发现原因 ...

  2. 【YashanDB知识库】ycm托管数据库时,数据库非OM安装无法托管

    问题现象 ps -ef | grep yas 查看无yasom和yasagent进程,且在{数据库安装目录}/om/{数据库名称}的目录下没有conf.data.log等目录,确定数据库不是用yasb ...

  3. 一个开源、跨平台的.NET UI框架 - Avalonia UI

    前言 今天大姚给大家分享一个开源.免费(MIT License).跨平台的.NET UI框架:Avalonia UI. Avalonia是一个成熟稳定的平台,用于构建桌面.嵌入式.移动的和Web应用程 ...

  4. Mybatis整合多数据源

    背景 有时候我们需要查询来自多个库表的数据内容,但是又不想起多个服务,可以业务需要这些数据那该怎么办呢?那么其实Mybatis 是支持整合多数据源,并随时进行切换.   解决 引入依赖 首先引入dyn ...

  5. docker基础镜像java版本选择和推荐

    背景 在编写dockerfile时,基础镜像要么太大,要么缺少jdk:dockerhub中的openjdk五花八门,不知道选择哪个 解决方案 我在项目中通常选择 openjdk作为基础镜像 FROM ...

  6. 手搓大模型Task01:LLama3模型讲解

    前言   主要进行Qwen模型架构进行讲解. 1.Qwen整体介绍   Qwen的整体架构与Llama2类似,如下图所示: tokenizer将文本转为词表里面的数值. 数值经过embedding得到 ...

  7. 能用到“退休”的 600条 Linux 命令,可以解决日常99%的问题~

    1.基本命令 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 (SMBIOS / DMI) hdparm -i /dev/ ...

  8. 七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用)

    七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用) @ 目录 七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用) ...

  9. Android Qcom USB Driver学习(三)

    usb hub区分端口 USB 子系统拓扑浅析 USB ID Database VendorID and ProductID usb usb1: New USB device found, idVen ...

  10. 谈一谈 vuex 里边,actions,mutations ,state 之间的运转方式

    首先,调用 actions 中的方法,一般我们在 actions 做登录和登出的请求 : 然后调用 mutations 的方法修改数据 ,因为 mutations 方法是修改state的数据的唯一方法 ...