------- android培训、java培训、期待与您交流! ----------
GUI:图形用户界面
Java为GUI提供的对象都存在java.Awt和java.Swing两个包中。
java.Awt:重量级控件
java.Swing:轻量级控件,在Awt的基础上。
Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其 他组件进来。
GUI布局
容器中组件的排放方式就是布局。
常见的布局管理器有:
FlowLayout流式布局管理器,从左到右的顺序排序,Panel默认的管理器。
BorderLayout边界布局管理器,东、南、西、北、中,Frame默认的管理器
GridLayout网格布局管理器,规则的矩阵
CardLayout卡片布局管理器,选项卡
GridBagLayout网格包布局管理器,非规则的矩阵
创建图形化界面:
1,创建frame窗体。
2,对窗体进行基本设置。
比如大小,位置,布局。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。
5,让窗体显示,通过setVisible(true)
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
classAwtDemo
{
public static voidmain(String[] args)
{
Frame f=newFrame("我的窗体");//创建Fram窗体
f.setSize(500,300);//设置迷你小窗口的横纵坐标,500是横坐标,300是纵坐标
f.setLocation(400,300);//设置本地位置
f.setLayout(newFlowLayout());//设置布局管理
Button b=newButton("我是一个按钮");//创建按钮控件
f.add(b);//将按钮添加到Fram窗体中
f.setVisible(true);//设置窗体为显示
}
}
事件监听机制
事件监听机制的特点:
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
事件处理:
前三项,在java中都已经定义好了。
直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理。
窗体事件
f.addWindowListener(new WindowAdapter()//添加窗体事件
{
public voidwindowClosing(WindowEvent e)//实现windowClosing关闭方法
{
System.exit(0);//退出
}
});
因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。
并覆盖了其中的所有方法。那么我只要继承自Windowadapter覆盖我需要的方法即可。
void windowActivated(WindowEvent e) 激活窗体
void windowOpened(WindowEvent e) 打开窗体
Action事件
Button b=new Button("my Button");
b.addActionListener(newActionListener()
{
public voidactionPerformed(ActionEvent e)
{
System.out.println("退出,按钮干的");
System.exit(0);
}
});
ActionListener 没有适配器的接口
鼠标事件
Button b=new Button("My Button");
b.addMouseListener(newMouseAdapter()//添加指定的鼠标监听器
{
private intcount=1;
private intclickcount=1;
public voidmouseEntered(MouseEvent e)//进入
{
System.out.println("鼠标进入到该组件"+count++);
}
public voidmouseClicked(MouseEvent e)//单机
{
if(e.getClickCount()==2)//获取单机次数
System.out.println("双机动作"+clickcount++);
}
});
键盘事件
TextField tf=new TextField(10);//文本框
Button b=newButton("My Button");
tf.addKeyListener(newKeyAdapter()//添加指定的键盘监听器
{
public voidkeyPressed(KeyEvent e)//键盘按下
{
if(!(e.getKeyCode()/*获取键对应的码*/>=KeyEvent.VK_0&&e.getKeyCode()<=KeyEvent.VK_9))
System.out.println(e.getKeyCode()+"...是非法的");
e.consume();
}
});
b.addKeyListener(newKeyAdapter()
{
public voidkeyPressed(KeyEvent e)
{
if(e.isControlDown()/*判断ctrl键按下*/&&e.getKeyCode()==KeyEvent.VK_ENTER)
System.out.println("ctrl+enteris run");
}
});
列出指定目录内容(含有错误对话框提示)
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyWindowDemo
{
private Frame f;
private TextField tf;
private Button b;
private TextArea ta;//文本区域,既能指定行,又能指定列
(对话框)
private Dialog d;
private Label l;//文字
private Button b1;
MyWindowDemo()
{
init();
}
public void init()
{
f=new Frame("MyWindow");
f.setBounds(200,200,500,600);
f.setLayout(newFlowLayout());
tf=new TextField(50);
b=new Button("转到");
ta=newTextArea(40,55);
f.add(tf);
f.add(b);
f.add(ta);
d=new Dialog(f,"错误信息提示",true);
d.setBounds(200,300,200,150);
d.setLayout(newFlowLayout());
l=new Label();
b1=new Button("确定");
d.add(l);
d.add(b1);
MyEvent();
f.setVisible(true);
}
private void MyEvent()
{
b1.addActionListener(newActionListener()
{
public voidactionPerformed(ActionEvent e)
{
d.setVisible(false);
}
});
d.addWindowListener(newWindowAdapter()
{
public voidwindowClosing(WindowEvent e)
{
d.setVisible(false);
}
});
tf.addKeyListener(newKeyAdapter()
{
public voidkeyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
showDir();
}
});
b.addActionListener(newActionListener()
{
public voidactionPerformed(ActionEvent e)
{
showDir();
}
});
f.addWindowListener(newWindowAdapter()
{
public voidwindowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
private void showDir()
{
Stringdirpath=tf.getText();
Filedir=new File(dirpath);
if(dir.exists()&&dir.isDirectory())
{
String[]names=dir.list();
for(Stringname:names)
{
ta.append(name+"\r\n");//追加文本
}
}
else
{
Stringinfo="您输入的信息:"+dirpath+"是错误的,请重输";
l.setText(info);
d.setVisible(true);
}
}
public static voidmain(String[] args)
{
new MyWindowDemo();
}
}
菜单
import java.awt.*;
import java.awt.event.*;
class MyMenuDemo
{
private Frame f;
private MenuBar mb;
private Menu m,subMenu;
private MenuItemcloseItem,subItem;
MyMenuDemo()
{
init();
}
public void init()
{
f=new Frame("MyWindow");
f.setBounds(300,200,400,500);
f.setLayout(new FlowLayout());
mb=new MenuBar();
m=new Menu("文件");
subMenu=newMenu("子菜单");
subItem=newMenuItem("子条目");
closeItem=newMenuItem("退出");
m.add(subMenu);
subMenu.add(subItem);
f.setMenuBar(mb);//在框架中添加菜单栏
mb.add(m);
m.add(closeItem);
MyEvent();
f.setVisible(true);
}
public void MyEvent()
{
f.addWindowListener(newWindowAdapter()
{
public voidwindowClosing(WindowEvent e)
{
System.exit(0);
}
});
closeItem.addActionListener(newActionListener()
{
public voidactionPerformed(ActionEvent e)
{
System.exit(0);
}
});
}
public static voidmain(String[] args)
{
new MyMenuDemo();
}
}
打开与保存文件的小练习
package myMenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenuTest
{
private Frame f;
private MenuBar bar;
private TextArea ta;
private Menu fileMenu;
private FileDialogopenDia,saveDia;
private MenuItemopenItem,saveItem,closeItem;
private File file;
MyMenuTest()
{
init();
}
public void init()
{
f=new Frame("MyWindow");
f.setBounds(200,100,600,500);
//f.setLayout(newFlowLayout());
bar=new MenuBar();
fileMenu=newMenu("文件");
openItem=newMenuItem("打开");
saveItem=newMenuItem("保存");
closeItem=newMenuItem("关闭");
f.setMenuBar(bar);
bar.add(fileMenu);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
openDia=newFileDialog(f,"我要打开",FileDialog.LOAD);
saveDia=newFileDialog(f,"我要保存",FileDialog.SAVE);
ta=new TextArea();
f.add(ta);
MyEvent();
f.setVisible(true);
}
public void MyEvent()
{
f.addWindowListener(newWindowAdapter()
{
public voidwindowClosing(WindowEvent e)
{
System.exit(0);
}
});
closeItem.addActionListener(newActionListener()
{
public voidactionPerformed(ActionEvent e)
{
System.exit(0);
}
});
openItem.addActionListener(newActionListener()
{
public voidactionPerformed(ActionEvent e)
{
openDia.setVisible(true);
StringdirPath=openDia.getDirectory();
StringfileName=openDia.getFile();
System.out.println(dirPath+"..."+fileName);
if(dirPath==null||fileName==null)
return;
file=newFile(dirPath,fileName);
try
{
BufferedReaderbr=new BufferedReader(new FileReader(file));
Stringline=null;
while((line=br.readLine())!=null)
{
ta.append(line+"\r\n");
}
br.close();
}
catch(IOException ex)
{
thrownew RuntimeException("读取失败");
}
}
});
saveItem.addActionListener(newActionListener()
{
public voidactionPerformed(ActionEvent e)
{
if(file==null)
{
saveDia.setVisible(true);
StringdirPath=saveDia.getDirectory();
StringfileName=saveDia.getFile();
System.out.println(dirPath+"..."+fileName);
if(dirPath==null||fileName==null)
return;
file=newFile(dirPath,fileName);
}
try
{
BufferedWriterbw=new BufferedWriter(new FileWriter(file));
Stringtext=ta.getText();
bw.write(text);
bw.flush();
bw.close();
}
catch(IOException ex)
{
throw new RuntimeException("写入失败");
}
}
});
}
public static voidmain(String[] args)
{
new MyMenuTest();
}
}
------- android培训、java培训、期待与您交流! ----------