黑马程序员-Java学习13-GUI
2014-12-25 16:40
225 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
1.概述
Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。
Container常用子类:Window Panel(面板,不能单独存在。)
Window常用子类:Frame Dialog
2.布局管理
1)、布局:容器中的组件排列方式
2)、常见的布局管理器:
1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。
3)GridLayout:网格式布局管理器,规则的矩阵
4)CardLayout:卡片式布局管理器,即选项卡
5)GridBayLayout:网格包布局管理器,非规则矩阵
3)、如果存在多种布局方式,如何创建窗体界面呢?步骤:
1)先将窗体Frame进行大区域的划分,设置其布局管理器,加入面板Panel
2)将组件加入Panel,设置面板的布局管理器。
3、简单的窗体创建过程
1)、创建Frame窗体:
Frame f = new Frame("my Frame");//可设置标题,即窗体名字
2)、对窗体进行基本设置:如大小,位置,布局等:
f.setSize(int wight,int hight);//窗体大小设置
f.setLocation(int x,int y);//窗体显示位置设置,横纵坐标
f.setBounds(int x,int y,int wight,int hight),也可以直接用这个方法对大小和位置设置
f.setLayout(Layout layout),参数为指定的布局管理器,如FlowLayout
3)、定义组件:
如Button b = new Button(“my Button”);//可设置组件的名称
4)、将组件通过窗体的add方法添加到窗体中:
f.add(b);//将按钮组件添加进窗体
5、让窗体显示:
f.setVisible(boolean b);//通过设置参数是true还是false是否显示窗体
4.事件监听机制的特点:
1,事件源。
2,事件。
3,监听器。
4,事件处理。
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理。
5.对话框:Dialog
何时需要产生对话框:此对象时需要在调用时,才创建对象。如:当在误操作的时候,就需要出现提示错误信息的对话框,此时才创建的这个对象。
示例:
对列出指定目录内容示例的功能增强。
6、菜单:Menu
1)、菜单继承关系
2)、说明
1)Menu:菜单,继承MenuItem;有右三角的图标存在,可添加Menu和MenuItem
2)MenuBar:菜单栏,可添加菜单和菜单条目。一般先创建菜单栏,再创建菜单。
3)MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项。
4)菜单的事件处理和组件一样,可以对类型为MenuItem和Menu的对象这个事件源添加活动监听ActionListener,并进行相关的事件处理。
5)通过setMenuBar()方法,将菜单添加到Frame中。
练习:打开-保存
7、jar包双击执行
既然是图形化界面,就需要通过图形化界面的形式运行程序,而不是是用Dos命令行执行,那么如何通过双击程序就执行程序呢?这就需要将程序的class文件打包。
步骤如下:
1、首先要在java文件中导入一个包,没有则需创建一个包,如package mymenu;
2、生成包:通过编译javac -d c:\myclass MyMenu.java,此时则在c盘下的myclass文件夹下生成了所有的.class文件
3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:“Main-Class: mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。
4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令
5、此时双击即可执行。
说明:
1)在固定格式中:
a、如果无空格:在编译的时候,就会报IO异常,提示无效的头字段,即invalidheader field。这说明1.txt在被IO流读取。
b、如果无回车:在列表清单.MF中不会加入相应的加载主类的信息,也就是说配置清单的属性主类名称不会加载进清单中,也就不会执行。
2)jar文件必须在系统中注册,才能运行。注册方法如下:
A.对于XP系统:
a.打开任意对话框,在菜单栏点击工具按钮,选择文件夹选项
b.选择新建--->扩展名,将扩展名设置为jar,确定
c.选择高级,可更改图标,然后点击新建,命名为open,
d.在用于可执行应用程序中,点浏览,将jdk下的bin的整个文件路径添加进来,并在路径后添加-jar即可。
B.对于win7系统:
a.改变打开方式:右击.jar文件,点击打开方式,选择默认程序为jdk下bin中的javaw.exe应用程序。
b.修改关联程序的注册表:打开注册表(win+r),找到注册表路径\HKEY_CLASSES_ROOT\Aplications\javaw.exe\shell\open\command下的字符串值,右击点修改,在原路径的中添加-jar,如:"C:\ProgramFiles\Java\jre6\bin\javaw.exe"
-jar "%1",注意-jar两边要有空格,保存。
c.双击即可执行jar程序,如果仍不能执行,则需下载最新版的jdk。
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
1.概述
Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。
Container常用子类:Window Panel(面板,不能单独存在。)
Window常用子类:Frame Dialog
2.布局管理
1)、布局:容器中的组件排列方式
2)、常见的布局管理器:
1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。
3)GridLayout:网格式布局管理器,规则的矩阵
4)CardLayout:卡片式布局管理器,即选项卡
5)GridBayLayout:网格包布局管理器,非规则矩阵
3)、如果存在多种布局方式,如何创建窗体界面呢?步骤:
1)先将窗体Frame进行大区域的划分,设置其布局管理器,加入面板Panel
2)将组件加入Panel,设置面板的布局管理器。
3、简单的窗体创建过程
1)、创建Frame窗体:
Frame f = new Frame("my Frame");//可设置标题,即窗体名字
2)、对窗体进行基本设置:如大小,位置,布局等:
f.setSize(int wight,int hight);//窗体大小设置
f.setLocation(int x,int y);//窗体显示位置设置,横纵坐标
f.setBounds(int x,int y,int wight,int hight),也可以直接用这个方法对大小和位置设置
f.setLayout(Layout layout),参数为指定的布局管理器,如FlowLayout
3)、定义组件:
如Button b = new Button(“my Button”);//可设置组件的名称
4)、将组件通过窗体的add方法添加到窗体中:
f.add(b);//将按钮组件添加进窗体
5、让窗体显示:
f.setVisible(boolean b);//通过设置参数是true还是false是否显示窗体
4.事件监听机制的特点:
1,事件源。
2,事件。
3,监听器。
4,事件处理。
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理。
/*建立一上类似QQ登入的界面*/ package nuddles.j2seDemo; import java.awt.*; import java.awt.event.*; class FrameDemo{ // 创建工具类 private Frame frame; private Button button; private TextField tf; FrameDemo(){ init(); } public void init(){ // 初始化方法 frame = new Frame("my frame"); button = new Button("my button"); tf = new TextField(20); frame.setBounds(300,100,600,500); frame.setLayout(new FlowLayout()); frame.add(tf); frame.add(button); myEvent(); // 调用事件监听方法 frame.setVisible(true); } private void myEvent(){ // 窗口关闭事件 frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); button.addActionListener(new ActionListener(){ //按钮事件 int count = 0; public void actionPerformed(ActionEvent e){ count++; System.out.println("button clicked"+count); if (count>=5) { System.exit(0); } } }); tf.addKeyListener(new KeyAdapter(){ // 键盘事件 public void keyPressed(KeyEvent ke){ int code = ke.getKeyCode(); System.out.println("haha"); if (code<KeyEvent.VK_0||code>KeyEvent.VK_9) { ke.consume(); System.out.println("these are not numbers"); } } }); button.addMouseListener(new MouseAdapter(){ // 鼠标事件 public void mouseClicked(MouseEvent e){ if (e.getClickCount()==2) { System.exit(0); } } }); button.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ int code = e.getKeyCode(); if (e.isControlDown()&&code==KeyEvent.VK_ENTER) { System.exit(0); } } }); } public static void main(String[] args) { new FrameDemo(); } }
5.对话框:Dialog
何时需要产生对话框:此对象时需要在调用时,才创建对象。如:当在误操作的时候,就需要出现提示错误信息的对话框,此时才创建的这个对象。
示例:
对列出指定目录内容示例的功能增强。
import java.io.*; import java.awt.*; import java.awt.event.*; class SearchBox { // 定义工具类 private Frame f; private TextField tf; private TextArea ta; private Button b; private Dialog dia; private Label la; private Button ok; SearchBox(){ init(); } private void init(){ // 窗口初始化 f = new Frame("my frame"); tf= new TextField(30); ta = new TextArea(30,40); b = new Button("转到"); f.setBounds(300,300,500,500); f.setLayout(new FlowLayout()); f.add(tf); f.add(b); f.add(ta); dia = new Dialog(f,"notice",true); dia.setBounds(300,300,400,400); dia.setLayout(new FlowLayout()); la = new Label("nuddles haha"); ok = new Button("ok"); dia.add(la); dia.add(ok); 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_ENTER) { showDir(); } } }); b.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ showDir(); } }); ok.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ac){ dia.setVisible(false); } }); } private void showDir(){ // 显示目录功能 ta.setText(""); String s = tf.getText(); File file =new File(s); if (file.exists()&&file.isDirectory()) { String[] str = file.list(); for(String ss:str){ ta.append(ss+"\n\r"); } }else { dia.setVisible(true); tf.setText(""); } } public static void main(String[] args) { new SearchBox(); } }
6、菜单:Menu
1)、菜单继承关系
2)、说明
1)Menu:菜单,继承MenuItem;有右三角的图标存在,可添加Menu和MenuItem
2)MenuBar:菜单栏,可添加菜单和菜单条目。一般先创建菜单栏,再创建菜单。
3)MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项。
4)菜单的事件处理和组件一样,可以对类型为MenuItem和Menu的对象这个事件源添加活动监听ActionListener,并进行相关的事件处理。
5)通过setMenuBar()方法,将菜单添加到Frame中。
练习:打开-保存
import java.io.*; import java.awt.*; import java.awt.event.*; public class MyMenuTest { // 定义工具类 private Frame f; private MenuBar mb; private Menu file; private MenuItem open,save,quit; private TextArea ta; private FileDialog openDia,saveDia; private File file1; MyMenuTest(){ init(); } private void init(){ // 窗口初始化 f = new Frame("myFrame"); f.setBounds(300,300,400,400); // f.setLayout(new FlowLayout()); ta = new TextArea(); mb = new MenuBar(); file= new Menu("file"); open = new MenuItem("open"); save = new MenuItem("save"); quit = new MenuItem("quit"); file.add(open); file.add(save); file.add(quit); mb.add(file); f.setMenuBar(mb); f.add(ta); openDia = new FileDialog(f,"i want to open",FileDialog.LOAD); saveDia = new FileDialog(f,"i want to save",FileDialog.SAVE); myEvent(); f.setVisible(true); } public void myEvent(){ // 各功能模块 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); open.addActionListener(new ActionListener(){ // 打开功能 public void actionPerformed(ActionEvent e){ openDia.setVisible(true); String dir = openDia.getDirectory(); String fileName = openDia.getFile(); if (dir == null||fileName == null) { return; } ta.setText(""); file1 = new File(dir,fileName); try{ BufferedReader br = new BufferedReader(new FileReader(file1)); String line = null; while ((line = br.readLine()) != null) { ta.append(line+"\r\n"); } br.close(); }catch(IOException er){ throw new RuntimeException("open error"); } } }); save.addActionListener(new ActionListener(){ // 关闭功能 public void actionPerformed(ActionEvent e){ if(file1 == null){ saveDia.setVisible(true); String dir = saveDia.getDirectory(); String fileName = saveDia.getFile(); if (dir == null||fileName == null) { return;} file1 = new File(dir,fileName); } try{ BufferedWriter bw = new BufferedWriter(new FileWriter(file1)); String s1 = ta.getText(); bw.write(s1); bw.close(); }catch(IOException er){ throw new RuntimeException("save error"); } } }); quit.addActionListener(new ActionListener(){ // 退出功能 public void actionPerformed(ActionEvent e){ System.exit(0); } }); } public static void main(String[] args) { new MyMenuTest(); } }
7、jar包双击执行
既然是图形化界面,就需要通过图形化界面的形式运行程序,而不是是用Dos命令行执行,那么如何通过双击程序就执行程序呢?这就需要将程序的class文件打包。
步骤如下:
1、首先要在java文件中导入一个包,没有则需创建一个包,如package mymenu;
2、生成包:通过编译javac -d c:\myclass MyMenu.java,此时则在c盘下的myclass文件夹下生成了所有的.class文件
3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:“Main-Class: mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。
4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令
5、此时双击即可执行。
说明:
1)在固定格式中:
a、如果无空格:在编译的时候,就会报IO异常,提示无效的头字段,即invalidheader field。这说明1.txt在被IO流读取。
b、如果无回车:在列表清单.MF中不会加入相应的加载主类的信息,也就是说配置清单的属性主类名称不会加载进清单中,也就不会执行。
2)jar文件必须在系统中注册,才能运行。注册方法如下:
A.对于XP系统:
a.打开任意对话框,在菜单栏点击工具按钮,选择文件夹选项
b.选择新建--->扩展名,将扩展名设置为jar,确定
c.选择高级,可更改图标,然后点击新建,命名为open,
d.在用于可执行应用程序中,点浏览,将jdk下的bin的整个文件路径添加进来,并在路径后添加-jar即可。
B.对于win7系统:
a.改变打开方式:右击.jar文件,点击打开方式,选择默认程序为jdk下bin中的javaw.exe应用程序。
b.修改关联程序的注册表:打开注册表(win+r),找到注册表路径\HKEY_CLASSES_ROOT\Aplications\javaw.exe\shell\open\command下的字符串值,右击点修改,在原路径的中添加-jar,如:"C:\ProgramFiles\Java\jre6\bin\javaw.exe"
-jar "%1",注意-jar两边要有空格,保存。
c.双击即可执行jar程序,如果仍不能执行,则需下载最新版的jdk。
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
相关文章推荐
- 黑马程序员——java学习13(毕22)——GUI
- 黑马程序员_Java学习日记18_GUI
- 黑马程序员学习log第七篇基础知识:JAVA的面向对象之GUI总结
- 黑马程序员 java学习笔记——GUI
- 黑马程序员------Java基础学习------用户图形界面GUI
- 黑马程序员 【】java学习之路——GUI开始简析三
- 黑马程序员_JAVA学习日记_JAVA中图形化界面GUI编程
- 黑马程序员--Java学习13--抽象与接口
- 黑马程序员之java学习笔记13
- 黑马程序员--GUI界面编程--java学习日记9(基础知识)
- 黑马程序员—java基础学习--GUI( 图形用户界面 )
- 黑马程序员——学习笔记13.Java正则表达式
- 黑马程序员—13—java基础:有关集合类的学习笔记和心得体会
- 黑马程序员 【】java学习之路——GUI开始简析
- 黑马程序员_Java学习日记13_IO流2
- 黑马程序员---java学习笔记之GUI
- 黑马程序员_JAVA学习笔记13
- 黑马程序员——Java学习笔记之⑥——“图形界面GUI”
- 黑马程序员 java学习笔记 Day6:GUI
- 黑马程序员 【】java学习之路——GUI开始简析二