您的位置:首页 > 产品设计 > UI/UE

黑马程序员_JavaGUI

2012-03-25 03:03 357 查看
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
 

         GUI:Graphical User Interface(图形用户接口)。用图形的形式,来显示计算机操作的界面,这样更方便更直观。

Java为GUI提供的对象都存在java.awt和javax.swing两个包中。

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

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

继承关系图:



 

 

布局管理器:容器中的组件的排列方式,就是布局。

常见的布局管理器:

FlowLayout(流式布局管理器):从左到右的顺序排列。Panel默认的布局管理器。

BorderLayout(边界布局管理器):东,南,西,北,中。Frame默认的布局管理器。

GridLayout(网格布局管理器):规则的矩阵。

CardLayout(卡片布局管理器):选项卡。

GridBagLayout(网格包布局管理器):非规则的矩阵。

 

创建图形化界面:

1.创建Frame窗体。

2.对窗体进行基本设置。比如大小,位置,布局。

3.定义组件。

4.将组件通过窗体的add方法添加到窗体中。

5.让窗体显示,通过setVisible(true)。

示例:

import java.awt.*;

class AwtDemo

{

 public static void main(String[] args)

 {

  Frame f=new Frame("my awt");

  f.setSize(600,500);//设置窗体大小。

  f.setLocation(400,200);//设置窗体本地位置。

  f.setLayout(new FlowLayout());//设置窗体布局。

  Button b=new Button("我是一个按钮");

  f.add(b);

  f.setVisible(true);

 }

}

 

事件监听机制组成:事件源(组件),事件(Event),监听器(Listener),事件处理(引发事件后的处理方式)。

事件监听机制流程图:



 

用户对组件的操作,就是一个事件。那么产生事件的组件就是事件源。接收并处理事件,与用户进行交互的行为就是事件处理器。这些处理方式都封装在监听器中。

事件监听机制的特点:

1.事件源:就是awt包或者swing包中的那些图形界面组件。

2.事件:每一个事件源都有自己特有的对应事件和共性事件。

3.监听器:将可以触发某一个事件的动作(不止一个动作)都封装到监听器中。

窗体事件示例:

事件监听机制的特点:

1.事件源:就是awt包或者swing包中的那些图形界面组件。

2.事件:每一个事件源都有自己特有的对应事件和共性事件。

3.监听器:将可以触发某一个事件的动作(不止一个动作)都封装到监听器中。

窗体事件示例:

事件监听机制的特点:

1.事件源:就是awt包或者swing包中的那些图形界面组件。

2.事件:每一个事件源都有自己特有的对应事件和共性事件。

3.监听器:将可以触发某一个事件的动作(不止一个动作)都封装到监听器中。

窗体事件示例:

事件监听机制的特点:

1.事件源:就是awt包或者swing包中的那些图形界面组件。

2.事件:每一个事件源都有自己特有的对应事件和共性事件。

3.监听器:将可以触发某一个事件的动作(不止一个动作)都封装到监听器中。

窗体事件示例:

import java.awt.*;

import java.awt.event.*;

class AwtDemo2

{

 public static void main(String[] args)

 {

  Frame f=new Frame("my awt");

  f.setSize(600,500);

  f.setLocation(400,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("我打开了");

   }

  });

    f.setVisible(true);

 }

}

 

Action事件:让按钮具备退出程序的功能。按钮就是事件源。如何选择监听器呢?

通过关闭窗体事件示例了解到,要想知道哪个组件具备什么样的特有监听器,需要查看该组件对象的功能。通过查阅Button的API文档,发现Button对象支持一个特有监听器:ActionListener。

Action事件示例:

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);

   }

  });

  but.addActionListener(new ActionListener()

  {

   public void actionPerformed(ActionEvent e)

   {

    System.out.println("退出,按钮干的");

    System.exit(0);

   }

  });

 }

 public static void main(String[] args)

 {

  new FrameDemo();

 }

}

鼠标事件和键盘事件:

示例:

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());

  but=new Button("my button");

  tf=new TextField(25);

  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);

   }

  });

  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)

   {

    //System.out.println("点击动作"+clickCount++);

    if(e.getClickCount()==2)

aa2d
     System.out.println("双击动作"+clickCount++);

   }

  });

  //给按钮添加一个键盘监听器。

  but.addKeyListener(new KeyAdapter()

  {

   public void keyPressed(KeyEvent e)

   {

    if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)

     System.out.println("ctrl+enter is run");

    if(e.getKeyCode()==KeyEvent.VK_ESCAPE)

     System.exit(0);

    System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"....."+e.getKeyCode());

   }

  });

  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();

    }

   }

  });

 }

 public static void main(String[] args)

 {

  new MouseAndKeyEvent();

 }

}

在窗体中添加对话框(Dialog)。当出现某种操作时,就弹出对话框。

示例:

import java.awt.*;

import java.awt.event.*;

import java.io.*;

class MyWindowDemo

{

 private Frame f;

 private Button but;

 private TextField tf;

 private TextArea ta;

 private Dialog d;

 private Label lab;

 private Button okBut;

 MyWindowDemo()

 {

  init();

 }

 public void init()

 {

  f=new Frame("my window");

  f.setBounds(300,100,600,500);

  f.setLayout(new FlowLayout());

  tf=new TextField(70);

  but=new Button("转到");

  ta=new TextArea(25,80);

  d=new Dialog(f,"提示信息-self",true);

  d.setBounds(400,200,300,80);

  d.setLayout(new FlowLayout());

  lab=new Label();

  okBut=new Button("确定");

  d.add(lab);

  d.add(okBut);

  f.add(tf);

  f.add(but);

  f.add(ta);

  myEvent();

  f.setVisible(true);

  

 }

 private void myEvent()

 {

  f.addWindowListener(new WindowAdapter()

  {

   public void windowClosing(WindowEvent e)

   {

    System.exit(0);

   }

  });

  okBut.addActionListener(new ActionListener()

  {

   public void actionPerformed(ActionEvent e)

   {

    d.setVisible(false);

   }

  });

  d.addWindowListener(new WindowAdapter()

  {

   public void windowClosing(WindowEvent e)

   {

    d.setVisible(false);

   }

  });

  tf.addKeyListener(new KeyAdapter()

  {

   public void keyPressed(KeyEvent e)

   {

    if(e.getKeyCode()==KeyEvent.VK_ENTER)

     showDir();

   }

  });

  but.addActionListener(new ActionListener()

  {

   public void actionPerformed(ActionEvent e)

   {

    showDir();

   }

  });

 }

 private void showDir()

 {

  String dirPath=tf.getText();

  File dir=new File(dirPath);

  if(dir.exists()&&dir.isDirectory())

  {

   ta.setText("");

   String[] names=dir.list();

   for(String name:names)

   {

    ta.append(name+"\r\n");

   }

  }

  else

  {

   String info="输入的路径是:"+dirPath+"是错误的";

   lab.setText(info);

   d.setVisible(true);

  }

 }

 public static void main(String[] args)

 {

  new MyWindowDemo();

 }

}

 

在窗体中添加菜单:

示例:

import java.awt.*;

import java.awt.event.*;

class MyMenuDemo

{

 private Frame f;

 private MenuBar mb;

 private Menu m,subMenu;

 private MenuItem closeItem,subItem;

 MyMenuDemo()

 {

  init();

 }

 public void init()

 {

  f=new Frame("my window");

  f.setBounds(300,100,500,600);

  f.setLayout(new FlowLayout());

  mb=new MenuBar();

  m=new Menu("文件");

  subMenu=new Menu("子菜单");

  subItem=new MenuItem("子条目");

  closeItem=new MenuItem("退出");

  subMenu.add(subItem);

  m.add(subMenu);

  m.add(closeItem);

  mb.add(m);

  f.setMenuBar(mb);

  myEvent();

  f.setVisible(true);

 }

 private void myEvent()

 {

  f.addWindowListener(new WindowAdapter()

  {

   public void windowClosing(WindowEvent e)

   {

    System.exit(0);

   }

  });

  closeItem.addActionListener(new ActionListener()

  {

   public void actionPerformed(ActionEvent e)

   {

    System.exit(0);

   }

  });

 }

 public static void main(String[] args)

 {

  new MyMenuDemo();

 }

}

 

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息