最近在帮一个师妹做Java的AWT作业
好久没接触AWT了,布局的知识都忘得差不多了
题目要求的这样的
1. 一个用AWT编写的用户登陆程序说明如下:
①用户界面大小为200*160像素,如下图所示:
②用户类型包括学生用户和教师用户,缺省为学生用户。
③“确定”按钮功能:如果用户名为空,则打印"用户名不可为空!";如果密码为空,则打印"密码不可为空!";如果是学生用户,用户名和密码都是s,登陆成功则打印"学生用户登陆成功";如果是教师用户,用户名和密码都是t;登陆成功则打印"教师用户登陆成功";如果登陆不成功,则打印"用户名不存在或者密码不正确!"。
④“取消”按钮功能:将用户名和密码的输入框清空。
⑤“退出”按钮功能:退出程序
⑥窗口事件不处理
⑦该程序的代码框架如下:
import java.awt.*;
import java.awt.event.*;
public class UserLogin extends Frame implements ActionListener,ItemListener{
Panel panel1,panel2; //定义两个面板
Label userType,userLabel,pswLabel;//分别定义用户类型、用户名和密码标签
TextField userName,psw;//分别定义用户名和密码文本框
Button yesBtn,cancelBtn,exitBtn;//分别定义确定、取消和退出按钮
Choice userSelect;//用户类型下拉框
int userID=0; //定义用户类型标志变量,0表示学生用户,1表示教师用户
public UserLogin(){ //定义用户登陆界面的构造方法
……
}
…… //事件处理的方法代码块
public static void main(String args[]){
new UserLogin();
}}
根据以上要求,完成下面两个问题的代码:
(1)补全用户登陆界面的构造方法的代码
(2)写出该用户登陆的事件处理方法的代码
我自己写的代码是这个样子的
import java.awt.*;
import java.awt.event.*;
import javax.swing.BoxLayout;
public class UserLogin extends Frame implements ActionListener, ItemListener {
Panel panel1, panel2; // 定义两个面板
Label userType, userLabel, pswLabel;// 分别定义用户类型、用户名和密码标签
TextField userName, psw;// 分别定义用户名和密码文本框
Button yesBtn, cancelBtn, exitBtn;// 分别定义确定、取消和退出按钮
Choice userSelect;// 用户类型下拉框
int userID = 0; // 定义用户类型标志变量,0表示学生用户,1表示教师用户
public UserLogin() { // 定义用户登陆界面的构造方法
userType = new Label("用户类型"); // 初始化3个标签
userLabel = new Label("用户名:");
pswLabel = new Label("密码:");
userSelect = new Choice(); // 初始化下拉框
userSelect.add("学生用户"); // 给下拉框添加下拉选项
userSelect.add("教师用户");
userSelect.select(0); // 默认选择第0个
userSelect.addItemListener(this); // 添加监听器
userName = new TextField(9); // 初始化密码和用户名的输入框
psw = new TextField(9);
psw.setEchoChar('*'); // 让密码显示为*
// userName.setSize(150, 50);
// psw.setSize(150, 50);
yesBtn = new Button("确定"); // 初始化3个按钮,并添加监听器
cancelBtn = new Button("取消");
exitBtn = new Button("退出");
yesBtn.addActionListener(this);
cancelBtn.addActionListener(this);
exitBtn.addActionListener(this);
panel1 = new Panel(); // 初始化2个面板
panel2 = new Panel();
panel1.setLayout(new FlowLayout(FlowLayout.CENTER)); // 设置布局
panel1.add(userType); // 向面板1添加组件
panel1.add(userSelect);
panel1.add(userLabel);
panel1.add(userName);
panel1.add(pswLabel);
panel1.add(psw);
panel2.add(yesBtn); // 向面板2添加组件
panel2.add(cancelBtn);
panel2.add(exitBtn);
// this.setLayout(new BorderLayout());
// this.add(panel1, BorderLayout.NORTH);
// this.add(panel2, BorderLayout.SOUTH);
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.add(panel1);
this.add(panel2);
this.setSize(200, 160); // 设置窗体大小
this.setTitle("用户登录"); // 设置标题
this.setResizable(false); // 设置窗体不可放大缩小
this.addWindowListener(new WindowAdapter() { // 设置关闭事件,题目要求是不处理窗体事件,若不处理,就把这段注释掉
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setVisible(true); // 显示窗体
}
@Override
public void itemStateChanged(ItemEvent arg0) {
// TODO Auto-generated method stub
if (("" + arg0.getItem()).equals("学生用户")) {
userID = 0;
} else {
userID = 1;
}
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String cmd = arg0.getActionCommand();
if (cmd.equals("确定")) {
String name = userName.getText();
String pwd = psw.getText();
if (name.equals("")) {
System.out.println("用户名不能为空");
return;
}
if (pwd.equals("")) {
System.out.println("密码不能为空");
return;
}
if (userID == 0) {
if (name.equals("s") && pwd.equals("s")) {
System.out.println("学生用户登陆成功");
} else {
System.out.println("用户名不存在或者密码不正确!");
}
} else {
if (name.equals("t") && pwd.equals("t")) {
System.out.println("教师用户登陆成功");
} else {
System.out.println("用户名不存在或者密码不正确!");
}
}
} else if (cmd.equals("取消")) {
psw.setText("");
userName.setText("");
} else {
System.exit(1);
}
}
public static void main(String args[]) {
new UserLogin();
}
}
功能是实现了,带界面和他要求的不太一样,好恶心的说。。。。。。
求各位大神指导一下啊
------解决思路----------------------
用好各种布局管理器就OK了,还有万能Box
实在不好用就改成绝对布局~