---------------------- android培训、java培训、期待与您交流! ----------------------
gui的学习笔记 G(Graphhical)U(User)I(Interface) 用图形的 方式来显示计算机操作的界面这样更方便更直观 Java为GUI提供的对象都存在java.awt和javax.Swing两个类中 j ava.Awt:Abstract WindowsToolhit(抽象窗口的工具包)需要调用本地的系统的实现功能属于重量级控件 javax.Swing:在AWT的基础上建立的一套图形化用户界面提供了更多的之间而且完全由Java实现增强的移植性属于轻量级控件Component所有组件的父类 注意 :Container组建下能添加其他组件 布局管理器:组建该按照什么样的方式排放 常见的布局管理器:FlowLayout(流式布局)从左到右的方式panel默认的布局方式 Borderlayout(边界布局管理器)如果没有制定组建的边界那就组建就会全居中添加其他组件是会覆盖 网格式布局:先将窗体划分为网格状将组建添加在网格内 卡片式布局(选项卡效果)综合布局上面是以一种风格 下面是一种风格 ---------布局之前先想好做成什么样的否则很难看----------- 在APIdoc中看container中的部分方法如add()... 看 Frame类的创建第一个GUI窗体 事件监听机制:事件源:awt或者swing包中的图形界面组件 事件:每一个事件源都有自己的特有的对应事件和共性事件 事件对象 监听器 讲一个异常事件注册到事件源上也就是说将某一个事件的动作(不只是一个动作)都已经封装到监听器重 处理方式(监听器种的异常事件中的处理方式) ——这是我们要做 的动作 -------------------------------------- 示例代码:
/* * 创建图形化界面 * 1.创建frame窗体 *2.对窗体进行基本设置(大小,位置,布局等) *3.定义组件 *4将组件通过窗体的add方法添加到窗体中 *5.让窗体显示并通过setVisible(true); **/ public class MyFirst{ MyFirst(){ init(); } private Frame MyFrame=null; private Button btn=null; void init(){ MyFrame=new Frame("我的第一个窗口"); MyFrame.setLayout(new FlowLayout()); MyFrame.setBounds(100,200,500,500); btn=new Button("dianjiwo"); MyFrame.add(btn); myEvent(); MyFrame.setVisible(true); } void myEvent(){ MyFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); } public static void main(String[] args) { new MyFirst(); } }
-------------------------------------- 制作我们的第一个事件源并注册到监听器中 注意:只要方法超过三个都配有adapater 共性事件:(鼠标和键盘事件) 示例代码: public class MouseAndKey { MouseAndKey(){ init(); } private Frame MyFrame=null; private Button btn=null; private TextField tf=null; void init(){ MyFrame=new Frame("鼠标和键盘共性事件测试"); MyFrame.setLayout(new FlowLayout()); MyFrame.setBounds(100,200,500,500); btn=new Button("dianjiwo"); tf =new TextField("这是初始值",10); MyFrame.add(tf); MyFrame.add(btn); myEvent(); MyFrame.setVisible(true); } void myEvent(){ MyFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); btn.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent e){ System.out.println("触发了鼠标监听事件"); } public void mouseClicked(MouseEvent e){ if(e.getClickCount()==2){ System.out.println("双击了该按钮"); } } }); tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e){ int code=e.getKeyCode(); if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9)){ e.consume(); } } }); btn.addKeyListener(new KeyAdapter() {
@Override public void keyPressed(KeyEvent e) { //System.out.println(e.getKeyText(e.getKeyCode())+" : "+e.getKeyCode()); // if(e.getKeyChar()==KeyEvent.VK_ESCAPE){ // System.exit(0); // } if(e.isControlDown()&&e.getKeyCode()==e.VK_ENTER){ System.exit(0); } } }); btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("触发按钮活动事件 "); } }); } public static void main(String[] args) { new MouseAndKey(); } } ------------------------------------------ 菜单栏、菜单和菜单条目的使用 代码示例: public class MyMenuDemo { private Frame f; private Menu m; private MenuBar mb; private Menu subMenu; private MenuItem mitem; MyMenuDemo(){ init(); } void init(){ f=new Frame("菜单界面"); f.setLayout(new FlowLayout()); f.setBounds(200, 200, 500, 5000); mb=new MenuBar(); subMenu=new Menu("新建文件夹"); m=new Menu("文件"); m.add(subMenu);//菜单中添加菜单 为的是往子菜单中添加菜单选项 mitem=new MenuItem("新建了一个文件夹");//建立菜单项 subMenu.add(mitem);//在子菜单添加菜单项 m.add(subMenu);//在菜单里添加子菜单 mb.add(m);//才菜单栏中添加菜单 f.setMenuBar(mb); MyEvent(); f.setVisible(true); } void MyEvent(){ f.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new MyMenuDemo(); } } 这里要注意菜单栏、菜单、和菜单条目的之间的关系 ---------------------------------------------------- 就前面的例子制作了一个简易的记事本小程序代码如下: public class notepad { private Frame f; private MenuBar mb; private Menu m,subMenu; private MenuItem subItem,closeItem,openItem,saveItem; private TextArea ta; private FileDialog openDia,saveDia; private File file; notepad(){init();} void init(){ f=new Frame("我的记事本"); //f.setLayout(new FlowLayout());//通常设置为流式布局 ta=new TextArea(); f.setBounds(100, 200, 500, 600); mb=new MenuBar(); m=new Menu("系统"); subMenu=new Menu("新建"); subItem=new MenuItem("新建记事本文件"); subMenu.add(subItem); openItem=new MenuItem("打开文件"); closeItem=new MenuItem("关闭程序"); saveItem=new MenuItem("保存文件"); openDia=new FileDialog(f,"打开文件",FileDialog.LOAD); saveDia=new FileDialog(f,"保存文件",FileDialog.SAVE); m.add(saveItem); f.add(ta); m.add(openItem); m.add(subMenu); m.add(openItem); m.add(saveItem); m.add(closeItem); mb.add(m); MyEvent(); f.setMenuBar(mb); f.setVisible(true); } void MyEvent(){ f.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent e) { System.exit(0); } }); closeItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); openItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { openDia.setVisible(true); String path=openDia.getDirectory(); String fileName=openDia.getFile(); if((path==null)&&(fileName==null)){ return; } ta.setText(""); file=new File(path,fileName); try { BufferedReader br=new BufferedReader(new FileReader(file)); String line; while((line=br.readLine())!=null){ ta.append(line+"\r\n"); } br.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException el) { // TODO Auto-generated catch block el.printStackTrace(); } } }); saveItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(file==null){ saveDia.setVisible(true); String path=saveDia.getDirectory(); file=new File(path); }else{ try { BufferedWriter bw=new BufferedWriter(new FileWriter(file)); bw.write(ta.getText()); bw.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }); } public static void main(String[] args) { new notepad(); } }
----------------------
android培训、java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima