在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流