十二、GUI图形化界面编程

软件交互方式:
1.控制台交互
2.图形化界面交互

java使用的图形类主要在java.awt 与 javax.swing
java.awt 与 javax.swing 的区别?
java,awt 中使用的图形库,使用的是系统的图形库。
java,swing 中使用的图形库,都是sun公司自己实现的。
【非常 依赖系统图形库对java跨平台是非常不好的,所以sun又加入了swing,不再依赖系统库】

组件的类别;

		-------------| 容器组件
		-------------| 非容器组件

容器类

JFrame窗体
JFrame的默认布局管理器为Borderlayout

new JFrame(“hello world”); 设置不可见的窗体。

设置窗体居中
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize(); 获取分辨率对象
jFrame.setBounds((int)(dimension.getWidth()-300)/2, (int)(dimension.getHeight()-400)/2, 300, 400);

设置窗体的可见性
jFrame.setVisible(true);

设置窗体关闭事件 :关闭窗口
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Jpanel面板

  public static void main(String[] args) throws IOException {
		 
	    	//初始化窗口
	    	JFrame  jFrame=getInitFrame(400, 400);
	    	 
	    	JPanel jPanel=new  JPanel();
	    	jPanel.setBackground(Color.red);
	    	
	    	jFrame.add(jPanel);

		
		}
	

JDialog对话框
(比较难用)

JOptionPane对话框
//创建对话框
//消息对话框
JOptionPane.showMessageDialog(jFrame, “m名”, “12”, JOptionPane.INFORMATION_MESSAGE);
//警告对话框
JOptionPane.showMessageDialog(jFrame, “mw”, “11”, JOptionPane.WARNING_MESSAGE);
//错误对话框
JOptionPane.showMessageDialog(jFrame, “mw”, “11”, JOptionPane.ERROR_MESSAGE);

//输入框
JOptionPane.showInputDialog(“12”);

//确认框
JOptionPane.showConfirmDialog(jFrame, “23”, “11”, JOptionPane.YES_NO_OPTION);

public static void main(String[] args) throws IOException {
		 
		//初始化窗口
		JFrame  jFrame=getInitFrame(400, 400);
		
		//创建对话框
		//消息对话框
		JOptionPane.showMessageDialog(jFrame, "m名", "12", JOptionPane.INFORMATION_MESSAGE);
		//警告对话框
		JOptionPane.showMessageDialog(jFrame, "mw", "11", JOptionPane.WARNING_MESSAGE);
		//错误对话框
		JOptionPane.showMessageDialog(jFrame, "mw", "11", JOptionPane.ERROR_MESSAGE);
		
		//输入框
		JOptionPane.showInputDialog("12");
		
		//确认框
		JOptionPane.showConfirmDialog(jFrame, "23", "11", JOptionPane.YES_NO_OPTION);
	}

文件对话框

 public static void main(String[] args) throws IOException {
		 
	    	//初始化窗口
	    	JFrame  jFrame=getInitFrame(400, 400);
	    	FileDialog fileDialog=new FileDialog(jFrame,"请选择打开的文件",FileDialog.LOAD);
	    	fileDialog.setVisible(true);
	    	System.out.println(fileDialog.getFile());
		
	    	FileDialog fileDialog2=new FileDialog(jFrame,"请选择保存的路径",FileDialog.SAVE);
	    	fileDialog2.setVisible(true);
	    	System.out.println("文件所在目录:"+fileDialog2.getDirectory());
	    	System.out.println("文件名:"+fileDialog2.getFile());


		
		}
	
	
	

非容器类

常用组件

   public static void main(String[] args) throws IOException {
		 
	    	//初始化窗口
	    	JFrame  jFrame=getInitFrame(400, 400);
	    	 
	    	//面板
	    	JPanel jPanel=new  JPanel();
	    	jFrame.add(jPanel);
	    	//jPanel.setBackground(Color.pink);
	    	
	    	//用户名
	    	JLabel  nameLable=new JLabel("用户名");
	    	//用户名输入框
	    	JTextField  nameField=new JTextField(15);
	    	jPanel.add(nameLable);
	    	jPanel.add(nameField);
	    	
	    	//密码
	    	JLabel  passWordLable=new JLabel("密码");
	    	JPasswordField password=new JPasswordField(15);
	    	jPanel.add(passWordLable);
	    	jPanel.add(password);
	    	
	    	
	    	//性别----》》   单选框
	    	JLabel  sexLable=new JLabel("性别");
	    	JRadioButton  woman=new JRadioButton("女",true);	    	
	    	JRadioButton  man=new JRadioButton("男");
	    	//单选框一定要分组
	    	ButtonGroup group=new ButtonGroup();
	    	group.add(man);
	    	group.add(woman);
	    	
	    	jPanel.add(man);
	    	jPanel.add(woman);
	    	
	    	//来自城市 ---》下拉框
	    	JLabel city=new JLabel("来自城市");
	    	JComboBox  citys=new JComboBox<>(new String[] {"北京","上海","杭州"});
	    	jPanel.add(city);
	    	jPanel.add(citys);
	 
	    	//兴趣爱好 --->> 复选框
	    	JLabel ho=new JLabel("兴趣爱好");
	    	JCheckBox checkBox=new JCheckBox("篮球",true); //默认选中
	    	JCheckBox checkBox2=new JCheckBox("java2");
	    	JCheckBox checkBox3=new JCheckBox("java3");
	    	
	    	jPanel.add(ho);
	    	jPanel.add(checkBox);
	    	jPanel.add(checkBox2);
	    	jPanel.add(checkBox3);
	    	
	    	//个人简介----》
	    	JLabel personC=new JLabel("个人简介");
	    	JTextArea per=new JTextArea(5, 5);
	    	per.setLineWrap(true);//设置自动换行
	    	jPanel.add(personC);
	    	jPanel.add(per);
	    
	    	
		}
	

菜单组件
菜单条(MenuBar) 、菜单(Menu)、菜单项 (MenuItem)
菜单条添加菜单。
菜单添加菜单项。

复选菜单:
首先菜单添加菜单。菜单添加菜单项。

public class FrameUtil {

	
	    public static void main(String[] args) throws IOException {
		 
	    	JFrame  jFrame=new JFrame("Nodepad");
	    	initFrame(jFrame, 600, 450);
	    	
	    	//菜单条
	    	JMenuBar  jMenuBar=new  JMenuBar();
	    	
	    	//菜单
	    	JMenu  fileJMenu=new JMenu("文件");
	    	JMenu  editorJMenu=new JMenu("编辑");	    	
	    	JMenu  switchMenu=new JMenu("切换工作目录");
	    	
	    	//菜单项
	    	JMenuItem  openItem=new JMenuItem("open");
	    	JMenuItem  closeItem=new JMenuItem("close");
	    	JMenuItem  aboutItem=new JMenuItem("about");	    	
	    	JMenuItem  nowItem=new JMenuItem("001");
	    	JMenuItem  historyItem=new JMenuItem("002");


	    	//文本项
	    	JTextArea area=new JTextArea(600,400);
	    	area.setLineWrap(true);//换行
	    	
	    
		    
	    	//布局
	    	jFrame.add(jMenuBar,BorderLayout.NORTH);
	    	jFrame.add(editorJMenu,BorderLayout.CENTER);

	    	jMenuBar.add(fileJMenu);
	    	jMenuBar.add(editorJMenu);
	    	
	    	
	    	//菜单添加菜单项
	    	fileJMenu.add(openItem);
	    	fileJMenu.add(closeItem);
		    editorJMenu.add(aboutItem);
		    
		    //菜单添加菜单,然后菜单添加菜单项 。复选菜单
		    switchMenu.add(nowItem);
		    switchMenu.add(historyItem);
		    fileJMenu.add(switchMenu);
	    	
	    	
	    

	    	
	    	
		}
	
	
	
	
	
	public static  void  initFrame(JFrame jFrame,int width,int height) {
	
		//设置窗体居中
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		Dimension dimension = toolkit.getScreenSize();
		jFrame.setBounds((int)(dimension.getWidth()-300)/2, (int)(dimension.getHeight()-400)/2, 300, 400);

		//设置可见
		jFrame.setVisible(true);
		
		
		
		//设置关闭事件
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}
	
	 
	
}


布局管理器

布局管理器就是用于指定组件的摆放位置。
每种布局管理器都有自己的摆放风格。

BorderLayout(边框布局管理器)

           摆放的风格是:上北 、  下南、   左西、   右东 、   中

在这里插入图片描述

注意事项:
1.使用BorderLayout时添加组件时,如果没有指定添加的方法,则默认添加在中间位置。
2.使用Borderout的时候,如果东南西北哪个方向没有组件,那么中间位置的组件就会占据那个位置。
3.JFrame容器默认的布局管理器就是BorderLayout

public class App {
 
	public static void main(String[] args) {
		
		JFrame  jFrame=new JFrame("hello");
		init(jFrame, 500, 400);
		
		BorderLayout borderLayout=new BorderLayout();
		jFrame.add(new Button("bei"),BorderLayout.NORTH);
		jFrame.add(new Button("bei"),BorderLayout.SOUTH);
		jFrame.add(new Button("bei"),BorderLayout.EAST);
		jFrame.add(new Button("bei"),BorderLayout.WEST);

		
	}
	
	
	public static  void  init(JFrame jFrame,int width,int height) {
		
		Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
		Dimension dimension = defaultToolkit.getScreenSize();
		
		jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
		
		jFrame.setVisible(true);
		
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

流式布局管理器(FlowLayout)

注意事项:
1.默认居中对齐。
2.JPanel面板默认的布局管理器就是FlowLayout

public class App {
 
	public static void main(String[] args) {
		
		JFrame  jFrame=new JFrame("hello");
		init(jFrame, 500, 400);
		
		FlowLayout  layout=new FlowLayout(FlowLayout.LEFT,0,50);//指定对齐的方式,默认居中。0:元素与元素的水平距离;50:元素与元素之间的垂直距离
		jFrame.setLayout(layout);
		jFrame.add(new Button("bei"));
		jFrame.add(new Button("bei"));
		jFrame.add(new Button("bei"));
		jFrame.add(new Button("bei"));
		jFrame.add(new Button("bei"));

		
	}
	
	
	public static  void  init(JFrame jFrame,int width,int height) {
		
		Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
		Dimension dimension = defaultToolkit.getScreenSize();
		
		jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
		
		jFrame.setVisible(true);
		
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

表格布局管理器(GridLayout)

public class App {
 
	public static void main(String[] args) {
		
		JFrame  jFrame=new JFrame("hello");
		init(jFrame, 500, 400);
		
		GridLayout  layout=new GridLayout(4,2);//指定对齐的方式,默认居中。0:元素与元素的水平距离;50:元素与元素之间的垂直距离
		jFrame.setLayout(layout);
		jFrame.add(new Button("bei"));
		jFrame.add(new Button("bei"));
		jFrame.add(new Button("bei"));
		jFrame.add(new Button("bei"));
		jFrame.add(new Button("bei"));

		
	}
	
	
	public static  void  init(JFrame jFrame,int width,int height) {
		
		Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
		Dimension dimension = defaultToolkit.getScreenSize();
		
		jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
		
		jFrame.setVisible(true);
		
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

卡片布局管理器(CardLayout)

事件

事件:当发生某个事件时,都有对应的解决方案。

事件、事件源 、 监听器、处理方式

按钮动作事件监听器
对于鼠标点击和空格键都起作用

	public static void main(String[] args) {
		
		JFrame  jFrame=new JFrame("hello");
		init(jFrame, 500, 400);
		 
		JButton button=new JButton("12");
		jFrame.add(button,BorderLayout.NORTH);

		//动作时间监听器 ==》对于鼠标点击和空格键都会起作用
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				//获取事件源
				JButton source = (JButton) e.getSource();	
				source.setText("123123s");
			}
		});
		
		
		
		
	}
	
	
	public static  void  init(JFrame jFrame,int width,int height) {
		
		Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
		Dimension dimension = defaultToolkit.getScreenSize();
		
		jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
		
		jFrame.setVisible(true);
		
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

鼠标事件监听器
MouseListener

public class App {
 
	public static void main(String[] args) {
		
		JFrame  jFrame=new JFrame("hello");
		init(jFrame, 500, 400);
		 
		JButton button=new JButton("12");
		jFrame.add(button,BorderLayout.NORTH);


		
		//鼠标事件监听器
		button.addMouseListener(new MouseListener() {
			
			//鼠标松开的时候触发
			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			//鼠标点下的时候触发
			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			//鼠标移出的时候触发
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			//鼠标进入的时候触发
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			//鼠标单机击的时候触发
			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
		
		
		
		
	}
	
	
	public static  void  init(JFrame jFrame,int width,int height) {
		
		Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
		Dimension dimension = defaultToolkit.getScreenSize();
		
		jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
		
		jFrame.setVisible(true);
		
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

我只是想调用一个方法,却实现那么多的方法。解决方案使用鼠标事件的适配器

public class App {
 
	public static void main(String[] args) {
		
		JFrame  jFrame=new JFrame("hello");
		init(jFrame, 500, 400);
		 
		JButton button=new JButton("12");
		jFrame.add(button,BorderLayout.NORTH);


		
		
		//鼠标事件适配器。用哪一个方法,就重写哪一个[双击事件]
	    button.addMouseListener(new MouseAdapter() {

		@Override
		public void mouseClicked(MouseEvent e) {
			int clickCount = e.getClickCount();
			if(clickCount==2) {
				System.out.println("...");
			}
		}
		  
		  
	});
		
		
		
		
	}
	
	
	public static  void  init(JFrame jFrame,int width,int height) {
		
		Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
		Dimension dimension = defaultToolkit.getScreenSize();
		
		jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
		
		jFrame.setVisible(true);
		
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}


键盘事件监听器

KeyListener

public static void main(String[] args) {
		
		JFrame  jFrame=new JFrame("hello");
		init(jFrame, 500, 400);
		 
		JButton button=new JButton("12");
		jFrame.add(button,BorderLayout.NORTH);

		button.addKeyListener(new KeyListener() {
			
			@Override
			public void keyTyped(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void keyReleased(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void keyPressed(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
		
	}
	
	

使用键盘监听器,不想实现那么多方法,所以使用keyAdapet

public class App {
 
	public static void main(String[] args) {
		
		JFrame  jFrame=new JFrame("hello");
		init(jFrame, 500, 400);
		 
		JButton button=new JButton("12");
		jFrame.add(button,BorderLayout.NORTH);

		button.addKeyListener(new KeyAdapter() {

			@Override
			public void keyPressed(KeyEvent e) {
				JButton source = (JButton) e.getSource();
				source.setText(e.getKeyCode()+"");
			}
			
		
		});
	}
	public static  void  init(JFrame jFrame,int width,int height) {
		
		Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
		Dimension dimension = defaultToolkit.getScreenSize();
		
		jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
		
		jFrame.setVisible(true);
		
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值