布局管理器
容器中的组件排放方式,就是布局
常见的布局管理器:
****************************************************
1.FlowLayout(流式布局管理器,构造方法可指定对齐方式、水平垂直间距)
特点:从左到右的顺序排列,默认居中。
如图所示:
****************************************************
2.Borderlayout(边界布局管理器)
特点:按照东南西北中的顺序排列, Frame默认的布局管理器。
其中每个部分只可添加一个组件,若添加多个组件,则最后添加的组件会覆盖前面的。
如图所示:
****************************************************
3.GridLayout(网格布局管理器,构造方法可指定水平垂直间距)
特点:规则的矩阵 ,系统自带的计算器用的就是这个布局。
如图所示:
****************************************************
4.CardLayout(卡片布局管理器)
特点:选项卡
****************************************************
5.GridBagLayout(网格包布局管理器,又称坐标式布局(最牛逼最灵活的布局方式。)
特点:非规则的矩阵,是GridLayout的变种,一个组件可以存放在多个格子之中。
通过坐标确定组件位置。
****************************************************
6.混合式布局
特点:先进行面板布局管理器
创建图形化界面思路:
1.创建frame窗体;
2.对窗体进行基本设置;
比如大小、位置、布局
3.定义组件;
4.将组件通过add方法添加到窗体中;
5.让窗体显示,通过setVisible(ture)。
------------------------------
新建一个class类,名称为:studyframe
功能实现如下几点:
1.建立一个窗口;
2.窗口有标题;
3.窗口大小设置;
4.窗口位置设置;
5.窗口可见。
代码如下:
import java.awt.Frame; class studyframe { public static void main(String[] args) { Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。
f.setTitle("窗口——by星云");//设置窗口标题内容 f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。 } }
注意:(由于本篇还没有讲到事件监听器,所以本篇中窗体是无法直接关闭的。
想要关闭必须通过进程管理器结束进程方式关掉。)
运行效果如下:
上面代码也可以这么写:
import java.awt.Frame; class studyframe { public static void main(String[] args) { Frame f = new Frame("窗口——by星云");// 构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。 } }
******************************
功能实现如下几点:
1.建立一个窗口;
2.窗口有标题;
3.窗口大小设置;
4.窗口位置设置;
5.窗口可见。
6.添加一个带有文字标签的按钮;
import java.awt.Button; import java.awt.Frame; class studyframe { public static void main(String[] args) { Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。
f.setTitle("窗口——by星云");//设置窗口标题内容 f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。
Button b=new Button("我是一个按钮");//在窗口中添加一个按钮; f.add(b);//将按钮添加到窗口内; } }
运行效果如下:
注意:详见Borderlayout(边界布局管理器)
******************************
上面这样肯定不好看,我们对其设置下布局方式来进行优化下。
功能实现如下几点:
1.建立一个窗口;
2.窗口有标题;
3.窗口大小设置;
4.窗口位置设置;
5.窗口可见。
6.添加一个带有文字标签的按钮;
7.窗体设置布局方式。
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; class studyframe { public static void main(String[] args) { Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。 f.setTitle("窗口——by星云");//设置窗口标题内容 f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。 f.setLayout(new FlowLayout());//设置窗体布局为流式布局。 Button b=new Button("我是一个按钮");//在窗口中添加一个按钮; f.add(b);//将按钮添加到窗口内 } }
运行效果如下:
上面代码也可以这么写,
import java.awt.*; class studyframe { public static void main(String[] args) { Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。 f.setTitle("窗口——by星云");//设置窗口标题内容 f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。 f.setLayout(new FlowLayout());//设置窗体布局为流式布局。 Button b=new Button("我是一个按钮");//在窗口中添加一个按钮; f.add(b);//将按钮添加到窗口内 } }
参考文献:
Frame
是带有标题和边框的顶层窗口。
Window
对象是一个没有边界和菜单栏的顶层窗口。窗口的默认布局是 BorderLayout
。
构造窗口时,它必须拥有窗体、对话框或其他作为其所有者定义的窗口。
此类创建一个标签按钮。
***********************************************
功能实现如下几点:
1.建立一个窗口;
2.窗口有标题;
3.窗口大小设置;
4.窗口位置设置;
5.窗口可见。
6.添加一个带有文字标签的按钮;
7.窗体设置布局方式。
8.为窗口关闭事件监听器,实现关闭窗口功能。
*****************************************************************************
我们要明确:
1.窗体是一个事件源;
2.在事件源上添加监听器并加上处理事件方法即可。
代码如下:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class studyframe { public static void main(String[] args) { Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。 f.setTitle("窗口——by星云");//设置窗口标题内容 f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。 f.setLayout(new FlowLayout());//设置窗体布局为流式布局。 f.addWindowListener(new MyWin());//在窗体事件源上添加监听器。
Button b=new Button("我是一个按钮");//在窗口中添加一个按钮; f.add(b);//将按钮添加到窗口内 } } /*如果用这种方法,就必须把这七个方法全部重写。 class MyWin implements WindowListener { 覆盖七个方法。可以我只用到了关闭的动作。 其他方法都没有用到,如果用这种方法,就必须把这七个方法全部重写。 } 因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。 并覆盖了其中的所有方法。那么我只要继承自WindowAdapter覆盖我需要的方法即可。 */
//创建窗口监听器方法类继承WindowAdapter中的方法。 //下面是个窗口关闭监听器 class MyWin extends WindowAdapter{ public void windowClosing(WindowEvent e) { System.exit(0);//关闭窗口处理关闭动作监听事件 } }
注意:现在点击X就可以关闭窗口了。
运行代码:
上面代码也可以这样写:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class studyframe { public static void main(String[] args) { Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。 f.setTitle("窗口——by星云");//设置窗口标题内容 f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。 f.setLayout(new FlowLayout());//设置窗体布局为流式布局。 //在窗体事件源上添加带有处理事件的监听器。 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0);//关闭窗口处理关闭动作监听事件 } }); Button b=new Button("我是一个按钮");//在窗口中添加一个按钮; f.add(b);//将按钮添加到窗口内 } }
************************************************************
参考文献:
功能:单击一个按钮实现关闭窗口:
import java.awt.*; import java.awt.event.*; public class StudyAction { // 定义该图形所需的组件的引用 private Frame f; private Button but; StudyAction() { init(); } // 对图形用户界面初始化 public void init() { f = new Frame("窗口——by星云"); // 对Frame进行基本设置。 /* * f.setBounds(300, 100, 600, 500); 原型:void setBounds(int x, int y, int * width, int height)移动组件并调整其大小 这一条语句等价于 f.setLocation(300, * 100);//窗口位置水平300,垂直方向200 f.setSize(600, 500);//设置窗口大小,宽度600,高度500 */ f.setBounds(300, 100, 600, 500); // 设置窗口位置和大小 f.setLayout(new FlowLayout());// 默认边界布局方式重置成流式布局 but = new Button("点击我将关闭窗口"); // 将组件添加到frame中 f.add(but); // 加载一下窗体上的事件 dealwithEvent(); // 显示窗体 f.setVisible(true); } private void dealwithEvent() { f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); /*让按钮具备退出程序的功能 按钮就是事件源 * 那么选择那个监听器呢? * 通过关闭窗体示例了解到想要知道哪个组件具备什么样的特监听器 * 需要查看该组件对象的功能。*/ but.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); } public static void main(String args[]) { new StudyAction(); } }
运行截图:
参考文献:
鼠标事件:
功能:
1.基本窗体功能实现
2.鼠标移动监听,当鼠标移动到按钮上时,触发打印事件。
3.按钮活动监听,当按钮活动时,触发打印事件。
4.按钮被单击时触发打印事件。
源码如下:
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Mouse_events { // 定义该图形所需的组件的引用 private Frame f; private Button but; Mouse_events() { init(); } // 对图形用户界面初始化 public void init() { f = new Frame("窗口——by星云"); f.setBounds(300, 100, 600, 500); // 设置窗口位置和大小 f.setLayout(new FlowLayout());// 默认边界布局方式重置成流式布局 but = new Button("我是按钮"); f.add(but); dealwithEvent(); f.setVisible(true); } //事件监听器以及处理事件 private void dealwithEvent() { //窗体关闭监听 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); //按钮活动监听器以及处理事件 but.addActionListener(new ActionListener() { private int actioncount=1; public void actionPerformed(ActionEvent e) { System.out.println("按钮被活动"+actioncount+++"次"); } }); //鼠标进入按钮监听触发事件以及鼠标被双击监听触发事件 but.addMouseListener(new MouseAdapter(){ private int count=1; private int clickCount=1; public void mouseEntered(MouseEvent e) { System.out.println("鼠标进入到该组件"+count+++"次"); } public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2) System.out.println("双击被执行"+clickCount+++"次"); } }); } public static void main(String[] args) { new Mouse_events(); } }
运行截图:
参考文献:
程序使用说明:
1.本程序由于是java代码编写,所以运行需安装jdk并配置好环境变量。
2. 复制java代码到记事本内,另存为Keyboard_events.java;
3.复制批处理代码到记事本内,另存为运行.bat。
4.双击运行.bat批处理即可执行,当前窗体必须为软件界面才能查询。
批处理代码:
@echo off javac Keyboard_events.java java Keyboard_events @pause del *.class
Java代码:
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Keyboard_events { // 定义该图形所需的组件的引用 private Frame f; private Button but; Keyboard_events() { init(); } // 对图形用户界面初始化 public void init() { f = new Frame("键盘码查询器——by星云"); f.setBounds(300, 100, 600, 500); // 设置窗口位置和大小 f.setLayout(new FlowLayout());// 默认边界布局方式重置成流式布局 but = new Button("ESC或者ctrl+enter退出程序!");// 新建一个按钮 f.add(but);// 将按钮添加到窗体上。 dealwithEvent();// 加载事件处理 f.setVisible(true);// 设置窗体可见 } // 事件监听器以及处理事件 private void dealwithEvent() { // 窗体关闭监听 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); // 键盘监听 but.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //如果按下ESC或者按下CTRL+enter退出程序 if ((e.getKeyCode() == KeyEvent.VK_ESCAPE) || (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) ) { System.out.println(KeyEvent.getKeyText(KeyEvent.VK_ESCAPE)+ "键盘码为:" + e.getKeyCode()); System.exit(0); } else { System.out.println(KeyEvent.getKeyText(e.getKeyCode())+ "键盘码为:" + e.getKeyCode()); } } }); } public static void main(String[] args) { new Keyboard_events(); } }
运行截图:
代码如下:
/*列出指定目录内容*/ import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; class MyWindowDemo { private Frame f; private TextField tf; private Button but; private TextArea ta; MyWindowDemo() { init(); } public void init() { f = new Frame("by 星云");//创建窗体对象 f.setBounds(300, 100, 600, 500);//设置窗体位置和大小 f.setLayout(new FlowLayout());//设置窗体布局为流式布局 tf = new TextField(60);//创建单行文本对象60长度大小字符 but = new Button("转到");//创建按钮对象 ta = new TextArea(25, 70);//创建多行文本对象25行,70列 f.add(tf);//单行文本添加到窗体上 f.add(but);//按钮添加到窗体上 f.add(ta);//多行文本添加到窗体上 myEvent();//加载事件处理 f.setVisible(true);//设置窗体可见 } private void myEvent() { //按钮事件监听器 but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String dirPath=tf.getText();//获取单行文本内容保存到字符串dirPath中 File dir=new File(dirPath);//将字符串dirPath封装成文件 //如果文件存在,而且是个目录执行下列操作 if(dir.exists() &&dir.isDirectory()) { ta.setText(null);//没打开一个目录前清空多行文本内容 String[] names=dir.list();//文件目录列表存放到字符数组中 for(String name :names) { ta.append(name+"\r\n");//追加文本内容并换行 } } } }); //窗体关闭监听器 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args){ new MyWindowDemo(); } }
程序截图:
在上节基础上添加对话框显示错误信息。
代码如下:
/*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体。*/ /*练习-列出指定目录内容*/ import java.awt.Button; import java.awt.Dialog; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; 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("by 星云");// 创建窗体对象 f.setBounds(300, 100, 600, 500);// 设置窗体位置和大小 f.setLayout(new FlowLayout());// 设置窗体布局为流式布局 tf = new TextField(60);// 创建单行文本对象60长度大小字符 but = new Button("转到");// 创建按钮对象 ta = new TextArea(25, 70);// 创建多行文本对象25行,70列 d = new Dialog(f, "提示信息-self", true);//弹出的对话框 d.setBounds(400, 200, 350, 150);//设置弹出对话框的位置和大小 d.setLayout(new FlowLayout());//设置弹出对话框的布局为流式布局 lab = new Label();//创建lab标签填写提示内容 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() { // 确定按钮监听器 okBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { d.setVisible(false); } }); //文本框兼容器 tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER)//如果按下回车键执行showDir()功能函数 showDir();//调用功能函数 } }); // 对话框监听器 d.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { d.setVisible(false);//设置对话框不可见 } }); // 按钮事件监听器 but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showDir(); } }); // 窗体关闭监听器 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } //showDir()功能函数 private void showDir(){ String dirPath = tf.getText();// 获取单行文本内容保存到字符串dirPath中 File dir = new File(dirPath);// 将字符串dirPath封装成文件 // 如果文件存在,而且是个目录执行下列操作 if (dir.exists() && dir.isDirectory()) { ta.setText(null);// 没打开一个目录前清空多行文本内容 String[] names = dir.list();// 文件目录列表存放到字符数组中 for (String name : names) { ta.append(name + "\r\n");// 追加文本内容并换行 } } else { String info = "您输入的路径" + dirPath + "是错误的,请重新输入!"; lab.setText(info);//显示文本错误提示信息 d.setVisible(true);//设置对话框可见。 } } public static void main(String[] args) { new MyWindowDemo(); } }
功能:添加菜单组件
知识总结:
代码如下:
import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class MyMenuDemo { private Frame f;//定义窗体 private MenuBar mb;//定义菜单栏 private Menu m,subMenu;//定义"文件"和"子菜单"菜单 private MenuItem closeItem,subItem;//定义条目“退出”和“子条目”菜单项 MyMenuDemo() { init(); } /*图形用户界面组件初始化*/ public void init() { f=new Frame("my window");//创建窗体对象 f.setBounds(300,100,500,600);//设置窗体位置和大小 f.setLayout(new FlowLayout());//设置窗体布局为流式布局 mb=new MenuBar();//创建菜单栏 m=new Menu("文件");//创建“文件”菜单 subMenu = new Menu("子菜单");//创建“子菜单”菜单 subItem=new MenuItem("子条目");//创建“子条目”菜单项 closeItem=new MenuItem("退出");//创建“退出"菜单项 m.add(subMenu);//将“子菜单”菜单添加到“文件”菜单上 m.add(closeItem);//将“退出”菜单项添加到“文件”菜单上 subMenu.add(subItem);//"子条目"菜单项添加到"子菜单"菜单项中 mb.add(m);//将文件添加到菜单栏上 f.setMenuBar(mb);//将此窗体的菜单栏设置为指定的菜单栏。 myEvent();//加载事件处理 f.setVisible(true);//设置窗体可见 } private void myEvent() { // 窗体关闭监听 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //退出菜单项监听 closeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); } public static void main(String[] args) { new MyMenuDemo(); } }
程序截图:
功能:java图形用户界面开发,练习打开保存文件
代码如下:
import java.awt.FileDialog; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; class MyMenuDemo { private Frame f;// 定义窗体 private MenuBar bar;// 定义菜单栏 private TextArea ta; private Menu fileMenu;// 定义"文件"和"子菜单"菜单 private MenuItem openItem, saveItem, closeItem;// 定义条目“退出”和“子条目”菜单项 private FileDialog openDia, saveDia;// 定义“打开、保存”对话框 private File file;//定义文件 MyMenuDemo() { init(); } /* 图形用户界面组件初始化 */ public void init() { f = new Frame("my window");// 创建窗体对象 f.setBounds(300, 100, 650, 600);// 设置窗体位置和大小 bar = new MenuBar();// 创建菜单栏 ta = new TextArea();// 创建文本域 fileMenu = new Menu("文件");// 创建“文件”菜单 openItem = new MenuItem("打开");// 创建“打开"菜单项 saveItem = new MenuItem("保存");// 创建“保存"菜单项 closeItem = new MenuItem("退出");// 创建“退出"菜单项 fileMenu.add(openItem);// 将“打开”菜单项添加到“文件”菜单上 fileMenu.add(saveItem);// 将“保存”菜单项添加到“文件”菜单上 fileMenu.add(closeItem);// 将“退出”菜单项添加到“文件”菜单上 bar.add(fileMenu);// 将文件添加到菜单栏上 f.setMenuBar(bar);// 将此窗体的菜单栏设置为指定的菜单栏。 openDia = new FileDialog(f, "打开", FileDialog.LOAD); saveDia = new FileDialog(f, "保存", FileDialog.SAVE); f.add(ta);// 将文本域添加到窗体内 myEvent();// 加载事件处理 f.setVisible(true);// 设置窗体可见 } private void myEvent() { // 打开菜单项监听 openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openDia.setVisible(true);//显示打开文件对话框 String dirpath = openDia.getDirectory();//获取打开文件路径并保存到字符串中。 String fileName = openDia.getFile();//获取打开文件名称并保存到字符串中 if (dirpath == null || fileName == null)//判断路径和文件是否为空 return; else ta.setText(null);//文件不为空,清空原来文件内容。 file = new File(dirpath, fileName);//创建新的路径和名称 try { BufferedReader bufr = new BufferedReader(new FileReader(file));//尝试从文件中读东西 String line = null;//变量字符串初始化为空 while ((line = bufr.readLine()) != null) { ta.append(line + "\r\n");//显示每一行内容 } bufr.close();//关闭文件 } catch (FileNotFoundException e1) { // 抛出文件路径找不到异常 e1.printStackTrace(); } catch (IOException e1) { // 抛出IO异常 e1.printStackTrace(); } } }); // 保存菜单项监听 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;//空操作 else file=new File(dirpath,fileName);//文件不为空,新建一个路径和名称 } try { BufferedWriter bufw = new BufferedWriter(new FileWriter(file)); String text = ta.getText();//获取文本内容 bufw.write(text);//将获取文本内容写入到字符输出流 bufw.close();//关闭文件 } catch (IOException e1) { //抛出IO异常 e1.printStackTrace(); } } }); // 退出菜单项监听 closeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); // 窗体关闭监听 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new MyMenuDemo(); } }
程序截图:
jar基本命令:
目标:将下列MyMenuDemo.java代码打包成jar。
方法如下:
1.把java代码放到d:\myclass目录下。
2.按下快捷键ctrl+r,打开运行窗口,输入cmd后回车。
3.输入"d:"后按下回车键,进入D盘根目录。
4.输入命令:cd myclass,按下回车键。
5.编译java源码文件,输入命令javac MyMenuDemo.java,之后按下回车键执行命令。
之后删除源码MyMenuDemo.java文件。
6.编写配置信息1.txt,内容如下:
7.输入命令cd..退到D盘根目录,然后输入命令jar -cvfm my_jarname.jar 1.txt myclass。
8.双击my_jarname.jar文件,打开程序。
附录:
java代码如下:
package myclass;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
class MyMenuDemo {
private Frame f;// 定义窗体
private MenuBar bar;// 定义菜单栏
private TextArea ta;
private Menu fileMenu;// 定义"文件"和"子菜单"菜单
private MenuItem openItem, saveItem, closeItem;// 定义条目“退出”和“子条目”菜单项
private FileDialog openDia, saveDia;// 定义“打开、保存”对话框
private File file;//定义文件
MyMenuDemo() {
init();
}
/* 图形用户界面组件初始化 */
public void init() {
f = new Frame("my window");// 创建窗体对象
f.setBounds(300, 100, 650, 600);// 设置窗体位置和大小
bar = new MenuBar();// 创建菜单栏
ta = new TextArea();// 创建文本域
fileMenu = new Menu("文件");// 创建“文件”菜单
openItem = new MenuItem("打开");// 创建“打开"菜单项
saveItem = new MenuItem("保存");// 创建“保存"菜单项
closeItem = new MenuItem("退出");// 创建“退出"菜单项
fileMenu.add(openItem);// 将“打开”菜单项添加到“文件”菜单上
fileMenu.add(saveItem);// 将“保存”菜单项添加到“文件”菜单上
fileMenu.add(closeItem);// 将“退出”菜单项添加到“文件”菜单上
bar.add(fileMenu);// 将文件添加到菜单栏上
f.setMenuBar(bar);// 将此窗体的菜单栏设置为指定的菜单栏。
openDia = new FileDialog(f, "打开", FileDialog.LOAD);
saveDia = new FileDialog(f, "保存", FileDialog.SAVE);
f.add(ta);// 将文本域添加到窗体内
myEvent();// 加载事件处理
f.setVisible(true);// 设置窗体可见
}
private void myEvent() {
// 打开菜单项监听
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openDia.setVisible(true);//显示打开文件对话框
String dirpath = openDia.getDirectory();//获取打开文件路径并保存到字符串中。
String fileName = openDia.getFile();//获取打开文件名称并保存到字符串中
if (dirpath == null || fileName == null)//判断路径和文件是否为空
return;
else
ta.setText(null);//文件不为空,清空原来文件内容。
file = new File(dirpath, fileName);//创建新的路径和名称
try {
BufferedReader bufr = new BufferedReader(new FileReader(file));//尝试从文件中读东西
String line = null;//变量字符串初始化为空
while ((line = bufr.readLine()) != null) {
ta.append(line + "\r\n");//显示每一行内容
}
bufr.close();//关闭文件
} catch (FileNotFoundException e1) {
// 抛出文件路径找不到异常
e1.printStackTrace();
} catch (IOException e1) {
// 抛出IO异常
e1.printStackTrace();
}
}
});
// 保存菜单项监听
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;//空操作
else
file=new File(dirpath,fileName);//文件不为空,新建一个路径和名称
}
try {
BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
String text = ta.getText();//获取文本内容
bufw.write(text);//将获取文本内容写入到字符输出流
bufw.close();//关闭文件
} catch (IOException e1) {
//抛出IO异常
e1.printStackTrace();
}
}
});
// 退出菜单项监听
closeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
// 窗体关闭监听
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new MyMenuDemo();
}
}
非常感谢您有耐心看完了此文。
为了表示报答,特此献出一秘籍 。
***************************************************
如果jar文件关联失败,想单击一个文件就启动软件如何做呢?
用批处理搞定,编写批处理特别简单,只需记事本写内容,写好后另存为*.bat文件就行。
如果是MyMenuDemo.java源码可编写下列批处理,可实现单击启动程序功能。
Run.bat文件内容如下:
@echo off javac MyMenuDemo.java java MyMenuDemo @pause del *.class
如果是MyMenuDemo.jar文件,那么编写批处理:
run.bat,文件内容如下:
java -jar MyMenuDemo.jar