程序员_Java基础之<十三>图形化界面GUI
2013-04-27 23:06
591 查看
GUI
创建图形化界面:
1.创建frame窗体。
2.对窗体基本设置:比如:大小,位置,布局。
3.定义组件。
4.将组件通过窗体的add方法添加到窗体中。
5.让窗体显示,通过setVisible(true)方法。
事件监听机制的特点:
1.事件源。就是awt包或者swing包中的那些图形界面组件。
2.事件。每一个事件源都有自己特有的对应事件和共性事件。
3.监听器。将可以触发某一个事件的动作(不只一个动作)都已经封装到监听器中。
以上三者,在java中已经定义好,直接获取对象来用就可以。
4.事件处理。这才是我们需要做的。
/*上段程序的优化及按钮的Action事件*/
/*GUI-鼠标事件*/
/*小练习:
文本框输入路径,通过转到按钮,内容显示到文本区域中。
*/
/*GUI-菜单*/
将程序做成可执行文件:jar包双击执行
1.在程序内声明包:如:package mymenu;
2.带包编译(指定包存放的路径):javac -d f:\Source2 MyMenuDemo.java
3.新建文本文件写入jar包的配置清单(指定主类):Main-Class: mymenu.MyMenuDemo
注意:此为固定格式:冒号后加空格,包名.类名 回车
3.将包打成jar包:jar -cvfm my.jar 1.txt mymenu
格式: m是包含指定清单(新建文本文件)。
jar -cvfm jar包名.jar 新建文本名.txt 包名(要压缩的包)
在xp下打开jar文件:
话框上部:工具-文件夹选项-文件类型-找到jar类型(也可新建)-高级-
操作:Open
用于执行的程序:浏览-jdk-bin-javaw.exe,然后在后面加上-jar
在win7下打开jar文件:
1.右击jar包,打开方式->选择默认程序->浏览,选中jre下bin文件中javaw.exe
(比如我的javaw.exe在D:\Program Files\Java\jre6\bin下)。
2、regedit编辑注册表:HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command,
修改数据数值为"D:\Program Files\Java\jdk1.6.0_21\jre\bin\javaw.exe" -jar "%1"(只要在原来的数值下添加-jar即可)
创建图形化界面:
1.创建frame窗体。
2.对窗体基本设置:比如:大小,位置,布局。
3.定义组件。
4.将组件通过窗体的add方法添加到窗体中。
5.让窗体显示,通过setVisible(true)方法。
事件监听机制的特点:
1.事件源。就是awt包或者swing包中的那些图形界面组件。
2.事件。每一个事件源都有自己特有的对应事件和共性事件。
3.监听器。将可以触发某一个事件的动作(不只一个动作)都已经封装到监听器中。
以上三者,在java中已经定义好,直接获取对象来用就可以。
4.事件处理。这才是我们需要做的。
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">import java.awt.*; import java.awt.event.*; 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 MyWin());//添加一个监听器对象到窗体的添加监听器方法。 //通常通过匿名内部类的方法 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e)//接收窗口关闭事件 { sop("我关"); System.exit(0); } public void windowOpened(WindowEvent e)//窗口被打开 { sop("我被打开了"); } public void windowActivated(WindowEvent e)//窗口被前置 { sop("我活了"); } }); f.setVisible(true);//设置是否可见 } /* class MyWin implements WindowListener { //继承此接口需要覆盖7个方法,可是我们只用到了关闭动作。 //其他动作都没有用到 } 因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。 并覆盖了其中的所有方法,那么我们 只要继承自WindowAdapter覆盖我需要的方法即可 */ public static void sop(Object obj) { System.out.println(obj); } } class MyWin extends WindowAdapter//触发器类 { public void windowClosing(WindowEvent e) { System.out.println("window closing"+e.toString()); System.exit(0); } }</span>
/*上段程序的优化及按钮的Action事件*/
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">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)//添加对应事件 { sop("按钮干的"); System.exit(0); } }); } public static void main(String[] args) { new FrameDemo(); } public static void sop(Object obj) { System.out.println(obj); } } </span>
/*GUI-鼠标事件*/
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">import java.awt.*; import java.awt.event.*; class FrameDemo { private Frame f; private Button but; private TextField tf; FrameDemo() { init(); } public void init() { f=new Frame("my frame"); f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); tf=new TextField(10);//初始化带列数 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); } } ); tf.addKeyListener(new KeyAdapter()//只允许文本框添加数字 { public void keyPressed(KeyEvent e) { int code=e.getKeyCode(); if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)) {sop(code+"...是非法数据"); e.consume();//该方法使得:不会用默认的处理方式处理这个事件。 //也就是,原来是让非数字的输入进入到文本框,现在不允许他进入 } } }); but.addActionListener(new ActionListener()//按钮的活动监听 { public void actionPerformed(ActionEvent e) { sop("action ok"); } }); but.addMouseListener(new MouseAdapter()//在按钮上添加鼠标监听 { private int count=1; private int clickCount=1; public void mouseEntered(MouseEvent e) { sop("鼠标进入到该组件"+count++); } public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2) sop("双击动作"+clickCount++); } }); but.addKeyListener(new KeyAdapter(){//键盘事件 public void keyPressed(KeyEvent e) { /* KeyText(e.getKeyCode()):根据键的码获得键的符号。 sop(KeyEvent.getKeyText(e.getKeyCode())+"::"+e.getKeyCode()); if(e.getKeyCode()==KeyEvent.VK_ENTER)//按下回车键退出 System.exit(0); */ //如果control键被按下,再按回车的组合键,打印。 if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER) sop("ctrl+enter is run"); } }); } public static void main(String[] args) { new FrameDemo(); } public static void sop(Object obj) { System.out.println(obj); } } </span>
/*小练习:
文本框输入路径,通过转到按钮,内容显示到文本区域中。
*/
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">import java.awt.*; import java.awt.event.*; import java.io.*; 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);//15行40列 d=new Dialog(f,"提示信息-self",true);//对话框初始化,true模式,不操作对话框就不能操作窗体。 d.setBounds(400,200,240,150); 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); } }); 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(); } } });//回车充当转到的功能 okBut.addActionListener(new ActionListener()//点击对话框里的ok按钮 { public void actionPerformed(ActionEvent e) { d.setVisible(false); } }); 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");//将遍历的文件追加到文本区域 } } // tf.setText(""); else { String info=("你输入的信息"+dirPath+"是错误的,请重新输入"); lab.setText(info); d.setVisible(true); } } public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { new MyWindowDemo(); } }</span>
/*GUI-菜单*/
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">import java.awt.*; import java.awt.event.*; import java.io.*; public class MyMenuDemo { private Frame f; private MenuBar mb;//菜单栏 private Menu m,subMenu;//菜单 private MenuItem closeItem,subItem,openItem,saveItem;//菜单项 private FileDialog openDia,saveDia; private TextArea ta; private File file; MyMenuDemo() { init(); } public void init() { f=new Frame("my windwo"); f.setBounds(300,100,650,600); //f.setLayout(new FlowLayout());//不设置布局,默认为边界布局,让文本区域随着窗口走 mb=new MenuBar(); ta=new TextArea(); m=new Menu("文件"); subItem=new MenuItem("子条目"); openItem=new MenuItem("打开"); saveItem=new MenuItem("保存"); subMenu=new Menu("子菜单"); closeItem=new MenuItem("退出"); openDia=new FileDialog(f,"我要打开",FileDialog.LOAD); saveDia=new FileDialog(f,"我要保存",FileDialog.SAVE); f.setMenuBar(mb);//注意此处是set不是add mb.add(m); m.add(subMenu); subMenu.add(subItem); m.add(openItem); m.add(saveItem); m.add(closeItem); f.add(ta); myEvent(); f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); openItem.addActionListener(new ActionListener()//打开菜单项 { public void actionPerformed(ActionEvent e) { openDia.setVisible(true); //怎么知道你选的哪个文件?去dialog类找方法。 String dirPath=openDia.getDirectory(); String fileName=openDia.getFile(); sop(dirPath+".."+fileName); if(dirPath==null||fileName==null) return; ta.setText("");//当选取有效文件时,清空文本区域 //封装对象 File file=new File(dirPath,fileName);//据路径名和名字创建一个新 File 实例。 try { BufferedReader 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("读取失败"); } } }); 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); } //如果文件已经存在,直接将数据 写入到文件即可 try { BufferedWriter bufw=new BufferedWriter(new FileWriter(file)); String text=ta.getText(); bufw.write(text); bufw.close(); } catch (IOException ey) { throw new RuntimeException(""); } } }); closeItem.addActionListener(new ActionListener()//关闭菜单项 { public void actionPerformed(ActionEvent e) { System.exit(0); } }); } public static void main(String[] args) { new MyMenuDemo(); } public static void sop(Object obj) { System.out.println(obj); } }</span>
将程序做成可执行文件:jar包双击执行
1.在程序内声明包:如:package mymenu;
2.带包编译(指定包存放的路径):javac -d f:\Source2 MyMenuDemo.java
3.新建文本文件写入jar包的配置清单(指定主类):Main-Class: mymenu.MyMenuDemo
注意:此为固定格式:冒号后加空格,包名.类名 回车
3.将包打成jar包:jar -cvfm my.jar 1.txt mymenu
格式: m是包含指定清单(新建文本文件)。
jar -cvfm jar包名.jar 新建文本名.txt 包名(要压缩的包)
在xp下打开jar文件:
话框上部:工具-文件夹选项-文件类型-找到jar类型(也可新建)-高级-
操作:Open
用于执行的程序:浏览-jdk-bin-javaw.exe,然后在后面加上-jar
在win7下打开jar文件:
1.右击jar包,打开方式->选择默认程序->浏览,选中jre下bin文件中javaw.exe
(比如我的javaw.exe在D:\Program Files\Java\jre6\bin下)。
2、regedit编辑注册表:HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command,
修改数据数值为"D:\Program Files\Java\jdk1.6.0_21\jre\bin\javaw.exe" -jar "%1"(只要在原来的数值下添加-jar即可)
相关文章推荐
- Java基础<十三>_GUI
- 程序员_Java基础之<六>-String
- 黑马程序员 Java基础<十一>---> GUI(图形用户界面)
- Java基础<十三>---> 集合-工具类
- 程序员_Java基础之<四>-异常
- 程序员_Java基础之<五>-线程
- Java基础<十七>--->GUI(图形用户界面)
- 程序员_Java基础<二>-面向对象中
- 程序员_Java基础之<十二>-IO流<3>其他流对象、编码
- 程序员_Java基础之<八>-Map集合、集合工具类
- 程序员_Java基础之<九>-泛型、其他对象
- 程序员_Java基础之<七>-集合框架
- 程序员_Java基础之<十>-IO流<1>
- 程序员_Java基础之<十一>-IO流<2>File流
- 程序员_Java基础<一>-面向对象上
- 程序员_Java基础<三>-面向对象下
- 黑马程序员——Java基础--GUI图形化界面
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<正则表达式>(三十一)
- Java基础<九>---> 多线程
- Java 基础一些代码练习笔记( GenericFoo<T> 泛型2)