解决方案

1、实时获取父窗口坐标的方法是给父窗口添加如下监听

addComponentListener(new ComponentAdapter() {@Overridepublic void componentResized(ComponentEvent e) {Component comp = e.getComponent();MAIN_FRAME_HEIGHT=comp.getHeight();MAIN_FRAME_WIDTH=comp.getWidth();System.out.println("当前窗口在大小:" + comp.getHeight() + "," + comp.getWidth());}@Overridepublic void componentMoved(ComponentEvent e) {Component comp = e.getComponent();System.out.println("当前窗口在屏幕中的位置:" + comp.getX() + "," + comp.getY());//更新当前窗口所在的坐标MAIN_FRAME_LOC_X = comp.getX();MAIN_FRAME_LOC_Y = comp.getY();}});  

2、计算公式及核心代码

int x = 父窗口X坐标/2 + 父窗口宽度/2 - JDialog窗口宽度/2

int y = 父窗口Y坐标/2 + 父窗口高度/2 - JDialog窗口高度/2

//MAIN_FRAME_LOC_X  是父窗口所处的x坐标

//MAIN_FRAME_LOC_Y  是父窗口所处的y坐标

//MAIN_FRAME_WIDTH  是父窗口所处的宽度

//MAIN_FRAME_HEIGHT是父窗口所处的高度

int x = MAIN_FRAME_LOC_X - (int) subWindowSize.getWidth() / 2 + MAIN_FRAME_WIDTH/2;
int y = MAIN_FRAME_LOC_Y - (int) subWindowSize.getHeight() / 2 + MAIN_FRAME_HEIGHT/2;
dialog.setLocation(x, y);

注:如果窗口对象调用了pack()方法,那么该窗口在应用上述方法后可能会在视觉上出现窗口偏离中央的情况,这时你需要取消调用pack()方法 或者 将主窗口的尺寸设置为组件一样的尺寸。

参考文章

https://blog.csdn.net/PursueExcellence/article/details/80468888

JAVA Swing——框架(JFrame、JDialog)位置居于父窗口中央的解决方案相关推荐

  1. Java Swing框架实战

    Java Swing框架介绍 Swing 是一个为Java设计的GUI工具包.(PC的一个UI库) Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分 ...

  2. 必学技术java Swing之随心所欲添加自定义位置和大小的组件(建议收藏)

    必学技术java Swing之随心所欲添加自定义位置和大小的组件 首先展示一下一般的添加组件方法,以按钮为例(这里采用流式布局) package pure_Swing;import javax.swi ...

  3. knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案

    knife4j knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量, ...

  4. JAVA SWING之JFrame和JPanel布局

    初学JAVA的时候学习过SWING,每次写程序就直接复制Jframe和Jpanel设置,到现在也不清楚它们有什么关系,才回顾学习.Swing虽然是很老的技术了,但也有很多工具是Swing写的例如Jet ...

  5. Java Swing窗体JFrame之设置窗体图标

    方法1: // public ImageIcon (URL location) ImageIcon imageIcon = new ImageIcon(getClass().getResource(& ...

  6. Java Swing(九):弹出窗口

    简单对话框JOptionPane 对话框一般用于消息提示和读取用户输入(交互),可以给控件添加对话框.之前用到的消息窗口就是对话框.常用的几种对话框: 1.showMessageDialog()//消 ...

  7. JAVA Swing 图形化界面编程

    JAVA Swing 图形化界面编程 目录 1.组件 1.1 基本组件 1.2. 组件边框 1.3. JToolBar 工具条 1.4 JColorChooser 颜色选择器 1.5 JFileCho ...

  8. Java Swing教程

    创建一个JFrame 下面用简单的实例演示了Java Swing创建一个能输入内容的窗口 public class frameTest(){   public static void Main(Str ...

  9. Java Swing教程(基础)

    创建一个JFrame 下面用简单的实例演示了Java Swing创建一个能输入内容的窗口 public class frameTest(){   public static void Main(Str ...

最新文章

  1. 小型Web应用扫描工具Grabber
  2. jmeter全局变量传参_Jmeter 将正则表达式提取的参数传给全局(跨线程组使用变量)...
  3. codevs 4560 NOIP2015 D2T2 子串
  4. python实现连续数列相加_技术 | Python经典面试题解析实现斐波那契数列
  5. switch语句(JS)
  6. Endnote自定义文献引用格式
  7. gst-launch-1.0
  8. 蜡笔小新钢达姆机器人_《蜡笔小新》当中出现的组合,小伙伴们最喜欢谁?
  9. Kate Spade_百度百科
  10. 定向抓取漫谈 长孙泰
  11. C语言汇总学生成绩,c语言用二维数组统计学生成绩.doc
  12. 下载并预览pdf,提示未能加载PDF文档 - vue
  13. UVA 1103 - Ancient Messages(古代象形符号) By SuCicada
  14. [分享]iOS开发 - 网络总结
  15. ZJOI 2022 游记--zhengjun
  16. python之获取本机ip
  17. 软件环境 From 龙族联盟论坛
  18. html图片沿y轴转换,html-使用CSS水平翻转/垂直翻转/镜像图像
  19. 四轴飞行器的空气动力原理
  20. pph管优良传导性用作模具及焊接中都是一把好手

热门文章

  1. C# hashtable
  2. 车位预定查询html格式,停车场车位预定方法
  3. 自动弹窗被拦截 html,弹出式窗口被阻止怎么办,如何阻止弹出式窗口
  4. php上传视频文件代码,php上传视频的代码
  5. java禁止ie后退_Java开发网 - 【讨论】html页面禁用右键,浏览器后退、刷新,以及相应快捷键...
  6. python基础案例教程_python基础教程 10-11例子如何执行
  7. controller方法名一样参数传递不同如何根据参数匹配_【Java学习 | Javase】方法
  8. onvif 客户端 linux,Linux下onvif客户端关于ipc摄像头的搜索
  9. matlab 连通分支,(完整版)图的连通性判断matlab实验报告
  10. ssh中exit命令退出远程服务器_解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止...