JAVA基础 day24 GUI的学习 事件监听机制 编写简易的记事本 jar包双击执行
2016-10-28 21:11
961 查看
GUI:图形用户接口
JAVA为GUI提供的对象都在java.Awt和javax.Swing两个包里。
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属于重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统。其中提供了很多的组件,完全由java实现。增强了移植性,属轻量级控件。
继承关系。
GUI布局
创建图形化界面的步骤:
1.创建Frame窗体
2.对窗体进行基本设置(大小,位置,颜色)
3.定义组件
4.将组件通过窗体的add方法添加到窗体中
5.通过setVisible(true)让窗体可见。
Frame示例:
事件监听机制:
事件:一个状态的改变,或者一个活动的发生。例如单击。
事件源:能够产生事件的对象,例如文本框,按钮。
事件监听器:用来监听事件源。
1.将监听器注册到事件源
2.事件源上有事件发生。
3.产生事件对象传给监听器。
4.监听器用定义好的方法去处理。
窗体事件
编程:按钮事件
编程:鼠标事件:
键盘事件
编程:在文本框输入目录,文本区域内显示文件目录的文件夹和文件。
GUI菜单
菜单栏里添加菜单
菜单里添加菜单或者菜单选项
编程:编写一个简单的记事本软件,具有打开文件和保存文件的功能
让程序变成jar包双击执行
1.先把程序指定一个包,class文件放在包内(javac -d 包存放的目录 源文件名)
2.把包打包成jar包 (jar -cvf jar包名字 包名)
3.这时候程序不能运行,因为生成了很多个class文件,程序不知道哪个是主函数所在的文件。所以需要更改配置信息,设置主函数所在的class文件。方法为:随便创建一个文件,里面输入。Main-Class:(空格)包名.类名(回车)
然后再打包 (jar -cvfm jar包名字.jar 刚才创建的配置文件 包名) 就OK了
JAVA为GUI提供的对象都在java.Awt和javax.Swing两个包里。
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属于重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统。其中提供了很多的组件,完全由java实现。增强了移植性,属轻量级控件。
继承关系。
GUI布局
创建图形化界面的步骤:
1.创建Frame窗体
2.对窗体进行基本设置(大小,位置,颜色)
3.定义组件
4.将组件通过窗体的add方法添加到窗体中
5.通过setVisible(true)让窗体可见。
Frame示例:
import java.awt.*; class FrameDemo { public static void main(String[]args) { Frame f=new Frame("my awt"); f.setSize(500,400);//设置窗口大小 (长,宽) f.setLocation(400,300); 设置窗口位置 (距离左上角的x,距离左上角的y) Button b=new Button("按钮"); f.add(b); f.setVisible(true);//设置窗体可见 } }
事件监听机制:
事件:一个状态的改变,或者一个活动的发生。例如单击。
事件源:能够产生事件的对象,例如文本框,按钮。
事件监听器:用来监听事件源。
1.将监听器注册到事件源
2.事件源上有事件发生。
3.产生事件对象传给监听器。
4.监听器用定义好的方法去处理。
窗体事件
//addWindowListener(WindowListener l) 方法可以添加窗体监听器。 //方法接受的是一个接口,如果想要实现这个接口,则需要覆写它的7个方法,太过麻烦 //该接口有个抽象子类WindowAdapter,只需要继承这个子类,然后覆写自己需要用到的方 //法即可 import java.awt.*; import java.awt.event.*; class AwtDemo { public static void main(String[]args) { Frame f=new Frame("AWT"); f.setSize(500,400); f.setLocation(500,400); 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); } }
编程:按钮事件
import java.awt.*; import java.awt.event.*; class AwtTest { private Frame f; private Button b; AwtTest() { init(); } public void init()//正式开发时用一个方法进行初始化 { f=new Frame("Awt"); b=new Button("退出按钮"); f.setBounds(400,300,600,500); f.setLayout(new FlowLayout()); f.add(b); events(); f.setVisible(true); } public void events()//这个方法里写了所有的事件 { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); b.addActionListener(new ActionListener()//按钮事件 { public void actionPerformed(ActionEvent e) { System.out.println("按钮关闭"); System.exit(0); } } ); } public static void main(String[]args) { new AwtTest(); } }
编程:鼠标事件:
import java.awt.*; import java.awt.event.*; class MouseEventDemo { private Frame f; private Button b; MouseEventDemo() { init(); } public void init() { f=new Frame("Awt"); b=new Button("退出按钮"); f.setBounds(400,300,600,500); f.setLayout(new FlowLayout()); f.add(b); events(); f.setVisible(true); } public void events() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); b.addMouseListener(new MouseAdapter()//添加鼠标监听器 { int count=1; int clickcount=1; int doubleclick=1; public void mouseEntered(MouseEvent e) { System.out.println("鼠标进入组件"+count++); } public void mouseClicked(MouseEvent e) { if (e.getClickCount()==2)//判断鼠标点击的次数 System.out.println("双击"+doubleclick++); else System.out.println("鼠标点击"+clickcount++); } } ); } public static void main(String[]args) { new MouseEventDemo(); } }
键盘事件
import java.awt.*; import java.awt.event.*; class KeyEventDemo { private Frame f; private Button b; private TextField tf;//文本框 KeyEventDemo() { init(); } public void init() { f=new Frame("Awt"); b=new Button("退出按钮"); tf=new TextField(20); f.setBounds(400,300,600,500); f.setLayout(new FlowLayout()); f.add(tf); f.add(b); events(); f.setVisible(true); } public void events() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); b.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.isShiftDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)//判断组合键的方法 System.exit(0); System.out.println(e.getKeyText(e.getKeyCode())+"------"+e.getKeyLocation()); } } ); tf.addKeyListener(new KeyAdapter()//文本框添加键盘监听器,只能输入数字,不能输入字母 { public void keyPressed(KeyEvent e) { if (!((e.getKeyCode()>=KeyEvent.VK_0)&&(e.getKeyCode()<=KeyEvent.VK_9))) { System.out.println(e.getKeyCode()+"是非法的"); e.consume();//销毁对象。当输入的非数字,则销毁,不出现在文本框中 } } } ); } public static void main(String[]args) { new KeyEventDemo(); } }
编程:在文本框输入目录,文本区域内显示文件目录的文件夹和文件。
import java.awt.*; import java.awt.event.*; import java.io.*; class FileAwtDemo { private Frame f; private Button b; private TextField tf; private TextArea ta; private String s; private File fl; private Dialog dl; private Label l; private Button okb; FileAwtDemo() { init(); } public void init() { f=new Frame("FileAwt"); b=new Button("转到"); tf=new TextField(20); ta=new TextArea(); dl=new Dialog(f,true); l=new Label(); okb=new Button("确定"); f.setBounds(400,300,600,500); f.setLayout(new FlowLayout()); dl.setBounds(500,400,250,150); dl.setLayout(new FlowLayout()); dl.add(l); dl.add(okb); f.add(tf); f.add(b); f.add(ta); events(); f.setVisible(true); } public void events() { b.addMouseListener(new MouseAdapter()//按钮事件监听器 { public void mouseClicked(MouseEvent e) { fileToArea(); } } ); f.addWindowListener(new WindowAdapter()//窗体的事件监听器 { public void windowClosing(WindowEvent e) { System.exit(0); } } ); tf.addKeyListener(new KeyAdapter()//文本框的监听器 { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER)//当按回车时和按按钮效果一样 { fileToArea(); } } }); okb.addMouseListener(new MouseAdapter()//对话框的确定按钮事件监听器 { public void mouseClicked(MouseEvent e) { dl.setVisible(false); } }); } public void fileToArea()//遍历文件目录并取出名字 { s=tf.getText(); fl=new File(s); if(fl.exists()&&fl.isDirectory()) { ta.setText(" "); String [] str=fl.list(); for (int i=0;i<str.length;i++) { ta.append(str[i]); ta.append("\r\n"); } } else { l.setText("您输入的"+fl+"是无效路径"); dl.setVisible(true); } } public static void main(String[]args) { new FileAwtDemo(); } }
GUI菜单
菜单栏里添加菜单
菜单里添加菜单或者菜单选项
import java.awt.*; import java.awt.event.*; class MyMenuDemo { private Frame f; private Menu m,m1;//菜单 private MenuBar mb;//菜单栏 private MenuItem mi;//菜单选项 MyMenuDemo() { init(); } public void init() { f=new Frame("my menu"); m=new Menu("文件"); mb=new MenuBar(); mi=new MenuItem("退出"); m1=new Menu("子菜单"); mb.add(m); m.add(m1); m.add(mi); f.setBounds(400,300,600,500); f.setMenuBar(mb); f.setVisible(true); } public static void main(String[]args) { new MyMenuDemo(); } }
编程:编写一个简单的记事本软件,具有打开文件和保存文件的功能
import java.awt.*; import java.awt.event.*; import java.io.*; class MyMenuDemo { private Frame f; private Menu filemenu; private MenuBar mb; private MenuItem openItem,saveItem,closeItem;//三个菜单选项 private FileDialog opendia,savedia;//两个文件对话框用于打开和保存 private TextArea ta;//文本区域 private File file; MyMenuDemo() { init(); } public void init() { f=new Frame("my menu"); filemenu=new Menu("文件"); mb=new MenuBar(); ta=new TextArea(); openItem=new MenuItem("打开"); saveItem=new MenuItem("保存"); closeItem=new MenuItem("退出"); opendia=new FileDialog(f,"打开文件",FileDialog.LOAD);//LOAD是打开文件模式 savedia=new FileDialog(f,"保存文件",FileDialog.SAVE);//SAVE是保存文件的模式 mb.add(filemenu); filemenu.add(openItem); filemenu.add(saveItem); filemenu.add(closeItem); f.setBounds(300,100,700,800); f.setMenuBar(mb); f.add(ta); events(); f.setVisible(true); } public void events() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); openItem.addActionListener(new ActionListener()//打开文件的事件监听器 { public void actionPerformed(ActionEvent e) { ta.setText(""); opendia.setVisible(true); file=new File(opendia.getDirectory(),opendia.getFile());//获取文件的路径和名字 try{ BufferedReader br=new BufferedReader(new FileReader(file)); String line=null; while ((line=br.readLine())!=null) { ta.append(line+"\r\n");//打印到文本区域中 } br.close(); }catch(IOException ex) { System.out.println("打开失败"); } } } ); saveItem.addActionListener(new ActionListener()//保存按钮的事件监听器 { public void actionPerformed(ActionEvent e) { if (file==null)//判断文件是否存在,不存在就创建,否则不创建 { savedia.setVisible(true); file=new File(savedia.getDirectory(),savedia.getFile()); } try{ BufferedWriter bw=new BufferedWriter(new FileWriter(file)); String text=ta.getText(); bw.write(text); bw.close(); }catch(IOException ex) { System.out.println("保存失败"); } } }); closeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); } public static void main(String[]args) { new MyMenuDemo(); } }
让程序变成jar包双击执行
1.先把程序指定一个包,class文件放在包内(javac -d 包存放的目录 源文件名)
2.把包打包成jar包 (jar -cvf jar包名字 包名)
3.这时候程序不能运行,因为生成了很多个class文件,程序不知道哪个是主函数所在的文件。所以需要更改配置信息,设置主函数所在的class文件。方法为:随便创建一个文件,里面输入。Main-Class:(空格)包名.类名(回车)
然后再打包 (jar -cvfm jar包名字.jar 刚才创建的配置文件 包名) 就OK了
相关文章推荐
- Java基础 GUI图形用户界面 布局 事件 简易记事本 双击运行jar
- 黑马程序员:GUI介绍:布局管理器、Frame、事件监听机制、Action事件、鼠标键盘事件、菜单、jar包的双击执行
- 黑马程序员——JAVA基础---GUI---概述,组件,事件监听,生成.jar可执行文件
- 黑马程序员_Java第22天知识总结_创建图形化界面_事件监听机制_双击执行的jar包
- Java基础--Java---IO流------GUI(布局)、Frame、事件监听机制、窗体事件、Action事件、鼠标事件、对话框Dialog、键盘事件、菜单
- day22GUI编程。Frame。事件监听机制。自制记事本。打开保存功能。封装双击打开jar。
- Java基础--Java---IO流------GUI(布局)、Frame、事件监听机制、窗体事件、Action事件、鼠标事件、对话框Dialog、键盘事件、菜单
- Java基础--Java---IO流------GUI(布局)、Frame、事件监听机制、窗体事件、Action事件、鼠标事件、对话框Dialog、键盘事件、菜单
- java基础学习总结——关于Java中事件分发和监听机制实现的代码实例
- Java基础-GUI(概述、布局、Frame、事件监听机制等事件演示)
- (十三)Core Java GUI(图形化界面小程序开发,事件监听机制流程,以及可运行jar包的配置实现,) (109)
- JAVA基础再回首(二十七)——JAVA中的图形化界面、GUI概述、简单的窗体创建、事件监听机制、动作事件、GUI布局、鼠标事件
- Test__GUI__用java编写一个简单的记事本程序,打包成jar双击运行
- Java学习笔记——实现一个简易记事本Notepad的编写
- 2017/12/23Java基础学习——如何通过记事本编写代码,并通过dos界面运行Java源文件
- GUI编程笔记(java)05:GUI事件监听机制原理和举例说明
- java基础学习——Java添加事件监听的四种方法代码实例
- JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
- JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
- **JAVA** GUI图形界面编程-事件监听机制