我想知道,每触发一个按钮,弹出来一个子窗体,该页面的任务栏是怎么做的?用了什么方法,还是某个类,
使用按钮的action事件,实现ActionLinster接口,new 窗口类就可以了。
登录界面
package java3.T9;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class LoginUI extends JFrame implements ActionListener,MouseListener{
JLabel bgImg,lblAccount,lblPassword,lblReg,lblForgetPwd;
JTextField txtAccount;
JPasswordField txtPassword;
JButton btnLogin,btnExit;
public LoginUI() {
setTitle("QQ登录");
ImageIcon icon = new ImageIcon("upload/touxiang.png");
//设置图标
setIconImage(icon.getImage());
//设置背景图片
Icon bgIcon = new ImageIcon("upload/login.jpg");
bgImg = new JLabel(bgIcon);
//窗口的默认布局是边框布局
//把bgImg设置的窗口
add(bgImg);
lblAccount = new JLabel("账号:",JLabel.RIGHT);
lblPassword = new JLabel("密码:",JLabel.RIGHT);
txtAccount = new JTextField(20);
txtPassword = new JPasswordField(20);
lblAccount.setBounds(78, 173, 50, 30);
txtAccount.setBounds(128, 173, 194, 30);
lblPassword.setBounds(78, 203, 50, 30);
txtPassword.setBounds(128, 203, 194, 30);
//设置密码框显示的字符
txtPassword.setEchoChar('*');
lblReg = new JLabel("注册账号");
lblForgetPwd = new JLabel("找回密码");
lblReg.setBounds(330, 170, 80, 30);
lblForgetPwd.setBounds(330, 200, 80, 30);
btnLogin = new JButton("登录(L)");
//设置热键
btnLogin.setMnemonic('L');
btnExit = new JButton("关闭(C)");
btnExit.setMnemonic('C');
btnLogin.setBounds(128, 250, 80, 30);
btnExit.setBounds(228, 250, 80, 30);
//添加到bgImg里面
bgImg.add(lblAccount);
bgImg.add(txtAccount);
bgImg.add(lblPassword);
bgImg.add(txtPassword);
bgImg.add(lblReg);
bgImg.add(lblForgetPwd);
bgImg.add(btnLogin);
bgImg.add(btnExit);
//为按钮添加事件
btnLogin.addActionListener(this);
btnExit.addActionListener(this);
//添加鼠标事件
lblReg.addMouseListener(this);
lblForgetPwd.addMouseListener(this);
//不允许改变窗口的大小
setResizable(false);
setSize(427,321);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
@Override
public void mouseClicked(MouseEvent e) {
if(e.getSource() == lblReg) {
//弹出注册窗口
new RegUI();
}
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btnLogin) {
JOptionPane.showMessageDialog(null, "登录成功");
}else if(e.getSource() == btnExit) {
System.exit(0);
}
}
public static void main(String[] args) {
new LoginUI();
}
}
点击注册,弹出注册窗口
package java3.T9;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/*
* Swing所在的包:java.swing
* 1.常用组件的使用
* */
public class RegUI extends JFrame implements ActionListener{
//姓名,年龄
JTextField txtUserName,txtAge; //文本框
//学历,民族,星座
JComboBox cbDegree,cbNation,cbStar; //下拉列表框
//性别
JRadioButton rbMale,rbRemale; //多选框
//兴趣爱好
JCheckBox cbFootball,cbBasketBall,cbNet,cbWatch; //多选框
//备注
JTextArea txtRemark; //文本区域框
//注册,关闭
JButton btnSave,btnClose; //按钮
//定义学历数组
String degreeArr[] = {"小学","初中","高中","大专","本科","研究生","博士"};
//定义民族数组
String nationArr[] = {"汉族","苗族","藏族","高山族","朝鲜族","畲族","壮族","其他"};
//定义星座数组
String starArr[] = {"双鱼座","处女座","狮子座","金牛座","巨蟹座","天秤座","水瓶座","双子座","白羊座","天蝎座","摩羯座","射手座"};
public RegUI() {
super("注册用户");
//设置布局为绝对布局
setLayout(null);
//工具类
Toolkit kit = Toolkit.getDefaultToolkit();
Image image = kit.getImage("upload/qq.jpg");
//设置窗口图标
setIconImage(image);
// ImageIcon icon = new ImageIcon("upload/qq.jpg");
// setIconImage(icon.getImage());
JLabel lblTitle,lblUserName,lblAge,lblDegree,lblNation,lblStar,lblSex,lblHover,lblRemark;
lblTitle = new JLabel("用户注册",new ImageIcon("upload/qq.jpg"),JLabel.CENTER);
Font font = new Font("宋体",Font.BOLD,20);
lblTitle.setFont(font);
lblTitle.setBounds(0, 10, 500, 30);
lblTitle.setForeground(Color.RED);
//添加到窗口
add(lblTitle);
lblUserName = new JLabel("用户名称",JLabel.RIGHT);
txtUserName = new JTextField(20); //默认显示的字符数
//设置控件在窗口的位置
lblUserName.setBounds(80, 50, 100, 20);
txtUserName.setBounds(180, 50, 200, 20);
//添加控件到窗口指定位置显示
add(lblUserName);
add(txtUserName);
lblAge = new JLabel("年龄",JLabel.RIGHT);
txtAge = new JTextField(20);
lblAge.setBounds(80, 80, 100, 20);
txtAge.setBounds(180, 80, 200, 20);
add(lblAge);
add(txtAge);
lblDegree = new JLabel("学历",JLabel.RIGHT);
//学历控件中显示的是数组的值
cbDegree = new JComboBox(degreeArr);
lblDegree.setBounds(80, 110, 100, 20);
cbDegree.setBounds(180, 110, 200, 20);
add(lblDegree);
add(cbDegree);
lblNation = new JLabel("民族",JLabel.RIGHT);
//民族控件中显示的是数组的值
cbNation = new JComboBox(nationArr);
lblNation.setBounds(80, 140, 100, 20);
cbNation.setBounds(180, 140, 200, 20);
add(lblNation);
add(cbNation);
lblStar = new JLabel("星座",JLabel.RIGHT);
//民族控件中显示的是数组的值
cbStar = new JComboBox(starArr);
lblStar.setBounds(80, 170, 100, 20);
cbStar.setBounds(180, 170, 200, 20);
add(lblStar);
add(cbStar);
lblSex = new JLabel("性别",JLabel.RIGHT);
rbMale = new JRadioButton("男");
rbRemale = new JRadioButton("女");
//同一组的单选框必须添加到一个ButtonGroup组件
ButtonGroup gb = new ButtonGroup();
gb.add(rbMale);
gb.add(rbRemale);
lblSex.setBounds(80, 200, 100, 20);
rbMale.setBounds(180, 200, 50, 20);
//默认选中
rbMale.setSelected(true);
rbRemale.setBounds(230, 200, 50, 20);
add(lblSex);
add(rbMale);
add(rbRemale);
// cbFootball,cbBasketBall,cbNet,cbWatch
lblHover = new JLabel("兴趣爱好",JLabel.RIGHT);
cbFootball = new JCheckBox("足球");
cbBasketBall = new JCheckBox("篮球");
cbNet = new JCheckBox("上网");
cbWatch = new JCheckBox("看书");
lblHover.setBounds(80, 230, 100, 20);
cbFootball.setBounds(180, 230, 60, 20);
cbBasketBall.setBounds(240, 230, 60, 20);
cbNet.setBounds(300, 230, 60, 20);
cbWatch.setBounds(360, 230, 60, 20);
add(lblHover);
add(cbFootball);
add(cbBasketBall);
add(cbNet);
add(cbWatch);
lblRemark = new JLabel("备注",JLabel.RIGHT);
txtRemark = new JTextArea(5, 80);
lblRemark.setBounds(80, 260, 100, 20);
txtRemark.setBounds(80,290, 330, 100);
add(lblRemark);
JScrollPane bar = new JScrollPane(txtRemark);
bar.setBounds(80,290, 330, 100);
add(bar);
btnSave = new JButton("注册(S)");
//设置热键(先按住ALT键+S)
btnSave.setMnemonic('S');
btnClose = new JButton("关闭(X)");
//设置热键(先按住ALT键+X)
btnClose.setMnemonic('X');
btnSave.setBounds(250,430, 100, 30);
btnClose.setBounds(360,430, 100, 30);
//注册按钮事件
btnClose.addActionListener(this);
btnSave.addActionListener(this);
add(btnSave);
add(btnClose);
setSize(500,500);
setVisible(true);
//DISPOSE_ON_CLOSE,关闭当前窗口,但不退出程序
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
}
//Action事件
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btnSave) {
//弹出对话框
JOptionPane.showMessageDialog(null, "你点击了注册按钮");
}else if(e.getSource() == btnClose) {
JOptionPane.showMessageDialog(null, "你点击了关闭按钮");
//退出程序
// System.exit(0);
//关闭窗口
// setVisible(false);
dispose();
}
}
public static void main(String[] args) {
new RegUI();
}
}
//实例化按钮对象
Button bz=new JButton("帮助");
//设置按钮的位置
bz.setBounds(5, 370, 90, 20);
//给按钮注册动作事件监听
bz.addActionListener(this);
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==bz){
new Help();
}
}
package gz.ht.edu;
import java.awt.Container;
import javax.swing.Frame;
import javax.swing.Label;
public class Help extends Frame{
public Help(){
//设置标题
super("帮助界面");
//设置窗口大小
this.setSize(400, 300);
//设置窗口可见
this.setVisible(true);
}
}
大致代码如上,万望采纳
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632