-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
GUI(图形用户界面)
1、GUI
*Graphical User Interface(图形用户接口)
*用图形的方式,来显示计算机操作的界面,这样更方便更直接
2、CLI
*Command Line User Interface(命令行用户接口)
*就是常见的Dos 命令行操作,需要记忆一些常用命令,操作不直观
3、java为GUI提供的对象都存在java.Awt和javax.Swing两个包中
4、Awt与Swing
*java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件。比较依赖平台,跨平台稍有不足
*javax.Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属于轻量级控件
布局管理器
1、容器中的组件的排放方式,就是布局
2、常见的布局管理器:
*FlowLayout(流式布局管理器)
从左到右的顺序排列,Panel默认的布局管理器
*BorderLayout(边界布局管理器)
东、南、西、北、中。Frame默认的布局管理器
*GridLayout(网格布局管理器)
规则的矩阵
*CardLayout(卡片布局管理器)
选项卡
*GridBagLayout(网格包布局管理器)
非规则的矩阵
Frame
创建图形化界面步骤:1、创建frame窗体
2、对窗体进行基本设置,如大小位置
3、定义组件,如按钮、文本框、文本区
4、将组件通过窗体的add方法添加到窗体中
5、让窗体显示,通过setVisible(true)
事件监听机制
事件监听机制组成:
1、事件源(组件); 就是awt包或者swing包中的那些图形界面组件
2、事件(Event): 每一个事件源都有自己特有的对应事件和共性事件
3、监听器(Listener): 将可以触发某一事件的动作(不止一个)都已经封装到监听器
以上三者在java中都已经定义好了,直接获取其对象来用就可以了,我们要做的是,就是对产生的动作进行处理
4、事件处理(引发事件后处理方式)
窗体事件
import java.awt.*;
import java.awt.event .*;
class AwtDemo
{
public static void main(String[] args)
{
Frame f = new Frame("关军波");
f.setSize(500,400);//设置窗体大小
f.setLocation(400,200);//设置窗体相对于左上角的偏移量
f.setLayout(new FlowLayout());//设置窗体布局为流式布局
//f.addWindowListener(new MyWin());//只需一个方法,也可以写成匿名内部类形式
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
public void windowActivated(WindowEvent e)//处于窗口最前端就被激活
{
System.out.println("活了");
}
public void windowOpened(WindowEvent e)//窗口被创建时动作
{
System.out.println("被创建了");
}
});
Button b = new Button("按钮");//添加按钮
Button b1 = new Button("按钮2");
f.add(b);//将按钮用容器的方法添加进窗体
f.add(b1);
f.setVisible(true);
System.out.println("Hello World!");
}
}
/*
class MyWin implements WindowListener
{
//覆盖7个方法,但是只需要用到一个关闭动作,
//其他动作都没用到,但是必须要复写所有
}
*/
//发现WindowListener的子类WindowAdapter已经实现了WindowListener接口
//并覆盖了其中的所有方法,那么就只需要继承WindowAdapter,复写需要的方法即可
class MyWin extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
鼠标、键盘事件(一般可以在按钮上进行添加)
import java.awt.*;
import java.awt.event.*;
class MouseKeyDemo
{
private Frame f ;//窗体
private Button but;
private TextField tf;//文本框
MouseKeyDemo()
{
init();
}
public void init()
{
f = new Frame("我的窗体界面");
f.setBounds(400,200,500,300);
f.setLayout(new FlowLayout());
but = new Button("按钮");
tf = new TextField(20);
f.add(but);
f.add(tf);
myEvent();
f.setVisible(true);
}
private void myEvent()
{
//添加but 的鼠标监听
but.addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入范围");
}
});
but.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
if(e.getClickCount()==2)//鼠标双击按钮时退出
System.exit(0);
}
});
//添加but 的键盘监听
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
//if(e.getKeyChar()==e.VK_ENTER)//判断输入的字符是否为 enter
if(e.isControlDown()&&(e.getKeyChar()==e.VK_ENTER))//判断ctrl和enter键是否同时输入——组合键
System.out.println("键盘打印");
}
});
//添加tf 的键盘监听键
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if(!(code>=e.VK_0&&code<=e.VK_9))
{
e.consume();
System.out.println(code+"..不是数字,非法");
}
}
});
}
public static void main(String[] args)
{
new MouseKeyDemo();
}
}
练习:myWindow
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyWindow
{
private Frame f;
private Button b;
private TextField tf;
private TextArea ta;
private Dialog d;
private Label l;
private Button OkBut;
MyWindow()
{
init();
}
public void init()
{
f = new Frame("my frame");
b = new Button("转到");
tf = new TextField(60);
ta = new TextArea(30,70);
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
f.add(tf);
f.add(b);
f.add(ta);
d = new Dialog(f,"错误信息",true);//当为true时,dialog对话框弹出后窗体 f将不能操作
l = new Label();
OkBut = new Button("确定");
d.setBounds(450,220,280,100);
d.setLayout(new FlowLayout());
d.add(l);
d.add(OkBut);
myEvent();
f.setVisible(true);
}
private void myEvent()
{
tf.addKeyListener(new KeyAdapter()//对tf添加键盘的事件监听
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==e.VK_ENTER)
openFile();
}
});
b.addActionListener(new ActionListener()//对转到按钮添加事件监听
{
public void actionPerformed(ActionEvent e)
{
openFile();
}
});
f.addWindowListener(new WindowAdapter()//添加窗体关闭的事件监听
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
d.addWindowListener(new WindowAdapter()//添加dialog窗体的事件监听
{
public void windowClosing(WindowEvent e)
{
d.setVisible(false);//关闭dialog弹出框
}
});
OkBut.addActionListener(new ActionListener()//添加dialog按钮组件的事件监听
{
public void actionPerformed(ActionEvent e)
{
d.setVisible(false);
}
});
}
private void openFile()
{
ta.setText("");
File dir = new File(tf.getText());//将获取的文本输入框数据封装为文件对象
if(dir.exists()&&dir.isDirectory())//判断是否存在,是否是目录
{
String[] files = dir.list();//获取该目录下所有文件和目录
for(String file : files)
{
ta.append(file+"\r\n");//将文本输入框的数据追加到文本区域
}
}
else//如果dir不存在或者不是目录,给出提示信息
{
l.setText("输入"+dir+"地址错误,请更改");//设置文本提示信息
d.setVisible(true);//弹出dialog错误对话框
}
}
}
class Demo2
{
public static void main(String[] args)
{
new MyWindow();
}
}
菜单:Menu
对象是从菜单栏部署的下拉式菜单组件。
菜单可以是任意分离式 菜单。可以打开分离式菜单,并从其父菜单栏或菜单中拖开。释放鼠标按钮之后,它仍然在屏幕上。分离菜单的机制与平台有关,因为分离式菜单的外观由其同位体确定。对于不支持分离式菜单的平台,分离属性会被忽略。
菜单中的每一项都必须属于MenuItem
类。它可以是
MenuItem
的一个实例、子菜单(
Menu
的一个实例)、或复选框(
CheckboxMenuItem
的一个实例)。
import java.awt.*;
import java.awt.event.*;
class MyMenu
{
private Frame f ;
private Menu me,mem;
private MenuBar mb;
private MenuItem mi,mim;
MyMenu()
{
init();
}
public void init()
{
f = new Frame("MyMenu");
f.setBounds(300,100,500,600);
f.setLayout(new FlowLayout());
me = new Menu("文件");
mem = new Menu("子菜单");
mb = new MenuBar();
mi = new MenuItem("close");
mim = new MenuItem("子条目");
me.add(mi);//菜单里面添加下拉子条目
me.add(mem);//菜单里面添加子菜单
mem.add(mim);//子菜单里面添加条目
mb.add(me);//将主菜单添加进菜单栏 MenuBar
f.setMenuBar(mb);//为了将该菜单栏与 Frame 对象关联,可以调用该框架的 setMenuBar 方法。
myEvent();
f.setVisible(true);
}
private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
mim.addActionListener(new ActionListener()//点击最里层子条目就关闭程序
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args)
{
new MyMenu();
}
}
练习:做一个简单的记事本
/*
简单的记事本界面 打开、保存、退出
*/
package mypack;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class menuDemo
{
private Frame f;
private TextArea ta;
private MenuBar mb;
private MenuItem mi1,mi2,mi3,mi4;
private Menu m1,m2;
private FileDialog fd;
private File fi;
menuDemo()
{
init();
}
public void init()
{
f = new Frame("my frame");
f.setBounds(300,150,650,500);
fd = new FileDialog(f,"文件对话框",FileDialog.LOAD);
ta = new TextArea();
mb = new MenuBar();
mi1 = new MenuItem("子条目");
mi2 = new MenuItem("关闭");
mi3 = new MenuItem("打开");
mi4 = new MenuItem("保存");
m1 = new Menu("文件");
m2 = new Menu("子菜单");
m2.add(mi1);
m1.add(m2);
m1.add(mi3);
m1.add(mi4);
m1.add(mi2);
mb.add(m1);
f.add(ta);
f.setMenuBar(mb);
myEvent();
f.setVisible(true);
}
private void myEvent()
{
mi3.addActionListener(new ActionListener()//打开文件对话框
{
public void actionPerformed(ActionEvent e)
{
fd.setVisible(true);//弹出系统文件对话框
String dirPath = fd.getDirectory();//获取文件对话框的目录
String file = fd.getFile();//获取文件对话框选定的文件
if(dirPath==null||file==null)//判断目录和是否有选取文件
return;
fi = new File(dirPath,file);//将选取的文件路径封装成一个文件对象
System.out.println(dirPath+"...."+file);
ta.setText("");//将前一次显示的文本清除
try
{
BufferedReader br = new BufferedReader(new FileReader(fi));
String line = null;
while((line=br.readLine())!=null)
{
//System.out.println(line);
ta.append(line+"\r\n");
}
br.close();
}
catch (IOException ex)
{
throw new RuntimeException("打开文件失败");
}
}
});
mi4.addActionListener(new ActionListener()//保存文件
{
public void actionPerformed(ActionEvent e)
{
if(fi==null)//判断文件是否存在,存在就不弹出Dialog对话框
{
fd.setVisible(true);
String dirPath =fd.getDirectory();
String file = fd.getFile();
fi = new File(dirPath,file);
}
try
{
BufferedWriter bw = new BufferedWriter(new FileWriter(fi));
bw.write(ta.getText());//将更改后的文本区数据进行保存
bw.flush();
bw.close();
}
catch (IOException ex)
{
throw new RuntimeException("保存文件失败");
}
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
public class Demo3
{
public static void main(String[] args)
{
new menuDemo();
}
}