J2SE II一一图形技术GUI编程

此生再无相见时 提交于 2020-11-30 12:10:02

(1)GUI 与CLI

   GUI

   •Graphical User Interface(图形用户接口)。

   •用图形的方式,来显示计算机操作的界面,这样更方便更直观。

  CLI

   •Command line User Interface (命令行用户接口)

   •就是常见的Dos命令行操作。

   •需要记忆一些常用的命令,操作不直观。

   (2)相关的两个包:        

   java.awt:

   Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。

  javax.swing:

 在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。

   (3)GUI的继承体系         组件:组件就是对象             容器组件:是可以存储基本组件和容器组件的组件。             基本组件:是可以使用的组件,但是必须依赖容器。

   image

   (4)事件监听机制    事件源:事件发生的地方

   事件:就是要发生的事情

   事件处理:就是针对发生的事情做出的处理方案

   事件监听器:就是把事件源和事件关联起来    (5)适配器模式     接口     抽象适配器类     实现类    (6)案例:    A:创建窗体案例

public class FrameDemo {	
public static void main(String[] args) {		
// 创建窗体对象		
// Frame f = new Frame();		
// Frame(String title)		
Frame f = new Frame("林青霞"); 		
// 设置窗体标题		
f.setTitle("HelloWorld");		
// 设置窗体大小		
f.setSize(400, 300); 
// 单位:像素		
// 设置窗体位置		
f.setLocation(400, 200);         
// 一个方法搞定		
//f.setBounds(400, 200, 400, 300); 		
// 调用一个方法,设置让窗体可见		
f.setVisible(true); 		
// System.out.println("helloworld");	
}}

B:窗体关闭案例

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
 public class FrameDemo {	
public static void main(String[] args) {		
// 创建窗体对象		
Frame f = new Frame("窗体关闭案例"); 		
// 设置窗体属性		
f.setBounds(400, 200, 400, 300); 		
// 让窗体关闭		
//事件源		
//事件:对窗体的处理		
//事件处理:关闭窗口(System.exit(0));		
//事件监听//		
f.addWindowListener(new WindowListener() {
//			@Override//			
public void windowOpened(WindowEvent e) {
//			
}//			
//			@Override//			
public void windowIconified(WindowEvent e) {
//			
}//			
//			@Override//			
public void windowDeiconified(WindowEvent e) {
//			
}//			
//			@Override//			
public void windowDeactivated(WindowEvent e) {
//			
}//			
//			@Override//			
public void windowClosing(WindowEvent e) {
//				
System.exit(0);
//			
}//			
//			@Override//			
public void windowClosed(WindowEvent e) {
//			
}//			
//			@Override//			
public void windowActivated(WindowEvent e) {
//			
}//		
});				
//用适配器类改进		
f.addWindowListener(new WindowAdapter() {			
@Override			
public void windowClosing(WindowEvent e) {				
System.exit(0);			
}		
}); 		
// 设置窗体可见		
f.setVisible(true);	}}

C:窗体添加按钮并对按钮添加事件案例。

/* * 针对用户操作的四种功能 */
public interface UserDao {
public abstract void add(); 	
public abstract void delete(); 	
public abstract void update(); 
public abstract void find();}
public class UserDaoImpl implements UserDao { 	
@Override	
public void add() {		
System.out.println("添加功能");	} 	
@Override	
public void delete() {		
System.out.println("删除功能");	} 	
@Override	public void update() {
System.out.println("修改功能");	} 
	@Override	
public void find() {		
System.out.println("查找功能");	
} }

 /*  * 问题:  *  接口(方法比较多) -- 实现类(仅仅使用一个,也得把其他的实现给提供了,哪怕是空实现)  *  太麻烦了,  * 解决方案:  * 接口(方法比较多) -- 适配器类(实现接口,仅仅空实现) -- 实现类(用哪个重写哪个)  */

public abstract class UserAdapter implements UserDao { 	
@Override	
public void add() {	
} 	
@Override	
public void delete() {	
} 	
@Override	
public void update() {
	} 	
@Override	
public void find() {
	} }
public class UserDaoImpl2 extends UserAdapter {	
@Override	
public void add() {	
System.out.println("添加功能");
	}}
 public class UserDaoDemo {	
public static void main(String[] args) {
UserDao ud = new UserDaoImpl();	
ud.add();		// 我没有说我们需要四种功能都实现啊。	
UserDao ud2 = new UserDaoImpl2();	
ud2.add();	
}}

界面中的组件布局。

public class FrameDemo {
public static void main(String[] args) {	
	// 创建窗体对象		
Frame f = new Frame("添加按钮");	
	// 设置属性	
	f.setBounds(400, 200, 400, 300);	
// 设置布局为流式布局		
f.setLayout(new FlowLayout()); 
		// 创建按钮对象	
Button bu = new Button("点我啊");	
	// bu.setSize(20, 10); 	
	// 把按钮添加到窗体	
	f.add(bu); 		
// 设置窗体可以关闭
		f.addWindowListener(new WindowAdapter() {	
		@Override		
	public void windowClosing(WindowEvent e) {
				System.exit(0);
			}	
	}); 		
bu.addActionListener(new ActionListener() {			
@Override			
public void actionPerformed(ActionEvent e) {			
System.out.println("你再点试试");			}		
}); 		
// 窗体显示	
	f.setVisible(true);	}}

D:把文本框里面的数据转移到文本域

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 public class FrameDemo {	
public static void main(String[] args) {		
/ 创建窗体对象	
	Frame f = new Frame("数据转移");	
// 设置窗体属性和布局	
	f.setBounds(400, 200, 400, 300);	
	f.setLayout(new FlowLayout()); 	
	// 创建文本框	
	final TextField tf = new TextField(20);	
	// 创建按钮	
	Button bu = new Button("数据转移");	
	// 创建文本域	
	final TextArea ta = new TextArea(10, 40); 	
	// 把组件添加到窗体	
	f.add(tf);		
f.add(bu);		
f.add(ta); 	
	// 设置窗体关闭	
	f.addWindowListener(new WindowAdapter() {
			@Override		
	public void windowClosing(WindowEvent e) {
			System.exit(0);	
		}	
}); 		
// 对按钮添加事件	
	bu.addActionListener(new ActionListener() {		
	@Override		
	public void actionPerformed(ActionEvent e) {	
			
// 获取文本框的值	
			String tf_str = tf.getText().trim();	
// 清空数据		
		tf.setText(""); 	
			// 设置给文本域
				// ta.setText(tf_str);		
// 追加和换行			
	ta.append(tf_str + "\r\n");		
					
	//获取光标			
	tf.requestFocus();		
	}		
}); 		
// 设置窗体显示
		f.setVisible(true);	
}}

E:更改背景色

import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class FrameDemo {	
public static void main(String[] args) {	
	// 创建窗体对象
final Frame f = new Frame("更改背景色");	
	// 设置窗体属性和布局	
f.setBounds(400, 200, 400, 300);	
	f.setLayout(new FlowLayout()); 	
	// 创建四个按钮	
	Button redButton = new Button("红色");	
	Button greenButton = new Button("绿色");
		Button buleButton = new Button("蓝色"); 
		// 添加按钮	
	f.add(redButton);	
	f.add(greenButton);		
f.add(buleButton); 	
	// 设置窗体关闭	
	f.addWindowListener(new WindowAdapter() {	
		@Override			
public void windowClosing(WindowEvent e) {
				System.exit(0);
			}		

}); 		
// 对按钮添加动作事件	
	// redButton.addActionListener(new ActionListener() {	
	// @Override		
// public void actionPerformed(ActionEvent e) {	
	// f.setBackground(Color.RED);		
/ }		
// }); 	
	// 对按钮添加鼠标点击事件	
	// redButton.addMouseListener(new MouseAdapter() {	
	// @Override	
	// public void mouseClicked(MouseEvent e) {	
	// f.setBackground(Color.RED);
		// }		
// }); 		
// 对按钮添加鼠标的进入事件	
	redButton.addMouseListener(new MouseAdapter() {	
		@Override		
	public void mouseEntered(MouseEvent e) {	
			f.setBackground(Color.RED);		
	}		}); 		
redButton.addMouseListener(new MouseAdapter() {	
		@Override		
public void mouseExited(MouseEvent e) {	
			f.setBackground(Color.WHITE);
			}	
	}); 		
greenButton.addMouseListener(new MouseAdapter() {	
		@Override		
	public void mouseEntered(MouseEvent e) {	
			f.setBackground(Color.GREEN);		
	}	
	}); 
		greenButton.addMouseListener(new MouseAdapter() {	
		@Override		
	public void mouseExited(MouseEvent e) {
				f.setBackground(Color.WHITE);
			}	
	}); 		
buleButton.addMouseListener(new MouseAdapter() {	
		@Override		
	public void mouseEntered(MouseEvent e) {	
			f.setBackground(Color.BLUE);	
		}	
	}); 		
buleButton.addMouseListener(new MouseAdapter() {	
		@Override		
	public void mouseExited(MouseEvent e) {	
			f.setBackground(Color.WHITE);	
		}	
	}); 	
	// 设置窗体显示		
f.setVisible(true);	
}}

  F:设置文本框里面不能输入非数字字符

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 /* * 你输入的如果是非数字字符,就取消你键盘录入的效果。 */
public class FrameDemo {	
public static void main(String[] args) {	
// 创建窗体对象并设置属性	
	Frame f = new Frame("不能输入非数字字符");	
	f.setBounds(400, 200, 400, 300);	
	f.setLayout(new FlowLayout()); 	
	// 创建Label标签对象	
	Label label = new Label("请输入你的QQ号码,不能是非数字,不信你试试");
		TextField tf = new TextField(40); 	
// 添加到窗体上	
	f.add(label);	
	f.add(tf); 		
// 设置窗体关闭	
	f.addWindowListener(new WindowAdapter() {
			@Override		
public void windowClosing(WindowEvent e) {	
			System.exit(0);		
	}	
	}); 	
	// 给文本框添加事件
		tf.addKeyListener(new KeyAdapter() {	
		@Override		
	public void keyPressed(KeyEvent e) {	
			
// 如果你取得的字符不是数字字符就取消事件	
			// 思路:先获取字符,判断字符,取消事件
				// char getKeyChar()  
				char ch = e.getKeyChar();//	
			System.out.println(ch);		
		if(!(ch>='0' && ch<='9')){	
				e.consume();	
			}		
	}	
	}); 	
	// 设置窗体可见		
f.setVisible(true);	}}

G:一级菜单

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 /* * 一级菜单 */
public class FrameDemo {	
public static void main(String[] args) {	
	// 创建窗体对象并设置属性	
	Frame f = new Frame("一级菜单");	
	f.setBounds(400, 200, 400, 300);	
	f.setLayout(new FlowLayout()); 	
	// 创建菜单栏	
	MenuBar mb = new MenuBar();	
	// 创建菜单	
	Menu m = new Menu("文件");	
	// 创建菜单项	
	MenuItem mi = new MenuItem("退出系统"); 	
	// 谁添加谁呢	
	m.add(mi);	
	mb.add(m); 
		// 设置菜单栏	
	f.setMenuBar(mb); 	
	// 设置窗体关闭	
	f.addWindowListener(new WindowAdapter() {	
@Override			
public void windowClosing(WindowEvent e) {	
			System.exit(0);
			}		
}); 		
mi.addActionListener(new ActionListener() {	
		@Override	
		public void actionPerformed(ActionEvent e) {		
		System.exit(0);		
	}	
	}); 	
	// 设置窗体可见	
	f.setVisible(true);	
}}

H:多级菜单

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException; 
/* * 多级菜单 */
public class FrameDemo {
public static void main(String[] args) {	
	// 创建窗体对象并设置属性	
final Frame f = new Frame("多级菜单");	
f.setBounds(400, 200, 400, 300);	
	f.setLayout(new FlowLayout());	
			final String name = f.getTitle(); 
// 创建菜单栏	
	MenuBar mb = new MenuBar();	
	// 创建菜单	
	Menu m1 = new Menu("文件");
		Menu m2 = new Menu("更改名称");
		// 创建菜单项	
	final MenuItem mi1 = new MenuItem("好好学习");
final MenuItem mi2 = new MenuItem("天天向上");	
	MenuItem mi3 = new MenuItem("恢复标题");	
	MenuItem mi4 = new MenuItem("打开记事本");	
MenuItem mi5 = new MenuItem("退出系统"); 	
	// 谁添加谁呢	
m2.add(mi1);	
	m2.add(mi2);	
	m2.add(mi3);	
			m1.add(m2);	
	m1.add(mi4);	
	m1.add(mi5);	
			mb.add(m1); 	
	// 设置菜单栏	
	f.setMenuBar(mb); 	
	// 设置窗体关闭	
f.addWindowListener(new WindowAdapter() {	
		@Override	
		public void windowClosing(WindowEvent e) {
				System.exit(0);	
		}		
});			
	mi1.addActionListener(new ActionListener() {	
		@Override		
	public void actionPerformed(ActionEvent e) {		
		f.setTitle(mi1.getLabel());		
	}		
});		
		mi2.addActionListener(new ActionListener() {	
@Override		
	public void actionPerformed(ActionEvent e) {	
			f.setTitle(mi2.getLabel());		
	}	
	});			
	mi3.addActionListener(new ActionListener() {	
		@Override		
	public void actionPerformed(ActionEvent e) {	
f.setTitle(name);		
	}
		});	
			mi4.addActionListener(new ActionListener() {
			@Override		
	public void actionPerformed(ActionEvent e) {	
			Runtime r = Runtime.getRuntime();	
try {				
	r.exec("notepad");	
			} catch (IOException e1) {	
				e1.printStackTrace();		
		}		
	}	
	}); 		
mi5.addActionListener(new ActionListener() {	
		@Override		
	public void actionPerformed(ActionEvent e) {		
	System.exit(0);		
	}	
	}); 	
	// 设置窗体可见	
	f.setVisible(true);	

}}

</article> 总结: 总的来说:GUI : Graphical User Interface (图形用户接口)。 用图形的形式显示计算机操作的界面,更直观。对此,我整理了Java基础的一些基础资料,以便大家阅读和参考,里面涵盖了Java入门到精通的各种知识点,想要学习的朋友可以加入我所在的社区大家一起讨论与研究,[快戳我一起从Java入门到放弃~](https://jq.qq.com/?_wv=1027&k=01RwDBsE)!!!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!