已有101人关注
《JAVA开发实战宝典》第十一章
发表在Java图书答疑 2010-04-05
是否精华
版块置顶:
在这本书中P286有这样一个例子是开发一个窗体,通过线程,动态缩放按钮组件大小,它的完整的实例代码是这样的:
   import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Point;

import javax.swing.JButton;
import javax.swing.JFrame;

/**
 * 按钮缩放
 * @author 李钟尉
 */
public class ButtonZoom extends JFrame implements Runnable {

private JButton button;
private int x;
private int y;
private int width;
private int height;
private boolean zoomIn = true;

/**
 * Launch the application
 * @param args
 */
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ButtonZoom frame = new ButtonZoom();
frame.setVisible(true);
new Thread(frame).start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
 * Create the frame
 */
public ButtonZoom() {
super();
setResizable(false);
getContentPane().setLayout(null);
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton();
button.setText("一个按钮");
getContentPane().add(button);
button.setLocation(getWidth() / 2, getHeight() / 2);
}

@Override
public void run() {
while (true) {
int fwidth = getWidth();
int fheight = getHeight();
Point point = button.getLocation();
Dimension size = button.getSize();
int len = Math.min(fwidth, fheight)/2;
for (int i = 0; i < len; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (zoomIn) {
x = point.x - i;
y = point.y - i;
width = size.width + i * 2;
height = size.height + i * 2;
} else {
x = point.x + i;
y = point.y + i;
width = size.width - i * 2;
height = size.height - i * 2;
}
if (width >= fwidth || height >= fheight)
zoomIn = !zoomIn;
if(x<0||y<0){
zoomIn = !zoomIn;
}
System.out.println(x + "\t" + y + "\t" + width + "\t" + height);
EventQueue.invokeLater(new Runnable() {
public void run() {
button.setLocation(x, y);
button.setSize(width, height);
}
});
}
zoomIn = !zoomIn;
}
}
可是当我读到这段代码是我始终不能理解这段代码是:
   while (true) {
int fwidth = getWidth();
int fheight = getHeight();
Point point = button.getLocation();
Dimension size = button.getSize();
int len = Math.min(fwidth, fheight)/2;
for (int i = 0; i < len; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (zoomIn) {
x = point.x - i;
y = point.y - i;
width = size.width + i * 2;
height = size.height + i * 2;
} else {
x = point.x + i;
y = point.y + i;
width = size.width - i * 2;
height = size.height - i * 2;
}
if (width >= fwidth || height >= fheight)
zoomIn = !zoomIn;
if(x<0||y<0){
zoomIn = !zoomIn;
}
System.out.println(x + "\t" + y + "\t" + width + "\t" + height);
EventQueue.invokeLater(new Runnable() {
public void run() {
button.setLocation(x, y);
button.setSize(width, height);
}
});
}
zoomIn = !zoomIn;
}
能不能解释一下呀?非常感谢!
}
分享到:
精彩评论 1
东北虎
学分:0 LV1
2010-04-06
沙发
这是练习题,请您参考一下前面的知识讲解,这是培养您独立解决问题能力的习题,不提供答案您也应该能够解决。
这是对前面内容的综合应用,这只是一个参考答案,您也可以自己写一个实现该功能的程序。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照