当前位置:网站首页 > Java基础 > 正文

java基础250讲



第一讲  图形化用户界面

GUI(图形用户界面)
GUI
• Graphical User Interface(图形用户接口)。
• 用图形的方式,来显示计算机操作的界面,这样更方便更直观
CLI
• Command line User Interface (命令行用户接口)
• 就是常见的Dos命令行操作。
• 需要记忆一些常用的命令,操作不直观。

Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中

Awt与 Swing
• java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
• javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件

Container常用的子类:Window   Panel

Window常用子类:Frame   Dialog

二、布局管理器

容器中的组件的排放方式,就是布局。
常见的布局管理器:
• FlowLayout(流式布局管理器)从左到右的顺序排列。flow嘛,跟着走就是流水
                •  Panel默认的布局管理器。
• BorderLayout(边界布局管理器)board嘛就是打麻将,所以是东西南北中布局
                • Frame默认的布局管理器。
• GridLayout(网格布局管理器)Brid网格状的
• CardLayout(卡片布局管理器)
• 选项卡
• GridBagLayout(网格包布局管理器)
• 非规则的矩阵

java基础250讲 1 import java.awt.*;  2 /*创建步骤:  3  * 1、用Frame创建窗口  4  * 2、对窗口进行进本操作  5  * 大小setSize(),位置setLocation()、布局setLayout  6  * 3、定义组件(如Button按钮 、Label标签、Checkbox复选框等)  7  * 4、setVisible(boolean);显示窗口与否  8 */  9 public class AwtDemo { 10 public static void main(String[] args){ 11 Frame f=new Frame("水音");//创建 12 f.setSize(500,400);//大小 13 f.setLocation(300,200);//位置 14 f.setLayout(new FlowLayout());//边界布局(桌子打麻将不仅)是默认的,这里改成流式跟班布局 15 16 Button b=new Button("有压力"); 17 f.add(b);//按钮添加在窗口 18 f.setVisible(true);//显示窗口 19  } 20 }

五、事件监听机制:

1、组合:

  1)事件源(组件):awt或swing包中的图形化界面组件;

  2)事件(Event):每件时间有都有自己特有的对应事件;

  3)监听器:将可触发某一事件的动作,都封装在监听器中

  4)事件处理:引发事件后的处理方式;

2、使用方法

  1)确定事件源(容器或组件)。通过事件源对象的addXXXlistener()方法将监听器注册到该事件源上

如:

f.addWindowListener(new mylis());//主函数引用的方法 //定义一个监听器基础WindowAdapter,并复写7大方法 class mylis extends WindowAdapter { public void WindowClosing(){ System.out.println("关闭按钮被按下"); System.exit(0); } }

2)然而一般是使用你们匿名内部类方法:

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("开启");
  }
});

练习:面向对象的思想做一次按钮关闭窗口的监听

 1 import java.awt.*;  2 import java.awt.event.*;  3  4 class EvenDemo {  5 // 定义组件按钮和界面  6 private Frame f=null;  7 private Button but=null;  8 // 构造函数让他一new就执行  9  EvenDemo(){ 10  win(); 11  } 12 // 定义窗口 13 public void win(){ 14 f=new Frame("我是窗口"); 15 but=new Button("我是按钮"); 16 f.setBounds(250,250,250,250);//设置大小位置 17 f.setLayout(new FlowLayout());//改成流式布局 18 // f加入but 19  f.add(but); 20  myEvent(); 21 f.setVisible(true); 22  } 23 // 定义时间 24 public void myEvent(){ 25 // 窗口时间 26 f.addWindowListener(new WindowAdapter() { 27 public void windowClosing(WindowEvent e){ 28 System.exit(0); 29  } 30  }); 31 /* 32  * 那么现在让按钮做时间源的话,选择哪个监听器呢? 33  * 应该在API查阅button的描述,最后找到addActionListener 34  * 35 */ 36 but.addActionListener(new ActionListener(){ 37 38 public void actionPerformed(ActionEvent arg0) { 39 System.out.println("按钮搞上你"); 40 System.exit(0); 41  } 42  }); 43  } 44 public static void main(String[] args){ 45 new EvenDemo(); 46  } 47 }

练习大全:鼠标(进入、双击、点击),键盘(点击,组合件),文本框(输入,非法输入)的监听

 1 import java.awt.*;  2 import java.awt.event.*;  3 class MouseEvent {  4 // 定义组件按钮和界面  5 private Frame f=null;  6 private Button but=null;  7 private TextField tf;  8 // 构造函数让他一new就执行  9  MouseEvent(){ 10  win(); 11  } 12 // 定义窗口 13 public void win(){ 14 f=new Frame("我是窗口"); 15 but=new Button("我是按钮"); 16 f.setBounds(250,250,250,250);//设置大小位置 17 f.setLayout(new FlowLayout());//改成流式布局 18 // f加入but 19 tf=new TextField(20); 20 21  f.add(tf); 22  f.add(but); 23  myEvent(); 24 f.setVisible(true); 25  } 26 // 定义时间 27 public void myEvent(){ 28 // 窗口时间 29 f.addWindowListener(new WindowAdapter() {//比较多的时候是Adapter 30 public void windowClosing(WindowEvent e){ 31 System.exit(0); 32  } 33  }); 34 // 按钮监听 35 but.addActionListener(new ActionListener(){ 36 37 public void actionPerformed(ActionEvent arg0) { 38 System.out.println("按钮搞上你"); 39 // System.exit(0); 40  } 41  }); 42 // 文本框注意使用的键盘监听 43 tf.addKeyListener(new KeyAdapter() { 44 public void keyPress(KeyEvent e){ 45 int code=e.getKeyCode(); 46 if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9)){ 47 System.out.println(code+"--非法的"); 48 e.consume();//改变原来的形式,不能输进数据 49  } 50  } 51  }); 52 // 鼠标时需要加装在按钮上的 53 but.addMouseListener(new MouseAdapter(){ 54 private int cnt=1; 55 private int cot=1; 56 // 鼠标进入按钮but 57 public void mouseEntered(MouseEvent e){ 58  System.out.println(); 59  } 60 // 双击 61 public void mouseClicked(MouseEvent e){ 62 if(e.getClickCount()==2){ 63 System.out.println("双击"+cot++); 64  } 65  } 66 67  }); 68 // 键盘监听 69 but.addKeyListener(new KeyAdapter(){ 70 public void keyPressed(KeyEvent e){ 71 // 同时按下这两键发生KeyEvent.VK_ENTER 72 if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){ 73 System.out.println("ctrl+enter is run"); 74 }//ctrl被按下且按下另一个键时keyEvent.VK_ENTER就执行xx 75 // System.out.println(e.getKeyChar()+"--"+e.getKeyCode());  76  } 77  }) ; 78 79 80  } 81 protected int getClickCount() { 82 // TODO Auto-generated method stub 83 return 0; 84  } 85 public static void main(String[] args){ 86 new MouseEvent(); 87  } 88 }

练习:当文本框出现误操作时,出现提醒的机制

 1 import java.awt.*;  2 import java.awt.event.*;  3 import java.io.*;  4  5 import javax.swing.Action;  6  7 public class MyWindowDemo {  8  9 private Frame f;  10 private Button b;  11 private TextField tf;//文本框  12 private TextArea ta;//文本域  13  14 private Button okb;  15 private Dialog d;//出错的对话框  16 private Label lab;//出错的警示语标签  17  MyWindowDemo(){  18  win();  19  }  20 // 先做窗口  21 public void win(){  22 f=new Frame("窗口");  23 f.setBounds(200,200,600,300);  24 f.setLayout(new FlowLayout());  25  26 b=new Button("按钮");  27  28 tf=new TextField(30);//30长的文本框  29 //  30 ta=new TextArea(10,40);//高和长  31  32 // 各种添加  33  f.add(b);  34  f.add(tf);  35  f.add(ta);  36 // 事件发生  37  event();  38 // 显示窗口  39 f.setVisible(true);  40  }  41  42 // 自定义事件  43 public void event(){  44 f.addWindowListener(new WindowAdapter() {  45 public void windowClosing(WindowEvent e){  46 System.exit(0);  47  }  48  });  49  50 // 按钮文本框内容搜索  51 b.addActionListener(new ActionListener() {  52 public void actionPerformed(ActionEvent e) {  53  showFile();  54  }  55  });  56 // 文本框按钮enter后事件  57 tf.addKeyListener(new KeyAdapter(){  58 public void keyPressed(KeyEvent e){  59 if(e.getKeyCode()==KeyEvent.VK_ENTER)  60  showFile();  61  }  62  });  63  }  64 // 定义一个查看文件的方法  65 private void showFile(){  66 ta.setText("");//每次清屏  67 String str=tf.getText();//得到文本框的值  68 File dir=new File(str);//创建一个文本框值对应的文件  69 if(dir.exists()&&dir.isDirectory()){//如果文件且有目录  70 String[] names=dir.list();//那就遍历下存好  71 for(String name:names){  72 ta.append(name+" ");  73  }  74 }else{  75 // 对话框设置  76 d=new Dialog(f,"错误信息",true);  77 d.setBounds(400,200,180,150);  78 d.setLayout(new FlowLayout());  79 // 按钮盒标签  80 okb=new Button("确定");  81 lab=new Label("输入的信息:"+str+"是错误的");  82  83  d.add(okb);  84  d.add(lab);  85 // 对话框关闭  86 d.addWindowListener(new WindowAdapter(){  87 public void windowClosing(WindowEvent e){  88 d.setVisible(false);//窗体不显示  89  }  90  });  91 // 对话框的确定按钮  92 okb.addActionListener(new ActionListener() {  93 public void actionPerformed(ActionEvent e) {  94 d.setVisible(false);//okb按下后窗体不显示   95  }  96  });  97  98 d.setVisible(true);  99  } 100  } 101 102 public static void main(String[] args){ 103 new MyWindowDemo(); 104  } 105 }

菜单:MenuBar

MenuComponent

  |-MenuBar:菜单栏,可添加菜单和菜头子条目

  |-MenuItem:是最终的条目,没有三角标

    |-Menu:菜单,可添加菜单和MenuItem,有三角标

一般对Menu和MenuItem的对象作为事件源添加获得监听ActionListener,并进行事件处理

 1 import java.awt.*;  2 import java.awt.event.*;  3  4 //练习菜单的使用并制作退出时间  5 public class myMubuDemo {  6 //定义组件  7 private Frame fra;  8 private MenuBar mb;  9 private Menu m1,m2; 10 private MenuItem close1,subI; 11 // 初始化 12  myMubuDemo(){ 13  win(); 14  } 15 private void win(){ 16 // 窗体 17 fra=new Frame("xxx"); 18 fra.setBounds(300,100,500,600); 19 fra.setLayout(new FlowLayout()); 20 // 菜单的设置 21 mb=new MenuBar(); 22 m1=new Menu("选项1"); 23 m2=new Menu("子菜单"); 24 25 close1=new MenuItem("退出"); 26 subI=new MenuItem("子条目"); 27 // 从小开始添加 28  m2.add(subI); 29  m1.add(m2); 30  m1.add(close1); 31 32  mb.add(m1); 33 // 注意不是add 窗体添加菜单bar 34  fra.setMenuBar(mb); 35 // 时间发生 36  myEvent(); 37 38 fra.setVisible(true); 39  } 40 private void myEvent() { 41 // x关闭功能 42 fra.addWindowListener(new WindowAdapter(){ 43 public void windowClosing(WindowEvent e){ 44 System.exit(0); 45  } 46  }); 47 // 点击MenuItem关闭功能 48 close1.addActionListener(new ActionListener(){ 49 public void actionPerformed(ActionEvent arg0) { 50 System.exit(0); 51  } 52  }); 53  } 54 public static void main(String[] args){ 55 new myMubuDemo(); 56  } 57 }

以下是j制作一个文本软件和制作Jar包的练习

先制作一个简易的文本软件:

package Menu; /*需求:制作一个简易的记事本程序 * 要求:有菜单,文件有打开、保存、退出的功能。还将协会的程序变为可双击执行的程序 * * 步骤: 一、代码部分 * 1、我需要new一下构造函数就执行功能,所以各种组件定义在主函数外,由构造 * 函数启动个功能窗口myWin,有功能窗口启动时间myEvent * 2、文件的打开、保存功能由FileDialog实现 * * 二、jar包部分 * 以图列展现 */ import java.awt.*; import java.awt.event.*; import java.io.*; public class MenuText { // 定义个组件 // 基本组件 private Frame fra; private MenuBar bar; private Menu fileMe; private MenuItem openI,saveI,otherSave,closeI; private TextArea ta;//文本域 // 用于保存于另存组件 private FileDialog openDia,saveDia,saveDiaa; private File file; // 构造函数  MenuText(){ myWin(); } // 窗口实现 private void myWin(){ // 搞组件啦 fra=new Frame("简易文本"); fra.setBounds(300,150,600,500); ta=new TextArea(); bar=new MenuBar(); fileMe=new Menu("文件"); openI=new MenuItem("打开"); saveI=new MenuItem("保存"); otherSave=new MenuItem("另存为"); closeI=new MenuItem("退出"); // 用于打开保存文件的组件FileDialog openDia = new FileDialog(fra,"选择打开的文件",FileDialog.LOAD);//注意打开的最后参数 saveDia = new FileDialog(fra,"选择存的文件",FileDialog.SAVE);//注意打开的最后参数 saveDiaa = new FileDialog(fra,"选择存的文件",FileDialog.SAVE);//注意打开的最后参数  myEvent(); // 添加组件  fileMe.add(openI); fileMe.add(saveI); fileMe.add(otherSave); fileMe.add(closeI); bar.add(fileMe); fra.add(ta); fra.setMenuBar(bar); fra.setVisible(true); } // 事件监听 private void myEvent(){ // 窗口关闭功能退出关闭和x关闭 fra.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.out.println("x关闭"); System.exit(0); } }); closeI.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.out.println("退出关闭"); System.exit(0); } }); // 打开事件,打开需要使用FileDialog,需要知道文件目录,文件名,需要使用IO openI.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { // 显示文件对话框  openDia.setVisible(true); // 需要文件目录与名字 String di=openDia.getDirectory(); String fileName=openDia.getFile(); if(di==null||fileName==null)//打开了对话框却没有做操作 return; // 就可以搞一个文件了 file =new File(di,fileName);//这个就是我们打开的文件 // 一下是使用IO缓冲流惊醒文件传输 try { ta.setText("");//情况我现在窗口的文字 // 需要用缓冲流读取file在放弃ta里 BufferedReader br= new BufferedReader(new FileReader(file)); String line=null; while((line=br.readLine())!=null){ ta.append(line+" "); } br.close(); } catch (IOException e2) { throw new RuntimeException("文件打开失败"); } } }); // 保存事件 saveI.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e1) { // 如果第一次保存会显示对话框 if(file==null){ // 显示对话框 saveDia.setVisible(true); String di=saveDia.getDirectory(); String fileName=saveDia.getFile(); if(di==null||fileName==null)//打开了对话框却没有做操作 return; file =new File(di,fileName);//这个就是我们保存的文件  } save();//保存文件的方法  } }); // 另存事件 otherSave.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e2) { // 另存一定有对话框 // 显示对话框 saveDiaa.setVisible(true); // 目录和文件名来自对话框,就是 String di=saveDiaa.getDirectory(); String fileName=saveDiaa.getFile(); file =new File(di,fileName);//这个就是我们保存的文件  save(); // 保存时,默认上次打开对话框文件位置  openDia.setFile(file.getName()); } }); } // 保存文件使用IO技术,将窗口的内容写入新的文件中 private void save(){ try { BufferedWriter bw=//写入file,所以保存和另存的区别在于file的不同 new BufferedWriter(new FileWriter(file)); String line=ta.getText(); bw.write(line); // bw.flush();应该close写在try所以不刷,一般close写在finally就需要刷  bw.close(); } catch (IOException e) { throw new RuntimeException("文件保存失败"); } } public static void main(String[] args){ new MenuText(); } }

导入Jar的步骤

1、我已经生成了一个包:D:Java520sGUIsrcMenu

2、

版权声明


相关文章:

  • java源码基础语法2025-03-31 14:58:03
  • java 基础题木2025-03-31 14:58:03
  • java基础代码2025-03-31 14:58:03
  • 永川java基础2025-03-31 14:58:03
  • java基础论坛2025-03-31 14:58:03
  • java自学基础入门2025-03-31 14:58:03
  • java基础英语学习2025-03-31 14:58:03
  • java 基础小游戏2025-03-31 14:58:03
  • java基础笔试102025-03-31 14:58:03
  • java有什么基础书2025-03-31 14:58:03