首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

照抄了书上一段代码,请教下awt的有关问题

2013-07-04 
照抄了书上一段代码,请问下awt的问题。package graphicimport java.awt.BorderLayoutimport java.awt.But

照抄了书上一段代码,请问下awt的问题。

package graphic;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class HelloAwt extends Frame {

/**
 * 
 */
//private static final long serialVersionUID = 1L;

public static void main(String[] args)
{
new HelloAwt().run();
}

/**
 *  运行程序
 */

private void run()
{
createButton();
configureFrame();
createButton();
createButton();
createButton();
createButton();
createButton();

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

setVisible(true);
}


/**
 *   创建主窗口
 *   
 */
private void configureFrame()
{
setTitle("Hello");
setLayout( new FlowLayout());
setSize(new Dimension(400,400));
setLocation(100,110);
}

/**
 * 创建按钮
 */

private void createButton()
{
Button button = new Button("打开");

button.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
createDialog();
}

});
add(button,BorderLayout.NORTH);
//setVisible(true);
}

private void createDialog()
{
//第一个参数表示是该类,第二个名字,
final Dialog dialog = new Dialog(HelloAwt.this,"对话框",true);
dialog.setSize(new Dimension(267,117));

Toolkit toolkit = dialog.getToolkit();
Dimension screenSize = toolkit.getScreenSize();

// x代表对话框的左边的位置
int x = HelloAwt.this.getX()
+(HelloAwt.this.getWidth()-dialog.getWidth())/2;

// 如果其小于 0 ,则代表其超出了左边屏幕,
// 则将其设置成0
if(x < 0)
x = 0;

//其加上对话框的宽度为右边对话框的x位置,如果其大于屏幕宽度,则将其


//设置为屏幕狂度减去对话框宽度,也就让对话框的右边对其屏幕右边
if((x+dialog.getWidth())>screenSize.width)
{
x = screenSize.width - dialog.getWidth();
}

//获取dialog的上方的Y坐标
int y = HelloAwt.this.getY()
+(HelloAwt.this.getHeight()-dialog.getHeight())/2;

if(y < 0)
y = 0;

//如果其下方在屏幕之下,则将其移至贴着屏幕的地方

if((y + dialog.getHeight()) > screenSize.height)
{
y = screenSize.height - dialog.getHeight();
}

dialog.setLocation(x, y);

dialog.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e)
{
dialog.dispose();
}
});

dialog.setLayout(new GridLayout(2,1));

Panel topPanel = new Panel();

Label label = new Label("这是一个对话框");

topPanel.add(label,BorderLayout.NORTH);
dialog.add(topPanel);

Panel bottomPanel = new Panel();
Button button = new Button("按钮");

button.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
dialog.dispose();
}

});

bottomPanel.add(button,BorderLayout.SOUTH);
dialog.add(bottomPanel);
dialog.setVisible(true);
}
}



问题1:请问这个Frame和Button是怎么关联到一起的。
是通过这句代码么?add(button,BorderLayout.NORTH);
这个add的使用者是谁呢?


问题2:我在里面复制了很多次createButton,这些Button都具有相同的名字button,他们都存在于Frame上,如何区分它们呢。

[解决办法]
第一个问题, 是的
第二个问题, 界面上从左到右 就是创建的顺序。
[解决办法]
1、add(button,BorderLayout.NORTH);相当于this.add(button,BorderLayout.NORTH);或者HelloAwt.this.add(button,BorderLayout.NORTH);
所以add的使用者本质上是HelloAwt的当前对象。因为HelloAwt继承Frame所以也可说成Frame,二者通过add进行联系
2、应为你在主面板的北部使用了Flowlayout则会有一个排列的先后关系

给楼主点建议

我认为该关心的是程序的监听,以及对关闭等细节的处理;
------解决方案--------------------


这个你可以指定名字呀
或者得到子集等方式
参考我这里用Awt做个简单的计算器
http://www.niwozhi.com/question/117_1886.html

热点排行