Absolute Layout

----------------siwuxie095

  

  

  

  

  

  

根面板contentPane 的默认布局为 Border Layout,将其

切换为Absolute Layout

  

Absolute Layout 即 绝对布局,即 它没有任何的限制,可以

在界面中任意摆放控件的位置

  

在将控件拖动到面板上时,会出现参考线,参考线仅仅是

为了在界面中摆放元素时给出参考,而不具有任何实质性

的吸附功能

  

「如果不使用参考线,可以自由的将控件移动到任何位置」

  

  

  

  

当在面板中摆放好某控件,该控件的坐标和大小都是固定的,

不会随窗体的缩放而产生任何变化

  

  

在绝对布局的情况下,可以在代码中任意修改元素的坐标和大小

  

contentPane 中添加一个 JLabel,将其文本(text)改为:

This is a label,Rename 为:label

  

Source 中修改代码:

  

  

  

  

效果如下:

  

  

  

  

  

contentPane 中添加一个 JButton,将其文本(text)改为:

Run,Rename 为:btnRun

  

在绝对布局中,虽然不会有布局管理器帮助摆放,但是可以提供

最佳的灵活性

  

如:可以编写一个线程来为当前的控件提供动画(放大缩小、位置移动)

  

JButton 添加鼠标点击事件,当点击 Run 时,JLabel 上下浮动

  

JButton btnRun =new JButton("Run");

btnRun.addMouseListener(new MouseAdapter() {

@Override

publicvoid mouseClicked(MouseEvent arg0) {

 

//创建一个 SwingWoker 线程,指定泛型为 String Integer

//要覆盖 doInBackground() process()方法

//创建完成后,需要调用 execute() 方法,将它运行

new SwingWorker<String, Integer>() {

 

//获取 Y 的原坐标,需要将 label的声明转移到类中

int originalY=label.getY();

  

@Override

protected String doInBackground()throws Exception {

while (true) {

//每隔 50 毫秒执行一次

Thread.sleep(50);

//System.currentTimeMillis() 1970年到当前时间的毫秒值

//先从整型转换成浮点型,又从浮点型转换成整型

// 100表示运动的快慢(越小速度越快,反比),

// 20表示运动的幅度(越小幅度越小,正比)

//将值 publish() process()

publish((int)(Math.sin(System.currentTimeMillis()/100)*20));

}

}

 

@Override

protectedvoid process(List<Integer> chunks) {

// chunks 中把值取出来

for (int dynamicY : chunks) {

//X坐标不变,Y坐标变化,为标签做了一个正弦的动画

label.setLocation(label.getX(), originalY+dynamicY);

}

}

 

}.execute();

}

});

  

  

效果如下:

  

  

  

  

  

在绝对布局中,当控件出现重叠时,层级高的控件会挡住

层级低的控件,并接收鼠标事件

  

  

  

  

  

  

  

  

【made by siwuxie095】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值