【Java】day--Frame、Dialog、非容器类组件、布局管理器、事件部分知识点总结

(一)Frame

软件的交互方式:
    1.dos命令的交互方式。
    2.图形化界面的交互方式。
在Java图形化界面编程中把所有的图形类都称为组件类。
所有图形组件都位于:java.awt 和javax.swing包
     在awt包中存在的图形类,在swing中一样会存在,区别在于swing的图形都是以J开头。

java.awt包的图形类与javax.swing包的图形类的区别:
    1.java.awt包中的所有图形类的图形都是依赖系统的图形库。java.swing包中的所有图形类的图形都是sun自己实现的。
所有图形类都称为组件:
    容器组件:
    非容器组件:

public static void main(String[] args) {
		    //创建一个窗体软件,初始是不可见的
		JFrame frame=new JFrame("这是我第一个窗体软件");
		//设置窗体大小,以像素为单位
		//frame.setSize(300,400);
		//设置窗体左上角出现的位置
		//frame.setBounds(533, 134, 300, 400);//出现在屏幕中间,根据分辨率得出
		//将设置位置等操作写成一个工具类
		FrameUtil.initFrame(frame, 500, 400);
		//设置窗体的可见性
		frame.setVisible(true);
		//设置窗体的关闭事件
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭(否则只关闭窗体,不退出程序)
	}
//自己实现的图形化界面的工具类
public class FrameUtil {
	//设置窗体出现在中间位置
	public static void initFrame(JFrame frame,int width,int height) {
		//获取默认的系统工具包
		Toolkit toolkit=Toolkit.getDefaultToolkit();
		//获取屏幕分辨率
		Dimension d=toolkit.getScreenSize();
		int x=(int)d.getWidth();//返回double类型
		int y=(int)d.getHeight();
		frame.setBounds((x-width)/2, (y-height)/2, width, height);
		//设置窗体的可见性
		frame.setVisible(true);
		//设置窗体的关闭事件
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

(二)Dialog

Dialog(对话框):
    Dialog(Dialog owner,String title,boolean modal)
    owner 所有者
    title 对话框标题
    modal 模式 true:对话框没有关闭时不准操作所有者。 false:对话框即使没有关闭也可以操作所有者。
JOptionPane(对话框):
    //消息、警告、错误
    showMessageDialog(Component parentComponent,Object message,String title,int messageType)
        patentComponent  所有者
        message              消息
        title               对话框的标题
        messageType         指定对话框的类型(消息、警告、错误)

public static void main(String[] args) {
		//创建一个窗体
		JFrame frame=new JFrame("窗体");
		/*
		JDialog dialog=new JDialog(frame,"对话框",true);
		FrameUtil.initFrame(frame, 500, 400);//433 143
		dialog.setBounds(580, 250, 250, 250);
		dialog.setVisible(true);
		*/
		FrameUtil.initFrame(frame, 500, 400);
		//消息对话框
		//JOptionPane.showMessageDialog(frame, "明天第26天","通知",JOptionPane.INFORMATION_MESSAGE);
		//警告对话框
		//JOptionPane.showMessageDialog(frame,"疫情防控!!!","警告",JOptionPane.WARNING_MESSAGE);
		//错误对话框
		//JOptionPane.showMessageDialog(frame,"发脾气就不爱你了哦~~","错误",JOptionPane.ERROR_MESSAGE);
		/*
		//确认对话框
		int  num=JOptionPane.showConfirmDialog(frame, "继续戴口罩么?");
		System.out.println(num);//是 0  否 1  取消 2
		*/
		//输入对话框
		String money=JOptionPane.showInputDialog(frame, "请输入要取出的金额:");
		System.out.println("money:"+money);
	}

(三)FileDialog

FileDialog(文件对话框)
    FileDialog(Dialog parent,String title,int mode)
        parent  所有者
        title     标题
        mode    FileDialog.LOAD(加载) 或 FileDialog.SAVE(保存)
 

public static void main(String[] args) {
		JFrame frame=new JFrame();
		FileDialog dialog=new FileDialog(frame,"请打开文件",FileDialog.LOAD);
		//设置显示dialog
		dialog.setVisible(true);
		FrameUtil.initFrame(frame, 500, 400);
		System.out.println("打开文件的路径:"+dialog.getDirectory());
		System.out.println("打开的文件名:"+dialog.getFile());
	}

(四)非容器类组件

public static void main(String[] args) {
		JFrame frame=new JFrame("注册");
		//创建一个面板
		JPanel panel=new JPanel();
		//创建一个标签对象
		
		//用户名
		JLabel nameLabel=new JLabel("用户名:");
		//输入框
		JTextField nameField=new JTextField(12);//默认文本  列(一行多列)
		//把组件添加到面板上
		panel.add(nameLabel);
		panel.add(nameField);
		
		//密码
		JLabel pwdLabel=new JLabel("密码:");
		//密码框
		JPasswordField pwdField=new JPasswordField(12);
		panel.add(pwdLabel);
		panel.add(pwdField);
		
		//性别
		JLabel sexLabel=new JLabel("性别:");
		//单选框  注意:单选框一定要进行分组,在同一组的单选框中只能选其中一个
		JRadioButton man=new JRadioButton("男",true);//默认值
		JRadioButton woman=new JRadioButton("女");
		//分组
		ButtonGroup group=new ButtonGroup();
		//将选项添加到分组中
		group.add(woman);
		group.add(man);
		
		panel.add(sexLabel);
		panel.add(man);
		panel.add(woman);
		
		//城市
		JLabel addLabel =new JLabel("城市:");
		//下拉框
		Object[] cities= {"北京","上海","广州","深圳","郑州","西安"};
		JComboBox cityBox=new JComboBox(cities);
		
		panel.add(addLabel);
		panel.add(cityBox);
		
		//爱好
		JLabel hobbLabel=new JLabel("爱好:");
		//复选框
		JCheckBox java=new JCheckBox("java");
		JCheckBox listen=new JCheckBox("听他唱歌");
		JCheckBox feng=new JCheckBox("李易峰");
		
		panel.add(hobbLabel);
		panel.add(java);
		panel.add(listen);
		panel.add(feng);
		
		//自我介绍
		JLabel introJLabel=new JLabel("自我介绍:");
		//文本框(多行多列)
		JTextArea area=new JTextArea(15,15);//指定行 列
		panel.add(introJLabel);
		panel.add(area);
		frame.add(panel);
		FrameUtil.initFrame(frame, 800, 500);

	}

菜单组件:
    菜单条(JMenuBar) 菜单(JMenu) 菜单项(JMenuItem)
关系:菜单条添加菜单,菜单添加菜单项

复选菜单:菜单添加菜单,然后菜单再添加菜单项。
 

实现一个记事本:

public class notepad {
	//窗体
	JFrame frame=new JFrame("记事本");
	//菜单条
	JMenuBar bar=new JMenuBar();
	//菜单
	JMenu fileMenu=new JMenu("文件(F)");
	JMenu editMenu=new JMenu("编辑(E)");
	JMenu layoutMenu=new JMenu("格式(O)");
	JMenu viewMenu=new JMenu("查看(V)");
	JMenu helpMenu=new JMenu("帮助(H)");
	//菜单项
	JMenuItem save=new JMenuItem("保存(S)");
	JMenuItem open=new JMenuItem("打开(O)");
	JMenuItem copy=new JMenuItem("复制(C)");
	JMenuItem paste=new JMenuItem("粘贴(P)");
	
	JMenuItem about=new JMenuItem("关于(A)");
	JMenuItem version=new JMenuItem("版本(V)");
	//文本域
	JTextArea area=new JTextArea(20,20);
	
	//将组件组合起来
	public void init() {
		//将菜单添加到菜单条上
		bar.add(fileMenu);
		bar.add(editMenu);
		//bar.add(helpMenu);
		bar.add(layoutMenu);
		bar.add(viewMenu);
		//把菜单项添加到菜单上
		fileMenu.add(open);
		fileMenu.add(save);
		editMenu.add(copy);
		editMenu.add(paste);
		
		//复选菜单。菜单添加到菜单上
		editMenu.add(helpMenu);
		//菜单添加菜单项
		helpMenu.add(about);
		helpMenu.add(version);
		
		//把菜单条添加到窗体中
		frame.add(bar,BorderLayout.NORTH);//上 北
		frame.add(area);
		FrameUtil.initFrame(frame, 600, 600);
	}
	
	public static void main(String[] args) {
		new notepad().init();
	}
}

(五)布局管理器

布局管理器:
    布局管理器的作用是摆放组件。
每种不同的布局管理器都有不同的风格。

BorderLayout(边框布局管理器)
要注意的事项:
    1.如果一个容器使用了BorderLayOut布局管理器,那么往该容器添加组件的时候如果没有指定具体的方位,那么默认在中间。
    2.Frame默认使用的就是BorderLayout布局管理器。
    3.东南西北哪个组件缺少了。那么中间组件就会占据其空缺位置。

public static void main(String[] args) {
		JFrame frame=new JFrame("边框布局管理器");
		//创建边框布局管理器
		BorderLayout borderLayout=new BorderLayout();
		//让窗体使用边框布局管理器
		frame.setLayout(borderLayout);
		frame.add(new JButton("北"),BorderLayout.NORTH);
		frame.add(new JButton("南"),BorderLayout.SOUTH);
		frame.add(new JButton("东"),BorderLayout.EAST);
		frame.add(new JButton("西"),BorderLayout.WEST);
		frame.add(new JButton("中"),BorderLayout.CENTER);
		
		//初始化窗体
		FrameUtil.initFrame(frame, 400, 400);
	}

FlowLayout  流式布局管理器
注意事项:
    1.使用FlowLayout默认是居中对齐。
    2.panel默认使用的布局管理器就是FlowLayout布局管理器。

public static void main(String[] args) {
		JFrame frame=new JFrame("窗体");
		//面板
		JPanel panel=new JPanel();
		//创建一个流式布局管理器
		FlowLayout flowLayout=new FlowLayout(FlowLayout.LEFT,10,0);//指定左对齐,水平间隔为10个像素
		//让面板使用流式布局管理器
		panel.setLayout(flowLayout);
		frame.add(panel);
		panel.add(new JButton("one"));
		panel.add(new JButton("two"));
		panel.add(new JButton("three"));
		panel.add(new JButton("four"));
		FrameUtil.initFrame(frame, 300, 300);
	}

GridLayout 表格布局管理器:
    如果添加的组件超过了表格的个数,那么会添加多一列进行处理。

public static void main(String[] args) {
		JFrame frame=new JFrame();
		//创建一个表格布局管理器
		GridLayout gridLayout=new GridLayout(4,4);//表格可以摆放16个组件
		frame.setLayout(gridLayout);
		for(int i=0;i<10;i++) {
			frame.add(new JButton(i+""));
		}
		frame.add(new JButton("+"));
		frame.add(new JButton("-"));
		frame.add(new JButton("*"));
		frame.add(new JButton("/"));
		frame.add(new JButton("="));
		frame.add(new JButton("."));
		frame.add(new JButton("?"));
		FrameUtil.initFrame(frame, 400, 400);
	}

(六)事件

事件:当某个组件发生了指定的动作时,会有相应的处理方案。
事件源 监听器 事件 处理方式

动作监听器:动作监听器对于鼠标点击和空格键都起作用。

public static void main(String[] args) {
		//创建窗体
		JFrame frame=new JFrame("窗体");
		//创建一个按钮
		JButton button=new JButton("点我");
		//给按钮添加一个监听器,匿名对象
		button.addActionListener(new ActionListener() {
			//如果发生鼠标点击、按下空格键就会调用actionPerformed方法
			//处理方式 ,参数是事件
			@Override
			public void actionPerformed(ActionEvent e) {
				JButton button=(JButton)e.getSource();//获取事件源对象
				String content=button.getText();
				if("点我".equals(content)) {
					button.setText("点它");
				}else {
					button.setText("点我");
				}
			}
		});
		frame.add(button);
		FrameUtil.initFrame(frame,300, 300);
	}

鼠标监听器

JFrame frame=new JFrame("窗体");
		//创建一个按钮
		JButton button=new JButton("点我");
		//给按钮添加一个鼠标监听器
		/*
		button.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
				System.out.println("鼠标松开...");
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				System.out.println("鼠标按下...");
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				System.out.println("鼠标离开...");
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				System.out.println("鼠标移入...");
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				System.out.println("鼠标单击...");
				
			}	
		});*/
		/*MouseAdapter适配器 该类已经实现了MouseListener接口,但是实现的方法都是空实现
			需要用到哪个方法再具体实现。
		*/
		//匿名内部类
		button.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				//System.out.println("鼠标单击...");
				if(e.getClickCount()==2) {
					System.out.println("双击了...");
				}
			}	
		});
		frame.add(button);
		FrameUtil.initFrame(frame, 300, 300);
	}

键盘监听器

public static void main(String[] args) {
		JFrame frame=new JFrame("窗体");
		//创建一个按钮
		JButton button=new JButton("点我");
		//给按钮添加一个键盘监听器
		/*
		button.addKeyListener(new KeyListener() {
			
			@Override
			public void keyTyped(KeyEvent e) {
				System.out.println("键入某个键...");	
			}
			
			@Override
			public void keyReleased(KeyEvent e) {
				System.out.println("释放键...");
			}
			
			@Override
			public void keyPressed(KeyEvent e) {
				System.out.println("按下某个键...");
			}
		});
		*/
		//适配器,需要哪个方法再具体实现
		button.addKeyListener(new KeyAdapter() {
			//实现方法
			public void keyPressed(KeyEvent e) {
				System.out.println("按下的键:"+e.getKeyChar()+"键的code:"+e.getKeyCode());
			}
		});
		frame.add(button);
		FrameUtil.initFrame(frame, 300, 300);
	}

 

你可能感兴趣的:(java)