Java Swing JButton释放焦点
python截取字符串子串
python中如何退出多层循环
Java Swing 如何判断JSplitPane左侧面板是否折叠 如何判断右侧面板是否折叠
Java Swing 如何判断JSplitPane左侧面板是否折叠 如何判断右侧面板是否折叠
相同问题:
- 如何判断JSplitPane顶部面板是否折叠 如何判断底部面板是否折叠
- 如何判断JSplitPane面板1是否折叠 如何判断面板2是否折叠
监听PropertyChangeEvent
可以通过判断分割条的位置来判断左右侧面板是否被折叠:
- 当分隔条的位置为0的时候,左侧面板被折叠
- 但是由于窗体可大可小,折叠右侧面板时,分隔条的位置是不固定的。
- 如果窗体大小时固定的话,我们可以尝试折叠右侧面板,记下此时分隔条的位置Xxx。
- 当下次分隔条的位置为Xxx时,就说明右侧面板被折叠。
- 不过我发现
jSplitPane.getMaximumDividerLocation()
和jSplitPane.getMinimumDividerLocation()
相加起来的结果,就是折叠右侧面板时分隔条的坐标值。
- 如果窗体大小时固定的话,我们可以尝试折叠右侧面板,记下此时分隔条的位置Xxx。
Java Swing 使用JPopupMenu+JDialog实现系统托盘弹出菜单 解决中文乱码问题
使用JPopupMenu实现系统托盘中文弹出菜单
TrayIcon构造函数
方法 | 描述 |
---|---|
TrayIcon(Image image) |
Creates a TrayIcon with the specified image. |
TrayIcon(Image image, String tooltip) |
Creates a TrayIcon with the specified image and tooltip text. |
TrayIcon(Image image, String tooltip, PopupMenu popup) |
Creates a TrayIcon with the specified image, tooltip and popup menu. |
可以看到,我们可以使用PopupMenu
作为系统托盘程序的弹出菜单。
PopupMenu不支持中文
但是PopupMenu有如下问题:
- PopupMenu添加的菜单项MenuItem不支持图标,是awt级组件,没有提供paint函数,也就意味着不能重绘,去实现带图标的菜单;
- PopupMenu只支持英文,中文会乱码,如果确实需要支持中文的话,运行的jar时候,需要使用加上
-Dfile.encoding=GBK
参数,指定以GBK编码来运行,一般来说我们要处理的文件也通常是UTF-8编码的,如果使用这个GBK编码运行的jar来处理此文件,就会出现乱码问题。
基于JPopupMenu的解决方案
JPopupMenu是Swing组件,而且支持图标+文本,更美观。在标准API里,添加JPopupMenu的有两种方式:
1、Component组件调用setComponentPopuMenu(JPopupMenu)方法来绑定JPopupMenu;
2、JPopupMneu调用show(Component c,int x,int y)方法绑定至组件的(x,y)坐标上;
但问题是,TrayIcon不是Component,不能通过上述两种方法进行绑定。
弹出菜单的触发过程
在 鼠标点击或者按下快捷键 时 生成弹出菜单。
所以我们可以在点击系统托盘的时候,单独创建一个Component作为JPopupMenu的参考坐标。
这个Component,我们可选择Java现成的JWindow或者JDialog等等。经过测试JDialog来实现会更好一些。
JPopupMenu实现系统托盘弹出菜单的步骤
获取鼠标点击的坐标值,在这个坐标值上创建一个JDialog,然后将JPopupMenu绑定到这个JDialog的(0,0)位置上,弹出菜单显示后再获取弹出菜单的尺寸,再根据尺寸回调JDialog的大小,这样JPopupMenu就完美的遮罩了JDialog,看不出JDialog的存在。
不过这样做,还有最后一个问题,那就是在弹出菜单消失后,JDialog依然存在;
这倒不用担心,JPopupMenu提供了:firePopupMenuCanceled()、firePopupMenuWillBecomeInvisible()、firePopupMenuWillBecomeVisible(),菜单消失、消失前、消失后,这三个回调函数。
所以,我们可以选择重写其中任意一个函数,在JPopupMenu消失之前关闭JPopupMenu的载体即可。
这样就可以完美实现系统托盘弹出菜单啦。
Java 网络编程6---网络编程要点
- InetAddress表示IP地址的操作类,可以通过此类指定要连接的主机名称。
- 在开发中如果要取得一个网络资源可以使用URL类进行定位,只有使用IO流的方式进行读取。
- 使用URLEcoder可以为信息编码,使用URLDecoder可以为编码的内容进行解码
- ServerSocket主要用在TCP协议的服务器程序开发上,使用accept()方法等待客户端连接,每一个连接的客户端都使用一个Socket表示。
- 服务器端加入多线程机制之后,就可以同时多个用户提供服务。
- UDP属于不可靠的连接协议,采用数据报的形式,对于服务器发送的信息,客户端不一定能收到。
批处理 延迟变量SetLocal EnableDelayedExpansion
批处理 延迟变量SetLocal EnableDelayedExpansion
在cmd执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程,在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。
示例0
1 | set value=kkkkkkk |
将这段代码保存到test0.bat
文件中。然后打开cmd,进到对应目录下,执行这个文件。
运行结果:
1 | D:\Desktop\test\CMD\延迟变量>test0.bat |
最后一行是结果,但是在结果之前,还有两句,set value=kkkkkkk 和 echo kkkkkkk。
但是在test0.bat中,我们并没有写echo kkkkkkk这样的语句,这表明至少在执行到echo %value% 这句时,cmd已经把 变量value 替换成 kkkkkkk这个值。
这就是变量的扩展
那么什么是变量的延迟扩展呢?
变量延迟两要素
- 变量延迟的启动语句是“SetLocal EnableDelayedExpansion”,
- 并且变量要用一对英文感叹号“!!”括起来