您的位置:首页 > 产品设计 > UI/UE

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示例:

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
相关文章推荐