------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
GUI图形用户界面编程,就是使用GUI编程
GUI是图形用户接口,CLI是命令行用户接口
GUI:
awt和swing包的概述:
简单窗体的创建过程:
案例:第一个HelloWorld窗体:
mport java.awt.Dimension;
import java.awt.Frame;
import java.awt.Point;
/*
* 第一个窗体:
*
* 1.实例化一个Frame对象;
* 构造方法:
* Frame():构造一个最初不可见的 Frame 新实例()。
* Frame(String title) :构造一个新的、最初不可见的、具有指定标题的 Frame 对象
* 2.成员方法:
* 使窗体可见:setVisible(boolean b):
* 设置窗体的大小:setSize(int width,int height):
* setSize(Dimension d):
* 设置窗体的位置:setLocation(int x ,int y):
* setLocation(Point p):
* 设置窗体标题:setTitle(String title):
*
* 一次设置窗体的大小和位置:setBounds(int x,int y,int width,int height)
*
*/
public class Demo {
public static void main(String[] args) {
//1.实例化一个窗体
Frame f = new Frame();
//2.设置窗体大小
// f.setSize(500,400);
// f.setSize(new Dimension(500,400));
//3.设置窗体位置
// f.setLocation(400, 150);
// f.setLocation(new Point(400,150));
//一次设定大小和位置
f.setBounds(400, 150, 500, 400);
//设置标题
f.setTitle("HelloWorld");
//4.显示窗体
f.setVisible(true);
}
}
事件处理机制:
import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
/*
* 事件处理机制:
*
* 我们要关注几个点:
*
* 1.事件源:谁会出事:任何组件;
* 例如:窗体--Frame
* 2.可能会出什么事:在Java类库中已经定义好的:键盘事件、鼠标事件、焦点事件......XxxxListener
* 例如:我们的窗体,需要关注"窗体事件"--WindowListenr
* 3.如果出事了,做什么事情:自定义类,继承自某个Listener,然后重写我们要关注的方法;
* 例如:我们的窗体,要关注"窗体事件",所以,我们自定义类,实现WindowListener接口,实现:windowClosing()方法;
*
* 4.将"事件源(1)"和"事件处理(3)"进行关联:调用组件的addXxxxListener(自定义类的对象);
*/
public class Demo {
public static void main(String[] args) {
Frame f = new Frame("可以关闭的窗体");
f.setBounds(400, 150, 500, 400);
// f.addWindowListener(new MyWindowListener());
//使用匿名内部类
f.addWindowListener(new WindowListener(){
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("匿名内部类,我被关闭了,拜拜......");
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
});
f.setVisible(true);
}
}
GUI中的适配器模式简介:
适配器模式:
1.假如我开发了一个接口,会被其它同事使用,我的接口定义:
interface IA{
public void show1();
public void show2();
public void show3();
public void show4();
public void show5();
public void show6();
public void show7();
}
2.当同事使用这个接口时,可能只需要几个方法,不需要全部,但同事们不得不全部实现:
class SubA implements IA{
public void show1(){
System.out.println("我只需要show1()方法");
}
public void show2(){
}
......
其它方法必须要实现,否则不能通过编译
所以这里不得不空实现,降低可读性;
}
3.这时,我又做了件事情:为接口定义了"抽象类":
abstract class AbstractA implements IA{
public void show1(){};//空实现
public void show2(){};
public void show3(){};
public void show4(){};
public void show5(){};
public void show6(){};
public void show7(){};
}
这时,同事如果只需要几个方法,可以继承自我这个抽象类,只需要重写他所需要的方法即可:
class SubA extends AbstractA{
public void show1(){
System.out.println("只需要重写show1()方法,其它方法不用管");
}
}
4.此例中的"AbstractA"就是"IA"接口的"适配器",这种实现方式就是:适配器模式
案例:使用适配器模式更改关闭案例:
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo {
public static void main(String[] args) {
Frame f = new Frame("使用适配器模式");
f.setBounds(400, 150, 500, 400);
f.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.out.println("你要关闭我了?好吧,拜拜......");
System.exit(0);
}
});
f.setVisible(true);
}
}
为窗体添加按钮并添加事件:
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
/*
* 为按钮添加事件:
* Button but = new Button("按钮");
* but.addMouseListener();
* 或者:
* but.addActionListener()(常用):语义事件,表示用户按了一下鼠标;
*/
public class Demo {
public static void main(String[] args) {
Frame f = new Frame("使用适配器模式");
f.setBounds(400, 150, 500, 400);
f.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.out.println("你要关闭我了?好吧,拜拜......");
System.exit(0);
}
});
//添加按钮
Button but1 = new Button("but1");
Button but2 = new Button("but2");
Button but3 = new Button("but3");
Button but4 = new Button("but4");
Button but5 = new Button("but5");
Button but6 = new Button("but6");
but1.setBounds(10, 40, 100, 30);
but2.setBounds(130, 50, 80, 40);
but3.setBounds(80, 100, 100, 30);
but4.setBounds(180, 130, 120, 40);
but5.setBounds(120, 250, 100, 30);
but6.setBounds(200, 280, 110, 40);
//将按钮添加到窗体上
f.setLayout(null);
f.add(but1);
f.add(but2);
f.add(but3);
f.add(but4);
f.add(but5);
f.add(but6);
//将六个按钮全部隐藏
final Button[] butArray = new Button[6];
butArray[0] = but1;
butArray[1] = but2;
butArray[2] = but3;
butArray[3] = but4;
butArray[4] = but5;
butArray[5] = but6;
for(Button but : butArray){
but.setVisible(false);
}
Button butStart = new Button("开始");
butStart.setBounds(30,330, 150, 40);
f.add(butStart);
butStart.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("鼠标按下并释放......");
new Thread(){
public void run() {
Random rdm = new Random();
while(true){
int index = rdm.nextInt(butArray.length);
//遍历数组,将index位置上的but显示出来,其它的全部隐藏
for(int i = 0;i < butArray.length ; i++){
if(i == index){
butArray[i].setVisible(true);
}else{
butArray[i].setVisible(false);
}
}
try {
Thread.sleep(700);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
};
}.start();
}});
/*butStart.addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标按下并释放......");
new Thread(){
public void run() {
Random rdm = new Random();
while(true){
int index = rdm.nextInt(butArray.length);
//遍历数组,将index位置上的but显示出来,其它的全部隐藏
for(int i = 0;i < butArray.length ; i++){
if(i == index){
butArray[i].setVisible(true);
}else{
butArray[i].setVisible(false);
}
}
try {
Thread.sleep(700);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
};
}.start();
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标按下......");
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标释放......");
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标移入......");
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标离开......");
}});*/
f.setVisible(true);
}
}
把文本框的值移到文本域的案例:
import java.awt.Button;
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;
/*
* 把文本框的值转移到文本域案例
*
* 1.需要的组件:
* 1).窗体:Frame
* 2).文本框:TextField
* 成员方法:
* 1>.获取文本内容:getText()
* 2>.设置文本内容:setText()
* 3>.获取焦点:requestFocusInWindow()
* 3).按钮:Button
* 4).文本域:TextArea
* 1>.获取文本内容:getText();
* 2>.设置文本内容:setText();
*
*
*/
public class Demo {
public static void main(String[] args) {
Frame f = new Frame("将文本框中的数据移动到文本域");
f.setBounds(400, 150, 500, 400);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//添加组件
final TextField txt = new TextField(20);
txt.setBounds(120, 50, 180, 25);
Button but = new Button("数据转移");
but.setBounds(320, 50, 80, 25);
final TextArea txtArea = new TextArea();
txtArea.setBounds(100, 90, 320, 230);
//为按钮添加事件:
but.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
//1.获取文本框中的值:
String info = txt.getText();
System.out.println(info);
//2.将数据转移到文本域
String old = txtArea.getText();
old += info + "\r\n";
txtArea.setText(old);
//3.清空文本框
txt.setText("");
//4.让文本框获取焦点
txt.requestFocusInWindow();
}});
//使用绝对位置定位
//1.将窗体的布局管理器设为null
f.setLayout(null);
f.add(txt);
f.add(but);
f.add(txtArea);
//**************************
f.setVisible(true);
}
}
f.setBackground(Color.red); 一个方法,更改窗体背景颜色
菜单案例:
一级菜单:
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;
/*
* Java中的菜单:
*
* 1.菜单栏:MenuBar
* 2.菜单:Menu
* 3.菜单项:MenuItem
*/
public class Demo {
public static void main(String[] args) {
final Frame f = new Frame("一级菜单");
f.setBounds(400, 150, 500, 400);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//制作菜单
//1.菜单栏
MenuBar bar = new MenuBar();
//2.菜单:文件
Menu menu = new Menu("文件");
//3.菜单项:退出系统
MenuItem item = new MenuItem("退出系统");
item.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}});
//菜单添加菜单项
menu.add(item);
//菜单栏添加菜单
bar.add(menu);
//窗体添加菜单栏
f.setMenuBar(bar);
f.setVisible(true);
}
}
多级菜单案例:
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 Demo {
public static void main(String[] args) {
final Frame f = new Frame("多级菜单");
f.setBounds(400, 150, 500, 400);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//制作菜单
MenuBar bar = new MenuBar();
Menu menu1 = new Menu("文件");
Menu menu2 = new Menu("更改标题");
MenuItem item1 = new MenuItem("打开记事本");
item1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
Runtime rt = Runtime.getRuntime();
try {
rt.exec("notepad");
} catch (IOException e1) {
e1.printStackTrace();
}
}});
MenuItem item2 = new MenuItem("退出系统");
item2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}});
MenuItem item3 = new MenuItem("好好学习");
item3.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
f.setTitle("好好学习");
}});
MenuItem item4 = new MenuItem("天天向上");
item4.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
f.setTitle("天天向上");
}});
MenuItem item5 = new MenuItem("恢复标题");
item5.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
f.setTitle("多级菜单");
}});
//关联菜单
menu2.add(item3);
menu2.add(item4);
menu2.add(item5);
menu1.add(menu2);
menu1.add(item1);
menu1.add(item2);
bar.add(menu1);
f.setMenuBar(bar);
f.setVisible(true);
}
}