在Java中什么是swing?简单的说就是Java中包装好的并且规定好的用来做窗体UI的一套API;以下简单的介绍一下常用的swing组件。
1:JButton:代表Swing按钮,可以带一些图片或者文字;
2:JCheckBox:代表Swing组件的复选框组件;
3:JComBox:代表下拉列表框;可以在下拉显示区域显示多个选项;
4:JFrame:代表Swing框架类;
5:JDialog:代表Swing版本对话框;
6:JLabel:代表Swing中的标签组件;
7:JRadioButton:代表swing中的单选按钮;
8:JList:代表能够在用户界面中显示一系列条目组件;
9:JTextField:代表文本框;
10:JPaswordField:代表密码框;
11:JTextarea:代表swing中的文本区域;
12;JOptionPane:代表swring中的一些对话框;
常用的事件监听其实很好理解首先要明白什么是事件?什么是事件监听器?什么是事件源?
事件:对于组件的任何一个操作:点击按钮,选中菜单项 鼠标移动,鼠标按下,键盘输入...
事件监听器:用来监听在某个组件上是否发生了对应的事件
事件源:发生事件的组件对象
理清了这三个因素以后,就明白,在哪里(事件源)发生事件则需要监听哪里,下面看一下最简单的山寨版记事本文件
以下是实现部分功能的代码
package wenjiancaozuo;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
/**
* 界面类
*
* @author wangwei
*
*/
public class NotePadUI {
public static void main(String args[]) {
// 创建界面
JFrame jf = new JFrame();
// 设置标题
jf.setTitle("java记事本");
// 设置初始大小
jf.setSize(500,500 );
// 设置点击关闭按钮的时候退出程序
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建多行文本框
JTextArea area = new JTextArea();
//设置背景颜色
area.setBackground(Color.PINK);
// 添加菜单栏
JMenuBar bar = new JMenuBar();
// 创建事件监听器对象
NotePadListener lis = new NotePadListener(area);
String[] menus = { "文件(F)", "编辑(E)", "格式(O)", "查看(V)", "帮助(H)" };
String[][] items = {
{ "新建(N)", "打开(O)", "保存(S)", "另存为(A)", "-", "页面设置(U)","打印(P)", "-", "退出(X)" },
{ "撤销(U)", "-", "剪切(T)", "复制(C)","查找(F)","替换(L)","删除(X)" }, {"自动换行","字体"},
{"状态栏"}, {"查看帮助(H)","关于记事本(A)"} };
// 每个菜单项的唯一标识
String[][] commands = {
{ "newFile", "open", "save", "saveAs", "-", "pageSet", "print",
"-", "exit" }, { "withDraw", "-", "cut", "copy" ,"find","replace","delete"}, {"AUTO","char"},
{"Status"}, {"help","with"} };
// 循环创建JMenu,放在JMenuBar上
for (int i = 0; i < menus.length; i++) {
JMenu menu = new JMenu(menus[i]);
bar.add(menu);
for (int j = 0; j < items[i].length; j++) {
if (items[i][j].equals("-")) {
// 就加入分隔条
menu.addSeparator();
} else {
JMenuItem item = new JMenuItem(items[i][j]);
// 设置菜单项的唯一标识(动作命令)
item.setActionCommand(commands[i][j]);
// 将菜单项加载对应的菜单上
menu.add(item);
// 给菜单项绑定监听器
item.addActionListener(lis);
}
}
}
// 设置窗体的菜单
jf.setJMenuBar(bar);
// 滚动面板,将多行文本框放到滚动面板面板中
JScrollPane sp = new JScrollPane(area);
// 设置一直显示滚动条并且在什么时候可见设置为always
sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
//添加在窗体上
jf.add(sp);
//设置窗体可见
jf.setVisible(true);
}
}
package wenjiancaozuo;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.swing.JTextArea;
public class NotePadListener implements ActionListener{
private JTextArea area;
//通过构造方法传值过来
public NotePadListener(JTextArea area){
this.area=area;
}
//通过事件触发自动调用
public void actionPerformed(ActionEvent e) {
//获得被选中的菜单项目的动作命令
String command =e.getActionCommand();
if(command.equals("save")){
//获得多行文本框的数据
//得到文本框内容
String str =area.getText();
String path = "F:\\aba\\d.txt";
try{
FileOutputStream fos = new FileOutputStream(path);
//这里写入的数据很可以用字节数组来写入
//获得字节数组
byte[] bs = str.getBytes();
fos.write(bs);
fos.flush();
fos.close();
}catch(Exception ef){
ef.printStackTrace();
}
}else if(command.equals("open")){
String path1 = "F:\\aba\\d.txt";
try{
FileInputStream fis = new FileInputStream(path1);
//文件比较小所以用获取流的长度来实现
int Len = fis.available();
//流中有多大字节就定义多大数组
byte[] bs = new byte[Len];
//将流中字节读入数组
fis.read(bs);
//将字节数转换成字符串
String mg = new String(bs);
area.setText(mg);
}catch(Exception ef){
ef.printStackTrace();
}
}
}
}
以上是山寨版的简单的记事本,也只是实现了部分功能,主要通过小程序来说明以下swing组件的部分简单的用法和回顾以下IO流