黑马程序员_GUI

来源:互联网 发布:美版lol mac 编辑:程序博客网 时间:2024/05/16 10:46

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------


概述

    GUI:图形用户接口


布局

    容器中组件的排放方式,就是布局。

Frame

    创建图形化界面
    1.创建frame窗体
    2.对窗体进行基本设置,大小、位置、布局等
    3.定义组件
    4.将组件通过窗体的add方法添加到窗体中
    5.让窗体显示,通过setVisible(true);

事件监听机制

    事件监听机制的特点:
    1.事件源
    2.事件
    3.监听器
    4.事件处理

    事件源:awt包或swing包中的图形界面组建。
    事件:每一个事件源都有自己特有对应事件和共性事件。
    监听器:将可以触发某一个事件的动作(不止一个)封装到了监听器中。

    以上三者在java中已经定义好了,直接获取对象来用就行,我们要做的事情就是对产生的事情进行处理。

窗体事件

public 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.exit(0);}});f.setVisible(true);}}

Action事件

public class FrameDemo {//定义该图形界面中所需的组件的引用private Frame f;private Button but;FrameDemo(){init();}public void init(){f = new Frame("my frame");//对frame进行基本设置f.setBounds(300, 100, 500, 400);f.setLayout(new FlowLayout());but = new Button("my button");//将组件添加到farme中f.add(but);//加载窗体上的事件myEvent();//显示窗体f.setVisible(true);}private void myEvent(){f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//给按钮具备退出程序的功能//按钮是事件源//查阅button描述,发现按钮的特有监听器addActionListenerbut.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});}public static void main(String[] args) {new FrameDemo();}}

鼠标事件    键盘事件

public 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, 500, 400);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);}});but.addMouseListener(new MouseAdapter(){public void mouseEntered(MouseEvent e){System.out.println("鼠标进入该组件");}public void mouseClicked(MouseEvent e){if(e.getClickCount()==2)System.out.println("双击动作");}});but.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){int code = e.getKeyCode();if(code==KeyEvent.VK_ENTER)System.exit(0);if(e.isControlDown()&&code==KeyEvent.VK_1)System.out.println("ctrl+1");}});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

public class MyWindowDemo {private Frame f;private TextField tf;private Button but;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(60);but = new Button("转到");ta = new  TextArea(25,70);d = new Dialog(f,"提示信息",true);d.setBounds(400,200,300,100);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);}});but.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){showDir();}});d.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){d.setVisible(false);}});okBut.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){d.setVisible(false);}});tf.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){if(e.getKeyCode()==KeyEvent.VK_ENTER){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();}}

菜单    练习-打开文件    练习-保存文件

public class MyMenuDemo {private Frame f;private MenuBar bar;private Menu fileMenu,subMenu;private MenuItem openItem,saveItem,closeItem,subItem;private FileDialog openDia,saveDia;private TextArea ta;private File file;MyMenuDemo(){init();}public void init(){f = new Frame("my window");f.setBounds(300,100,650,600);bar= new MenuBar();fileMenu = new Menu("文件");subMenu = new Menu("子菜单");subItem = new MenuItem("子条目");closeItem = new MenuItem("退出");openItem = new MenuItem("打开");saveItem = new MenuItem("保存");openDia = new FileDialog(f,"打开",FileDialog.LOAD);saveDia = new FileDialog(f,"保存",FileDialog.SAVE);ta = new TextArea();f.setMenuBar(bar);bar.add(fileMenu);fileMenu.add(subMenu);fileMenu.add(openItem);fileMenu.add(saveItem);fileMenu.add(closeItem);subMenu.add(subItem);f.add(ta);myEvent();f.setVisible(true);}public 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);}});openItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){openDia.setVisible(true);String dirPath = openDia.getDirectory();String fileName = openDia.getFile();if(dirPath==null || fileName==null)return;ta.setText("");file = new File(dirPath,fileName);BufferedReader bufr = null;try{bufr = new BufferedReader(new FileReader(file));String line = null;while((line=bufr.readLine())!=null){ta.append(line+"\r\n");}}catch(IOException ex){throw new RuntimeException("读取失败");}finally{try{if(bufr!=null)bufr.close();}catch(IOException ex){throw new RuntimeException("读取关闭失败");}}}});saveItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){if(file==null){saveDia.setVisible(true);String dirPath = saveDia.getDirectory();String fileName = saveDia.getFile();if(dirPath==null || fileName==null)return;file = new File(dirPath,fileName);}BufferedWriter bufw = null;try{bufw = new BufferedWriter(new FileWriter(file));String text = ta.getText();bufw.write(text);bufw.flush();}catch(IOException ex){throw new RuntimeException("保存失败");}finally{try{if(bufw!=null)bufw.close();}catch(IOException ex){throw new RuntimeException("保存关闭失败");}}}});}public static void main(String[] args) {new MyMenuDemo();}}





-----------------------ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net


0 0
原创粉丝点击