final JFrame frame = this;
frame.addComponentListener(new ComponentAdapter() {//拖动窗口监听,改变元素的位置和大小
public void componentResized(ComponentEvent e) {
/*
* 元素随着窗体改变而改变
* 1.先设置窗体的最小宽和高
* 2.得到当前窗体的宽和高,设置一下上次窗体的宽和高
* 3.设置一个窗体是否动了的标记,因为初始的时候本事件也会被触发,当宽度等于初始宽度的时候才是真正加载到初始状态
* ,初始状态更改窗体大小和直接点击最大化按钮,都是窗体改变了,要把标记设置为true
* 4.窗体标记为trued的情况下,去设置:
* a.需要移动的元素
* b.只移动X位置
* c.移动宽度和高度的
* d.移动Y位置和高度的
* e.移动x和y位置的
* */
int whidth = frame.getWidth();//获取窗口宽度
int height = frame.getHeight();//获取窗口高度 你也可以设置高度居中
if (whidthMark == 846 && isMove == false) {//先让窗体加载到初始状态
isMove = true;
}
if (frame.getExtendedState() == 6) {//6代表最大化了,0是初始状态
isMove = true;
}
if (isMove) {
label1.setBounds(label1.getX() + (whidth - whidthMark), 60, 80, 30);
label2.setBounds(label2.getX() + (whidth - whidthMark), 60, 70, 30);
label3.setBounds(label3.getX() + (whidth - whidthMark), 60, 70, 30);
button1.setBounds(button1.getX() + (whidth - whidthMark), 10, 140, 40);//(起始点x,起始点y,宽地w,高h) 标签设置宽高不明显
button2.setBounds(button2.getX() + (whidth - whidthMark), 10, 85, 40);//(起始点x,起始点y,宽地w,高h)
scrollPane2.setBounds(15, 100, scrollPane2.getWidth() + (whidth - whidthMark), scrollPane2.getHeight() + (height - heightMark));
scrollPane2.setViewportView(textArea1);
scrollPane3.setBounds(15, scrollPane3.getY() + (height - heightMark), scrollPane3.getWidth() + (whidth - whidthMark), 45);
scrollPane3.setViewportView(textArea2);
button4.setBounds(button4.getX() + (whidth - whidthMark), button4.getY() + (height - heightMark), 90, 45);
}
whidthMark = whidth;
heightMark = height;
}
});
swing窗体程序元素随动
最新推荐文章于 2024-08-18 21:36:31 发布