---------------------- android培??a target="blank" href="http://edu.csdn.net/heima" style="color: #ca0000; text-decoration: underline; text-align: center; font-size: 12px; line-height: 26px;">java培?、期待与您交流! ----------------------
GUI图形用户界面
GUI(图形用户界面)
GUI-Graphical User Interface(图形用户接口)?/p>
用图形的方式,来显示计算机操作的界面,这样更方便更直观??/p>
CLI-Command line User Interface (命令行用户接口)
就是常?的Dos命令行操作??/p>
?要?忆一些常用的命令,操作不直??/p>
举例?
比?:创建文件夹,或者删除文件夹?/p>
Java为GUI提供的?象都存在java.Awt和javax.Swing两个包中?/p>
Awt和Swing
Awt?Swing
java.Awt:Abstract Window ToolKit (抽象窗口工具?,需要调用本地系统方法实现功能?属重量级控件?比较依赖平台,跨平台?不?好,会有细微的区???/p>
javax.Swing:在AWT的基?上,建立的一套图形界面系统,其中提供了更多的组件,?且完全由Java实现。?强了移?性,属轻量级控件?/p>
eclipse?swt做的?/p>
Container:为容器,是??殊的组件,?组件?以?过add方法添加其他组件进来?/p>
布局管理?/p>
容器?组件的排放方式,就是布局?/p>
常?的布?管理?
FlowLayout(流式布?管理?
从左到右的顺序排列??/p>
Panel默?的布?管理器??/p>
BorderLayout(边界布?管理?
东,南,西,北,?/p>
Frame默?的布?管理器??/p>
GridLayout(网格布?管理?
规则的矩?/p>
CardLayout(卡片布?管理?
选项?/p>
GridBagLayout(网格包布局管理?
非?则的矩阵
坐标式布?才是?好的,可以用图形化编辑器,?GBuilder或?eclipse添加图形化插件?就具有画布,需要什么组件?什么组件,?切换到代码模式代码全部生成??/p>
如果??口中?要用到?种布?形式,可以线划分为??板,然后定义各个面板的布?形式?/p>
图形化界面是由另外的线程控制的??/p>
设置窗口的尺寸???数是?标,??纵坐标??/p>
建立??单的窗体
Container常用子类:Window Panel(面板,不能单独存在。)
Window常用子类:Frame Dialog
?单的窗体创建过程?/p>
Frame f = new Frame(“my window?;
f.setLayout(new FlowLayout());
f.setSize(500,400);//设置窗体大小
f.setLocation(300,200);//设置窗体出现在屏幕的位置
f.setVisible(true);
创建图形化界?
1,创建frame窗体?/p>
2,?窗体进?基本设置?/p>
比?大小,位?布局?/p>
3,定义组件??/p>
4,将组件通过窗体的add方法添加到窗体中?/p>
5,?窗体显示,?过setVisible(true)
事件监听机制的特点:
1.事件源(组件?/p>
2.事件(Event?/p>
3.监听?Listener?/p>
4.事件处理(引发事件后处理方式?/p>
事件源:就是awt包或者swing包中的那些图形界面组件??/p>
事件:每??件源都有?特有的?应事件和共?事件??/p>
监听?将可以触发某??件的动作(不??作)都已经封装到了监????/p>
以上三?,在java?已经定义好了?/p>
直接获取其?象来用就?了??/p>
我们要做的事情是,就??产生的动作进行?理??/p>
WindowAdapter类是??象类,内部没有抽象方法,抽象?不?创建对象,是WindowListener的子类,覆盖了WindowListener类中的方法,但是方法体内?,所以调用没有意义,
import java.awt.*;import java.awt.event.*;class AwtDemo{ public static void main(String[] args) { Frame f = new Frame("my awt"); f.setSize(500,400); f.setLocation(300,200); f.setLayout(new FlowLayout()); Button b = new Button("我是???); f.add(b); //监听机制??成匿名内部类 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("我关"); System.exit(0); } //?活窗? public void windowActivated(WindowEvent e) { System.out.println("我活了??); } //打开 public void windowOpened(WindowEvent e) { System.out.println("我?打开?hahahhahah"); } }); f.setVisible(true); }}
因为WindowListener的子类WindowAdapter已经实现了WindowListener接口?并?盖了其中的所有方法?那么我??继承自Windowadapter覆盖我需要的方法即可?/p>
class MyWin extends WindowAdapter{ public void windowClosing(WindowEvent e)//覆盖WindowAdapter?方法? { //System.out.println("window closing---"+e.toString());//该动作触发一次打印一次?? System.exit(0);//关闭虚拟? }}
import java.awt.*;import java.awt.event.*;class FrameDemo{ //定义该图???的组件的引用? private Frame f; private Button but; FrameDemo() { init(); } public void init() { f = new Frame("my frame"); //对frame进?基本设置? f.setBounds(300,100,600,500);//将四?寸?一起?? f.setLayout(new FlowLayout());//流式布局 but = new Button("my button");//建立按钮组件 //将组件添加到frame? f.add(but); //加载?下窗体上事件? myEvent(); //显示窗体; f.setVisible(true); } private void myEvent() { //给窗体添加监? f.addWindowListener(new WindowAdapter() { //关闭窗口的方? public void windowClosing(WindowEvent e) { System.exit(0); } }); //让按?备??出程序的功能 /* 按钮就是事件源?? 那么选择?监听器呢? 通过关闭窗体示例了解到,想?知道?组件具??么样的特有监?? ?要查看?组件对象的功能?? 通过查阅button的描述?发现按?持一?有监听addActionListener? //面向对象的?想,?谁进行操作谁就提供操作的方法? *///ActionListener??有?配器的接口,因为内部方法只有一?适配器是为了让子类方便使?没有适配器的接口?三个,一?口中有三?上方法的都有适配器?? but.addActionListener(new ActionListener() { private int count = 1; public void actionPerformed(ActionEvent e) { //System.out.println("?出,按钮干的"); //System.exit(0); //f.add(new Button("Button-"+(count++))); //f.setVisible(true); //f.validate(); //System.out.println(e.getSource()); Button b = (Button)e.getSource(); Frame f1 = (Frame)b.getParent(); f1.add(new Button("button-"+count++)); f1.validate(); } }); } public static void main(String[] args) { new FrameDemo(); }}
鼠标事件和键盘事?/p>
import java.awt.*;import java.awt.event.*;class MouseAndKeyEvent { private Frame f; private Button but; private TextField tf; MouseAndKeyEvent() { init(); } public void init() { f = new Frame("my frame"); f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); tf = new TextField(20);//创建单?文本? but = new Button("my button"); f.add(tf); f.add(but); myEvent(); f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //文本框键盘监? tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { int code = e.getKeyCode();//获取?的码 if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))//判断??? { System.out.println(code+".....?法的"); e.consume();//如果字?非法,使用consume方法?不?字?进入文本? } } }); //给But添加??盘监??? but.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //判断ctrl?否?按下 if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER) //System.exit(0); System.out.println("ctrl+enter is run"); System.out.println(e.getKeyChar()+"---"+e.getKeyCode());//根基?字?获取??应的? //根据?码获取到?文本,返回的?符串? System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode()); } }); //?给按?加活动监???活动就执行,鼠标?都能让按?? //添加事件的时候尽量添加ActionEvent but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("action ok"); } }); //鼠标监听 but.addMouseListener(new MouseAdapter() { private int count = 1; private int clickCount = 1; //鼠标进入事件,只要进入就能?监听到并计数 public void mouseEntered(MouseEvent e) { System.out.println("鼠标进入到?组件"+count++); } //双击监听 public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2)//双击的时候获取鼠标连击?数,如果连击次数?就是双击? System.out.println("双击动作"+clickCount++); } //单击 public void mouseClicked(MouseEvent e) { System.out.println("单击动作"+clickCount++); } }); } public static void main(String[] args) { new MouseAndKeyEvent(); }}
---------------------- android培??a target="blank" href="http://edu.csdn.net/heima" style="color: #ca0000; text-decoration: underline; text-align: center; font-size: 12px; line-height: 26px;">java培?、期待与您交流! ----------------------