当离开RCP插件区重新回顾一下JFrame窗口程序的标签、页面间的跳转。
完成一个登陆、注册界面。(界面完成后练习输入输出流,将前台的注册信息保存到一个文件夹下的.txt文件中)
首先向通过JFrame写出一个登陆窗体来,然后给注册按钮绑定actionListener监听。
以下为login页面
1 package demo; 2 3 import java.awt.GridLayout; 4 import java.awt.event.ActionEvent; 5 import java.awt.event.ActionListener; 6 7 import javax.swing.JButton; 8 import javax.swing.JFrame; 9 import javax.swing.JLabel; 10 import javax.swing.JPanel; 11 import javax.swing.JPasswordField; 12 import javax.swing.JTextField; 13 //导入必要的包 14 15 public class Demo_login extends JFrame{ 16 17 JTextField jTextField ; //定义文本框组件 18 JPasswordField jPasswordField; //定义密码框组件 19 JLabel jLabel1,jLabel2; 20 JPanel jp1,jp2,jp3; 21 JButton jb1,jb2,jb3; //创建按钮 22 public Demo_login(){ 23 jTextField = new JTextField(12); 24 jPasswordField = new JPasswordField(13); 25 jLabel1 = new JLabel("用户名"); 26 jLabel2 = new JLabel("密码"); 27 jb1 = new JButton("确认"); 28 jb2 = new JButton("取消"); 29 jb3 = new JButton("注册"); 30 jp1 = new JPanel(); 31 jp2 = new JPanel(); 32 jp3 = new JPanel(); 33 34 //设置布局 35 this.setLayout(new GridLayout(3,1)); 36 37 jp1.add(jLabel1); 38 jp1.add(jTextField);//第一块面板添加用户名和文本框 39 40 jp2.add(jLabel2); 41 jp2.add(jPasswordField);//第二块面板添加密码和密码输入框 42 43 jp3.add(jb1); 44 jp3.add(jb2); 45 jp3.add(jb3);//第三块面板添加确认和取消 46 jb3.addActionListener(new ActionListener() { 47 @Override 48 public void actionPerformed(ActionEvent e) { 49 Demo_add(); 50 } 51 52 public void Demo_add() { 53 new Demo_add(); 54 55 } 56 }); 57 58 59 60 // jp3.setLayout(new FlowLayout()); //因为JPanel默认布局方式为FlowLayout,所以可以注销这段代码. 61 this.add(jp1); 62 this.add(jp2); 63 this.add(jp3); //将三块面板添加到登陆框上面 64 //设置显示 65 this.setSize(300, 200); 66 //this.pack(); 67 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 68 this.setVisible(true); 69 this.setTitle("登陆"); 70 71 } 72 public static void main(String[] args){ 73 new Demo_login(); 74 75 } 76 }
下一步规划注册信息和完成注册界面
1 package demo; 2 3 4 import java.awt.Color; 5 import java.awt.FlowLayout; 6 import java.awt.Graphics; 7 import java.awt.Image; 8 import java.awt.event.ActionEvent; 9 import java.awt.event.ActionListener; 10 11 import javax.swing.Box; 12 import javax.swing.ButtonGroup; 13 import javax.swing.ImageIcon; 14 import javax.swing.JButton; 15 import javax.swing.JFrame; 16 import javax.swing.JLabel; 17 import javax.swing.JPanel; 18 import javax.swing.JRadioButton; 19 import javax.swing.JTextArea; 20 import javax.swing.JTextField; 21 22 23 public class Demo_add extends JFrame{ 24 25 public static void main(String[] args) { 26 new Demo_add(); 27 } 28 29 String [][] arr = new String [100][5]; 30 JLabel id,name,age, gender,introduction; 31 ButtonGroup bg; 32 JRadioButton female,male; 33 JTextArea textArea; 34 JTextField tf_id,tf_name,tf_age,jf_introduction; 35 JButton btn_register; 36 MyPanel jp; 37 Box box_id,box_name,box_age,box_gender,box_introduction,baseBox; 38 39 public Demo_add() { 40 41 setVisible(true); 42 setSize(400, 450); 43 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 44 instantiateFunction(); 45 addFunction(); 46 47 48 } 49 50 public void instantiateFunction(){ 51 jp = new MyPanel(new ImageIcon("./src/picture/pic16.jpg").getImage()); 52 baseBox = Box.createVerticalBox(); 53 box_id = Box.createHorizontalBox(); 54 box_name = Box.createHorizontalBox(); 55 box_age = Box.createHorizontalBox(); 56 box_gender = Box.createHorizontalBox(); 57 box_introduction = Box.createHorizontalBox(); 58 btn_register = new JButton("注册"); 59 tf_id = new JTextField(10); 60 tf_name = new JTextField(10); 61 tf_age = new JTextField(10); 62 bg = new ButtonGroup(); 63 female = new JRadioButton("女"); 64 male = new JRadioButton("男"); 65 textArea = new JTextArea(9,20); 66 listenerFunction(); 67 68 } 69 70 /** 71 * 实现页面跳转和数组传递 72 * */ 73 74 public void listenerFunction(){ 75 btn_register.addActionListener(new ActionListener() { 76 77 @Override 78 public void actionPerformed(ActionEvent e) { 79 80 for (int i = 0; i < arr.length; i++) { 81 //先做一个判断,如果ID不为空,则传过去 82 if(arr[i][0]==null || arr[i][0].equals("")){ 83 arr[i][0] =tf_id.getText(); 84 arr[i][1] =tf_name.getText(); 85 arr[i][2] =tf_age.getText(); 86 87 if(male.isSelected()){ 88 arr[i][3] = male.getText(); 89 }else{ 90 arr[i][3] = female.getText(); 91 } 92 arr[i][4] =textArea.getText(); 93 94 break; 95 } 96 } 97 new Demo_addMessage(arr); 98 99 } 100 }); 101 } 102 103 public void addFunction(){ 104 add(jp); 105 box_id.add(new JLabel("ID: ")); 106 box_id.add(tf_id); 107 108 box_name.add(new JLabel("姓名: ")); 109 box_name.add(tf_name); 110 111 box_age.add(new JLabel("年龄: ")); 112 box_age.add(tf_age); 113 114 box_gender.add(new JLabel("性别: ")); 115 bg.add(male); 116 bg.add(male); 117 box_gender.add(male); 118 box_gender.add(female); 119 120 box_introduction.add(textArea); 121 122 123 baseBox.add(Box.createVerticalStrut(15)); 124 baseBox.add(box_id); 125 baseBox.add(Box.createVerticalStrut(15)); 126 baseBox.add(box_name); 127 baseBox.add(Box.createVerticalStrut(15)); 128 baseBox.add(box_age); 129 baseBox.add(Box.createVerticalStrut(15)); 130 baseBox.add(box_gender); 131 baseBox.add(Box.createVerticalStrut(15)); 132 baseBox.add(new JLabel("个人简介: ")); 133 baseBox.add(box_introduction); 134 baseBox.add(Box.createVerticalStrut(15)); 135 baseBox.add(btn_register); 136 jp.add(baseBox); 137 138 } 139 } 140 141 class MyPanel extends JPanel{ 142 Image img; 143 public MyPanel(Image img) { 144 this.img = img; 145 } 146 @Override 147 protected void paintComponent(Graphics g) { 148 super.paintComponent(g); 149 g.drawImage(img,0,0, this.getWidth(), this.getHeight(), this); 150 } 151 }
正常开发中注册一般会伴随着回显信息的,因为是对JFrame的熟悉所以数据不是来自数据库,我们直接对这个界面中输入的数据回显
1 package demo; 2 3 4 5 6 7 8 import javax.swing.ImageIcon; 9 import javax.swing.JFrame; 10 import javax.swing.JPanel; 11 import javax.swing.JScrollPane; 12 import javax.swing.JTable; 13 14 15 16 public class Demo_addMessage extends JFrame { 17 18 19 JTable table; 20 JPanel jp; 21 //MyDate model; 22 JTable tabel; 23 ImageIcon img1,img2,img3; 24 25 public Demo_addMessage(String [][] arr) { 26 System.out.println("跳过来了"); 27 setVisible(true); 28 setSize(500, 500); 29 setTitle("保存信息界面"); 30 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 31 init(arr); 32 33 } 34 35 36 private void init(String [][] arr) { 37 //标题数组 38 String [] columns = {"ID","姓名","年龄","性别","个人简介"}; 39 40 //项目的相对路径./代表项目名称 41 /*img1 = new ImageIcon("./src/picture/dm.png"); 42 img2 = new ImageIcon("./src/picture/pic12.jpg"); 43 img3 = new ImageIcon("./src/picture/pic2.jpg");*/ 44 //model = new MyDate(arr,columns); 45 jp = new JPanel(); 46 table = new JTable(arr,columns);//没有图片时的实例化 47 //table = new JTable(model);//存在图片时的实例化 48 table.setRowHeight(20); 49 50 JScrollPane scrollPanel = new JScrollPane(table); 51 jp.add(scrollPanel); 52 add(jp); 53 54 } 55 56 }
到这儿JFrame的界面就简单完成了,下一步就是注册界面练习输入输出流。详情关注下一篇随笔~