GUI 图形用户界面
JavaGUI的容器
首层容器:JWindow JFrame(默认BorderLayout) JDialog中间容器:JPanel(默认FLowlayout)内容面板:Container
AWT:使用操作系统本身,跨平台时效果不一样
Swing:效果一样,跨平台Swing 程序建立步骤:
①建立容器②建立组件③组件添加到容器④设置布局⑤添加事件Swing 容器
JApplet 浏览器中运行的容器JFrame 顶层容器,不能包含在其他容器中JPanel 举行区域,页面JScrollPaneJDialog布局管理器:
主要有FLowlayout 从左到右从上到下BorderLayout EWSN CenterGridLayout(行,列,行宽,列宽);CardLayout卡片布局实现过程
JPanel使用卡片布局,添加对应用卡片页面,设置时间实现卡片切换 事件:步骤:①建立事件源②为事件源对象选择合适事件监听器③为监听器添加合适处理程序④为监听器与事件源建立联系,绑定,将监听器对象注册到事件源上定义监听器可选方法:
①GUI程序本身实现监听(不好,违背单一原则,addActionListener(this))②内部类定义监听器类 new出来,在add③使用匿名内部类第二三种成为事件驱动的标准
各种组件使用,注意,得到内容,事件驱动程序如下:1 package com.Frame; 2 3 import java.awt.Container; 4 import java.awt.Font; 5 import java.awt.GraphicsConfiguration; 6 import java.awt.HeadlessException; 7 import java.awt.Toolkit; 8 9 import javax.swing.JButton; 10 import javax.swing.JCheckBox; 11 import javax.swing.JComboBox; 12 import javax.swing.JFrame; 13 import javax.swing.JLabel; 14 import javax.swing.JPasswordField; 15 import javax.swing.JRadioButton; 16 import javax.swing.JTextArea; 17 import javax.swing.JTextField; 18 19 /** 20 * @Author: YuanqiuChen 21 * @Date:2016-3-11-下午1:09:32 22 * 23 * 24 */ 25 26 public class MyFrame extends JFrame{ 27 28 private int width = 1024; 29 private int height = 1024 * 618 / 1000; 30 private Container contentP; 31 private JLabel label; 32 private JTextField text; 33 private JPasswordField passwordField; 34 private JButton button; 35 private JRadioButton redioBtn; 36 private JCheckBox checkBox; 37 private JComboBox comboBox; 38 private JTextArea textBox; 39 40 41 42 public MyFrame() throws HeadlessException { 43 super(); 44 this.setTitle("haha"); 45 46 this.setSize(width, height); 47 //设置居中 48 this.setLocationRelativeTo(null); 49 50 51 //左上角为原点,距离它为XY 52 Toolkit tool = Toolkit.getDefaultToolkit(); 53 int x = (int)tool.getScreenSize().getWidth(); 54 int y = (int)tool.getScreenSize().getHeight(); 55 this.setLocation((x-this.width)/2, (y-this.height)/2); 56 57 //设置标题图片 58 this.setIconImage(tool.createImage("C:/Users/Administrator/Desktop/11.jpg")); 59 // this.setIconImage(tool.createImage("img/e.png")); 60 61 this.addContent(); 62 this.setVisible(true); 63 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 64 } 65 66 public void addContent(){ 67 68 //容器,获得当前容器的内容面板,组件都要加载内容面板里 69 this.contentP= this.getContentPane(); 70 //布局 71 this.contentP.setLayout(null);//自然布局,即绝对布局,所以要加坐标 72 73 //添加组件 74 //常用组件:JLabel-文本 JTextField-文本框 JPasswordField-密码框 75 //JRadioButtom-单选按钮 JCheckBox-复选框 JComboBox-下拉列表 76 //JTextArea-文本域 JButton-按钮 77 78 //JLabel三个常用方法:显示文本,显示图片,显示边框(可以缩小到线条) 79 //显示背景的时候,可以设置不透明setOpaque为true 80 //☆如果几个都显示在同一位置,(级别相同)显示层次先添加的在顶层,可见,后添加的在底层,背景 81 //如果级别不同,有添加顺序才会显示,轻量级的放在重量级的上面,显示的是轻量级的 82 83 84 this.label = new JLabel("用户名"); 85 this.label.setBounds(100, 100, 100, 135); 86 this.label.setFont(new Font("宋体", Font.PLAIN, 24)); 87 88 this.contentP.add(this.label);//添加文本组件 89 90 91 this.checkBox = new JCheckBox("运动"); 92 this.checkBox.setBounds(350, 120,180, 135); 93 this.contentP.add(checkBox); 94 95 this.contentP.add(checkBox); 96 } 97 98 99 100 }
1 package com.Frame; 2 3 import java.awt.Color; 4 import java.awt.Container; 5 import java.awt.Font; 6 import java.awt.Toolkit; 7 8 import javax.swing.BorderFactory; 9 import javax.swing.ButtonGroup; 10 import javax.swing.JButton; 11 import javax.swing.JCheckBox; 12 import javax.swing.JComboBox; 13 import javax.swing.JFrame; 14 import javax.swing.JLabel; 15 import javax.swing.JPasswordField; 16 import javax.swing.JRadioButton; 17 import javax.swing.JTextArea; 18 import javax.swing.JTextField; 19 20 /** 21 * Date: 2016-3-11-下午1:06:22 Class_name: SimpleFrame.java Package_name: 22 * com.lovo.demo_16 Author: ZhangYue Description: 23 */ 24 public class SimpleFrame extends JFrame { 25 26 private int width; 27 private int height; 28 private Container contentP; 29 private JLabel usernameLabel; 30 private JLabel passwordLabel; 31 private JTextField usernameField; 32 private JPasswordField passwordField; 33 private JRadioButton maleBtn; 34 private JRadioButton femaleBtn; 35 private JCheckBox hobbyCheckBox1; 36 private JCheckBox hobbyCheckBox2; 37 private JCheckBox hobbyCheckBox3; 38 private JComboBox addressCombBox; 39 private JTextArea describeTextArea; 40 private JButton submitBtn; 41 private JButton cancelBtn; 42 43 public SimpleFrame() { 44 this.width = 1024; 45 this.height = 600; 46 this.setTitle("我的第一个GUI窗体"); 47 this.setSize(this.width, this.height); 48 Toolkit tool = Toolkit.getDefaultToolkit(); 49 double width = tool.getScreenSize().getWidth(); 50 double height = tool.getScreenSize().getHeight(); 51 this.setLocation((int) (width - this.width) / 2, 52 (int) (height - this.height) / 2); 53 54 this.setIconImage(tool.createImage("img/logo.png")); 55 56 // this.setLocationRelativeTo(null);//设置窗体居中 57 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 58 59 this.addContent(); 60 61 this.setVisible(true); 62 } 63 64 public void addContent() { 65 this.contentP = this.getContentPane(); 66 this.contentP.setLayout(null); 67 68 //文本 和 输入框 69 this.usernameLabel = new JLabel("用户名"); 70 this.usernameLabel.setBounds(350, 10, 90,35); 71 this.usernameLabel.setFont(new Font("宋体", Font.PLAIN, 16)); 72 this.contentP.add(this.usernameLabel);//添加文本组件 73 74 this.usernameField = new JTextField(); 75 this.usernameField.setBounds(450, 10, 200,35); 76 this.contentP.add(this.usernameField); 77 78 this.passwordLabel = new JLabel("密 码"); 79 this.passwordLabel.setBounds(350, 60, 90,35); 80 this.passwordLabel.setFont(new Font("宋体", Font.PLAIN, 16)); 81 this.contentP.add(this.passwordLabel);//添加文本组件 82 83 //密码框 84 this.passwordField = new JPasswordField(); 85 this.passwordField.setBounds(450, 60, 200,35); 86 this.passwordField.setEchoChar('*'); 87 // this.passwordField.setForeground(Color.RED); 88 this.contentP.add(this.passwordField); 89 90 91 //单选框 92 JLabel genderTitle = new JLabel("性别"); 93 genderTitle.setBounds(350, 110, 80, 30); 94 genderTitle.setFont(new Font("宋体", Font.PLAIN, 16)); 95 this.contentP.add(genderTitle); 96 97 this.maleBtn = new JRadioButton("男"); 98 this.maleBtn.setBounds(440, 110, 50,35); 99 this.contentP.add(this.maleBtn);100 this.femaleBtn = new JRadioButton("女");101 this.femaleBtn.setBounds(500, 110, 50,35);102 this.contentP.add(this.femaleBtn);103 ButtonGroup bp = new ButtonGroup();104 bp.add(this.maleBtn);105 bp.add(this.femaleBtn);106 107 //复选框108 this.hobbyCheckBox1 = new JCheckBox("运动");109 this.hobbyCheckBox2 = new JCheckBox("电影");110 this.hobbyCheckBox3 = new JCheckBox("音乐");111 this.hobbyCheckBox1.setBounds(350, 160, 80,35);112 this.hobbyCheckBox2.setBounds(440, 160, 80,35);113 this.hobbyCheckBox3.setBounds(540, 160, 80,35);114 115 this.contentP.add(this.hobbyCheckBox1);116 this.contentP.add(this.hobbyCheckBox2);117 this.contentP.add(this.hobbyCheckBox3);118 119 //下拉框120 this.addressCombBox = new JComboBox(new String[]{"成都", "德阳", "绵阳", "乐山", "资阳"});121 this.addressCombBox.addItem("达州");122 this.addressCombBox.addItem("自贡");123 this.addressCombBox.setSelectedIndex(5);124 this.addressCombBox.setBounds(350, 210, 120, 25);125 this.contentP.add(this.addressCombBox);126 127 //文本域128 this.describeTextArea = new JTextArea();129 this.describeTextArea.setBounds(350, 250, 300, 100);130 // this.describeTextArea.setColumns(5);131 // this.describeTextArea.setRows(3);132 this.describeTextArea.setBorder(BorderFactory.createLineBorder(Color.BLACK));133 this.contentP.add(this.describeTextArea);134 135 //按钮136 this.submitBtn = new JButton("确定");137 this.submitBtn.setBounds(400, 400, 80, 30);138 this.contentP.add(this.submitBtn);139 140 this.cancelBtn = new JButton("取消");141 this.cancelBtn.setBounds(500, 400, 80, 30);142 this.contentP.add(this.cancelBtn);143 144 }145 146 public static void main(String[] args) {147 new SimpleFrame();148 }149 150 public int getWidth() {151 return width;152 }153 154 public void setWidth(int width) {155 this.width = width;156 }157 158 public int getHeight() {159 return height;160 }161 162 public void setHeight(int height) {163 this.height = height;164 }165 166 public Container getContentP() {167 return contentP;168 }169 170 public void setContentP(Container contentP) {171 this.contentP = contentP;172 }173 174 public JLabel getUsernameLabel() {175 return usernameLabel;176 }177 178 public void setUsernameLabel(JLabel usernameLabel) {179 this.usernameLabel = usernameLabel;180 }181 182 public JLabel getPasswordLabel() {183 return passwordLabel;184 }185 186 public void setPasswordLabel(JLabel passwordLabel) {187 this.passwordLabel = passwordLabel;188 }189 190 public JTextField getUsernameField() {191 return usernameField;192 }193 194 public void setUsernameField(JTextField usernameField) {195 this.usernameField = usernameField;196 }197 198 public JPasswordField getPasswordField() {199 return passwordField;200 }201 202 public void setPasswordField(JPasswordField passwordField) {203 this.passwordField = passwordField;204 }205 206 public JRadioButton getMaleBtn() {207 return maleBtn;208 }209 210 public void setMaleBtn(JRadioButton maleBtn) {211 this.maleBtn = maleBtn;212 }213 214 public JRadioButton getFemaleBtn() {215 return femaleBtn;216 }217 218 public void setFemaleBtn(JRadioButton femaleBtn) {219 this.femaleBtn = femaleBtn;220 }221 222 public JCheckBox getHobbyCheckBox1() {223 return hobbyCheckBox1;224 }225 226 public void setHobbyCheckBox1(JCheckBox hobbyCheckBox1) {227 this.hobbyCheckBox1 = hobbyCheckBox1;228 }229 230 public JCheckBox getHobbyCheckBox2() {231 return hobbyCheckBox2;232 }233 234 public void setHobbyCheckBox2(JCheckBox hobbyCheckBox2) {235 this.hobbyCheckBox2 = hobbyCheckBox2;236 }237 238 public JCheckBox getHobbyCheckBox3() {239 return hobbyCheckBox3;240 }241 242 public void setHobbyCheckBox3(JCheckBox hobbyCheckBox3) {243 this.hobbyCheckBox3 = hobbyCheckBox3;244 }245 246 public JComboBox getAddressCombBox() {247 return addressCombBox;248 }249 250 public void setAddressCombBox(JComboBox addressCombBox) {251 this.addressCombBox = addressCombBox;252 }253 254 public JTextArea getDescribeTextArea() {255 return describeTextArea;256 }257 258 public void setDescribeTextArea(JTextArea describeTextArea) {259 this.describeTextArea = describeTextArea;260 }261 262 public JButton getSubmitBtn() {263 return submitBtn;264 }265 266 public void setSubmitBtn(JButton submitBtn) {267 this.submitBtn = submitBtn;268 }269 270 public JButton getCancelBtn() {271 return cancelBtn;272 }273 274 public void setCancelBtn(JButton cancelBtn) {275 this.cancelBtn = cancelBtn;276 }277 278 279 280 }
1 package com.Frame; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Toolkit; 6 import java.awt.event.ActionEvent; 7 import java.awt.event.ActionListener; 8 import java.awt.event.KeyEvent; 9 import java.awt.event.KeyListener; 10 11 import javax.swing.BorderFactory; 12 import javax.swing.JButton; 13 import javax.swing.JFrame; 14 import javax.swing.JLabel; 15 import javax.swing.JOptionPane; 16 import javax.swing.JTextField; 17 18 19 20 /** 21 * @Author: YuanqiuChen 22 * @Date:2016-3-16-下午10:07:13 23 * 24 * 25 */ 26 27 public class GuessNumUI extends JFrame{ 28 private JLabel la1,la2,laResult; 29 private JButton yes, no, btnAgain; 30 private JTextField inputNum; 31 32 private int randomNum = (int)(Math.random()*50) + 50; 33 private int n = 0; 34 35 public GuessNumUI(){ 36 this.setSize(600,500); 37 this.setTitle("猜数字游戏"); 38 this.setLocationRelativeTo(null);//设置窗体居中 39 40 addContent(); 41 addEventHandler(); 42 43 this.setVisible(true); 44 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 45 } 46 47 private void addContent(){ 48 this.setLayout(null); 49 50 this.la1 = new JLabel(); 51 this.la1.setBounds(0, 0, 580,180); 52 this.la1.setBorder(BorderFactory.createTitledBorder("YourGuess")); 53 this.add(la1); 54 55 this.la2 = new JLabel(); 56 this.la2.setBounds(0, 180, 580,180); 57 this.la2.setBorder(BorderFactory.createTitledBorder("Hint")); 58 this.add(la2); 59 60 this.yes = new JButton("确定"); 61 this.yes.setBounds(200, 390, 60, 30); 62 this.add(yes); 63 64 this.no = new JButton("取消"); 65 this.no.setBounds(300, 390, 60, 30); 66 this.add(no); 67 68 this.btnAgain = new JButton("再来一次"); 69 this.btnAgain.setBounds(400, 390, 100, 30); 70 this.add(btnAgain); 71 72 this.inputNum = new JTextField(); 73 this.inputNum.setFont(new Font("宋体", Font.BOLD, 20)); 74 this.inputNum.setBounds(160, 30, 300, 50); 75 this.add(inputNum); 76 77 this.laResult = new JLabel("Let's Play!"); 78 this.laResult.setFont(new Font("宋体", Font.BOLD, 20)); 79 this.laResult.setBounds(200, 230, 300, 50); 80 this.add(laResult); 81 } 82 83 //添加事件 84 public void addEventHandler(){ 85 //添加监听器 86 this.yes.addActionListener( 87 new ActionListener() { 88 public void actionPerformed(ActionEvent e) { 89 guess(); 90 inputNum.setText(""); 91 } 92 } 93 ); 94 95 this.no.addActionListener( 96 new ActionListener() { 97 public void actionPerformed(ActionEvent e) { 98 System.out.println(randomNum); 99 System.exit(0);100 }101 }102 );103 104 this.btnAgain.addActionListener(105 new ActionListener() {106 public void actionPerformed(ActionEvent e) {107 yes.setEnabled(true);108 randomNum = (int)(Math.random()*50) + 50;109 n = 0;110 inputNum.setText("");111 laResult.setText("再来一次!Come On!");112 }113 }114 );115 116 //把按回车键监听器注册到事件源上117 EnterKeyEvent enterKeyEvent = new EnterKeyEvent();118 this.addKeyListener(enterKeyEvent);119 this.inputNum.addKeyListener(enterKeyEvent);120 this.yes.addKeyListener(enterKeyEvent);121 122 }123 124 private class EnterKeyEvent implements KeyListener{125 public void keyTyped(KeyEvent e) {}126 public void keyPressed(KeyEvent e) {127 if(e.getKeyCode() == KeyEvent.VK_ENTER){128 if(yes.isEnabled()){129 guess();130 }131 inputNum.setText("");132 }133 }134 public void keyReleased(KeyEvent e) {}135 136 }137 138 public void guess(){139 System.out.println(randomNum);140 String inputStr = this.inputNum.getText().trim();141 int num;142 if(!inputStr.matches("[0-9]+")){143 this.laResult.setText("请输入正整数");144 return;145 }else{146 num = Integer.parseInt(inputStr);147 }148 149 if(num < 50 || num > 99){150 this.laResult.setText("请输入50-99的数");151 return;152 }153 154 if(num == randomNum){155 this.laResult.setText("猜对了,随机数是:" + randomNum);156 n++;157 this.yes.setEnabled(false);158 159 // long now = System.currentTimeMillis();160 // while((System.currentTimeMillis() - now) < 3000){161 // 162 // }163 164 try {165 Thread.sleep(3000);166 } catch (InterruptedException e) {167 // TODO Auto-generated catch block168 e.printStackTrace();169 }170 171 // int choice = JOptionPane.showConfirmDialog(null, "确认退出");172 // if(choice == 0){} 173 // System.exit(0);174 175 return;176 }else{177 n++;178 if(num < randomNum){179 this.laResult.setText("猜小了");180 }else{181 this.laResult.setText("猜大了");182 }183 }184 185 if(n >= 7){186 this.laResult.setText(n + "次机会已用完,随机数是:" + randomNum);187 this.yes.setEnabled(false);188 }189 }190 191 public static void main(String[] args) {192 new GuessNumUI();193 }194 195 }
1 package com.Frame; 2 3 import java.awt.BorderLayout; 4 import java.awt.Color; 5 import java.awt.Font; 6 import java.awt.Graphics; 7 import java.awt.GridLayout; 8 import java.awt.event.ActionEvent; 9 import java.awt.event.ActionListener; 10 import java.util.Random; 11 12 import javax.swing.BorderFactory; 13 import javax.swing.JButton; 14 import javax.swing.JFrame; 15 import javax.swing.JLabel; 16 import javax.swing.JPanel; 17 import javax.swing.JTextField; 18 import javax.swing.border.Border; 19 20 import com.Frame.test.Delay; 21 22 /** 23 * @Author: YuanqiuChen 24 * @Date:2016-3-17-上午9:22:57 25 * 26 *加入三个面板,直接设置边框 27 * 比自己写的好处,加入三个面板,面板设置边框 28 * 29 * 换颜色 30 */ 31 32 public class ChangeColor extends JFrame{ 33 34 private static final long serialVersionUID = 1L; 35 36 37 private JPanel mianBan1, mianBan2, mianBan3; 38 39 private JButton changeColor, ziDongChangeColor; 40 private JLabel laResult; 41 42 private boolean flag = false; 43 44 ChangeColorThread t = new ChangeColorThread(); 45 46 public JButton getZiDongChangeColor() { 47 return ziDongChangeColor; 48 } 49 50 public void setZiDongChangeColor(JButton ziDongChangeColor) { 51 this.ziDongChangeColor = ziDongChangeColor; 52 } 53 54 public boolean getFlag() { 55 return flag; 56 } 57 58 public void setFlag(boolean flag) { 59 this.flag = flag; 60 } 61 62 63 public ChangeColor(){ 64 this.setSize(600,500); 65 this.setTitle("换颜色"); 66 this.setLocationRelativeTo(null);//设置窗体居中 67 68 addContent(); 69 addEventHandler(); 70 71 72 73 this.setVisible(true); 74 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 75 } 76 77 private void addContent() { 78 this.mianBan1 = new JPanel(); 79 this.mianBan1.setLayout(null); 80 this.mianBan1.setBorder(BorderFactory.createTitledBorder("YourGuess")); 81 82 this.mianBan1.setBackground(new Color(200,220,240)); 83 84 85 86 this.mianBan2 = new JPanel(); 87 this.mianBan2.setBorder(BorderFactory.createTitledBorder("Hint")); 88 this.laResult = new JLabel("Let's Play!"); 89 this.laResult.setFont(new Font("宋体", Font.BOLD, 20)); 90 this.mianBan2.add(laResult); 91 92 93 94 this.mianBan3 = new JPanel(); 95 this.mianBan3.setBorder(BorderFactory.createTitledBorder("")); 96 97 98 this.changeColor = new JButton("换颜色"); 99 this.mianBan3.add(changeColor);100 101 this.ziDongChangeColor = new JButton("自动换颜色");102 this.mianBan3.add(ziDongChangeColor);103 104 this.setLayout(new GridLayout(3,1));105 this.add(mianBan1);this.add(mianBan2);this.add(mianBan3);106 }107 108 private void addEventHandler() {109 this.changeColor.addActionListener(new ActionListener() {110 @Override111 public void actionPerformed(ActionEvent e) {112 mianBan1.setBackground(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));113 mianBan2.setBackground(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));114 mianBan3.setBackground(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));115 116 }117 });118 119 120 this.ziDongChangeColor.addActionListener(new ActionListener() {121 private Delay d = new Delay();122 public void actionPerformed(ActionEvent e) {123 124 if(flag){125 flag = false;126 // t.stop();127 }else{128 flag = true;129 // t.start();130 new ChangeColorThread().start();131 132 }133 System.out.println(flag);134 }135 });136 137 138 }139 140 public void delay(int i){141 // long now = System.currentTimeMillis();142 // while(System.currentTimeMillis() - now < i){143 // }144 // for(int j = 0; j < i*10; j++ ){145 // System.out.println(11111);146 // }147 }148 149 public void changeColor(){150 mianBan1.setBackground(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));151 mianBan2.setBackground(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));152 mianBan3.setBackground(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));153 }154 155 public static void main(String[] args) {156 new ChangeColor();157 }158 159 public void paint(Graphics g) {160 Random r = new Random();161 mianBan1.setBackground(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));162 mianBan2.setBackground(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));163 mianBan3.setBackground(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));164 165 }166 167 //在Java的界面里边,不能出现太多的for循环,线程等待等,否则就会跟新显示不对,直接卡死,或者只显示最后一个图像168 //必须放在线程里边才对169 class ChangeColorThread extends Thread {170 //问题,开始时为true,最后再false,可以运行一段时间结束171 //开始为false,切换为真,不可以运行,因为顺序运行172 public void run() {173 while (flag) {174 System.out.println("thread"+flag);175 repaint();176 try {177 Thread.sleep(1000);178 } catch (InterruptedException e) {179 e.printStackTrace();180 }181 }182 }183 }184 }
1 package com.Frame; 2 3 import java.awt.BorderLayout; 4 import java.awt.GridLayout; 5 import java.awt.event.ActionEvent; 6 import java.awt.event.ActionListener; 7 import java.awt.event.KeyEvent; 8 import java.awt.event.KeyListener; 9 10 import javax.print.attribute.standard.OutputDeviceAssigned; 11 import javax.swing.JButton; 12 import javax.swing.JFrame; 13 import javax.swing.JLabel; 14 import javax.swing.JOptionPane; 15 import javax.swing.JPanel; 16 import javax.swing.JPasswordField; 17 import javax.swing.JTextField; 18 19 /** 20 * @Author: YuanqiuChen 21 * @Date:2016-3-15-下午10:02:56 22 * 23 * 24 */ 25 26 public class Login extends JFrame{ 27 28 private JLabel laAccount, lapassword; 29 private JTextField textAccount; 30 private JPasswordField textPassword; 31 private JButton btnLogin; 32 private JPanel mianBan1, mianBan2, mianBan3; 33 34 public Login(){ 35 init(); 36 this.pack(); 37 // this.setSize(500,500); 38 39 this.setTitle("登录"); 40 this.setLocationRelativeTo(null); 41 this.setResizable(false); 42 this.setVisible(true); 43 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 44 45 } 46 47 private void init(){ 48 this.laAccount = new JLabel("账号:"); 49 this.lapassword = new JLabel("密码:"); 50 this.textAccount = new JTextField("测试账号:123,密码123",20); 51 this.textPassword = new JPasswordField(20); 52 this.btnLogin = new JButton("登录"); 53 54 this.setLayout(new GridLayout(3,1)); 55 this.mianBan1 = new JPanel();mianBan2 = new JPanel();mianBan3 = new JPanel(); 56 57 this.mianBan1.add(laAccount);this.mianBan1.add(textAccount); 58 this.mianBan2.add(lapassword);this.mianBan2.add(textPassword); 59 this.mianBan3.add(btnLogin); 60 61 62 //面板可以添加到面板里边 63 // mianBan1.add(mianBan2); 64 65 this.add(mianBan1);this.add(mianBan2);this.add(mianBan3); 66 67 68 //添加事件 69 addEventHandler(); 70 } 71 72 //验证登录 73 private void check(){ 74 if(textAccount.getText().trim().equals("123") && textPassword.getText().trim().equals("123")){ 75 mianBan1.setVisible(false); 76 mianBan2.setVisible(false); 77 mianBan3.setVisible(false); 78 79 80 JOptionPane.showMessageDialog(mianBan1, "登录成功", "登录提示", JOptionPane.INFORMATION_MESSAGE); 81 // System.out.println("haha"); 82 }else{ 83 JOptionPane.showMessageDialog(null, "登录失败", "登录提示", JOptionPane.WARNING_MESSAGE); 84 // System.out.println("cuo"); 85 } 86 87 } 88 89 //添加事件处理 90 private void addEventHandler(){ 91 this.textPassword.addKeyListener(new KeyListener() { 92 public void keyTyped(KeyEvent e) {} 93 public void keyReleased(KeyEvent e) {} 94 95 public void keyPressed(KeyEvent e) { 96 if(e.getKeyCode() == KeyEvent.VK_ENTER){ 97 check(); 98 } 99 }100 });101 //添加监听器102 this.btnLogin.addActionListener(103 new ActionListener() {104 public void actionPerformed(ActionEvent e) {105 // this.textAccount.getText();//这里不能加this表示当前对象,不对106 check();107 }108 }109 );110 }111 112 public static void main(String[] args) {113 new Login();114 }115 116 }
布局:
1 package com.gui_layout; 2 3 import java.awt.BorderLayout; 4 import java.awt.Container; 5 import java.awt.FlowLayout; 6 7 import javax.swing.JButton; 8 import javax.swing.JFrame; 9 import javax.swing.JLabel;10 11 /**12 * Date: 2016-3-16-上午9:38:4613 * Class_name: BorderLayoutTest.java14 * Package_name: com.lovo.demo_1615 * Author: ZhangYue16 * Description: 17 */18 public class BorderLayoutTest extends JFrame{19 20 public BorderLayoutTest(){21 this.setSize(900,600);22 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);23 this.setTitle("边界布局");24 this.setLocationRelativeTo(null);//设置窗体居中25 26 this.addContent();27 28 this.setVisible(true);29 }30 31 32 public void addContent(){33 Container con = this.getContentPane();34 con.setLayout(new BorderLayout());35 36 JButton btn1 = new JButton("确定1");37 JButton btn2 = new JButton("确定2");38 JButton btn3 = new JButton("确定3");39 JButton btn4 = new JButton("确定4");40 JButton btn5 = new JButton("确定5");41 42 con.add(btn1, BorderLayout.EAST);43 con.add(btn2, BorderLayout.WEST);44 con.add(btn3, BorderLayout.NORTH);45 con.add(btn4, BorderLayout.SOUTH);46 con.add(btn5, BorderLayout.CENTER);47 }48 49 50 public static void main(String[] args) {51 new BorderLayoutTest();52 }53 }
1 package com.gui_layout; 2 3 import java.awt.Container; 4 import java.awt.FlowLayout; 5 6 import javax.swing.JButton; 7 import javax.swing.JFrame; 8 import javax.swing.JLabel; 9 10 /**11 * Date: 2016-3-16-上午9:15:3612 * Class_name: FlowLayoutTest.java13 * Package_name: com.lovo.demo_1614 * Author: ZhangYue15 * Description: 16 */17 public class FlowLayoutTest extends JFrame{18 19 public FlowLayoutTest(){20 this.setSize(900,600);21 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);22 this.setTitle("流布局");23 this.setLocationRelativeTo(null);//设置窗体居中24 25 this.addContent();26 27 this.setVisible(true);28 }29 30 31 public void addContent(){32 Container con = this.getContentPane();33 34 con.setLayout(new FlowLayout());35 36 JLabel label = new JLabel("Test");37 JButton btn = new JButton("根据元素内容确定大小");38 JButton btn2 = new JButton("确定");39 JButton btn3 = new JButton("确定");40 JButton btn4 = new JButton("确定");41 JButton btn5 = new JButton("确定5");42 43 con.add(label);44 con.add(btn);45 con.add(btn2);46 con.add(btn3);47 con.add(btn4);48 con.add(btn5);49 }50 51 52 public static void main(String[] args) {53 new FlowLayoutTest();54 }55 56 }
1 package com.gui_layout; 2 3 import java.awt.BorderLayout; 4 import java.awt.Container; 5 import java.awt.GridLayout; 6 7 import javax.swing.JButton; 8 import javax.swing.JFrame; 9 10 /**11 * Date: 2016-3-16-上午10:25:2912 * Class_name: GridLayoutTest.java13 * Package_name: com.lovo.demo_1614 * Author: ZhangYue15 * Description: 16 */17 public class GridLayoutTest extends JFrame {18 19 public GridLayoutTest(){20 this.setSize(900,600);21 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);22 this.setTitle("网格布局");23 this.setLocationRelativeTo(null);//设置窗体居中24 25 this.addContent();26 27 this.setVisible(true);28 }29 30 31 public void addContent(){32 Container con = this.getContentPane();33 con.setLayout(new GridLayout(2,3));34 35 JButton btn1 = new JButton("确定1");36 JButton btn2 = new JButton("确定2");37 JButton btn3 = new JButton("确定3");38 JButton btn4 = new JButton("确定4");39 JButton btn5 = new JButton("确定5");40 JButton btn6 = new JButton("确定6");41 JButton btn7 = new JButton("确定7");42 JButton btn8 = new JButton("确定8");43 JButton btn9 = new JButton("确定9");44 45 con.add(btn1);46 con.add(btn2);47 con.add(btn3);48 con.add(btn4);49 con.add(btn5);50 con.add(btn6);51 con.add(btn7);52 con.add(btn8);53 con.add(btn9);54 }55 56 57 public static void main(String[] args) {58 new GridLayoutTest();59 }60 61 }
录入学生信息,写入文件,也可以显示学生信息:
1 package com.io.showStudentInfo; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.GridLayout; 6 import java.awt.event.ActionEvent; 7 import java.awt.event.ActionListener; 8 import java.util.HashSet; 9 import java.util.Set; 10 11 import javax.swing.BorderFactory; 12 import javax.swing.JButton; 13 import javax.swing.JComboBox; 14 import javax.swing.JFrame; 15 import javax.swing.JLabel; 16 import javax.swing.JPanel; 17 import javax.swing.JScrollBar; 18 import javax.swing.JScrollPane; 19 import javax.swing.JTextArea; 20 import javax.swing.JTextField; 21 22 import com.io.showStudentInfo.Student; 23 24 /** 25 //所有面板和首层容器都设置绝对布局,然后面板里边所有东西都设置位置和大小,面板也设置位置和大小,绝对不会错 26 * @Author: YuanqiuChen 27 * @Date:2016-3-18-下午8:13:57 28 * 29 *录入学生信息,写入文件,也可以显示学生信息 30 * 31 */ 32 33 public class ShowStudentInfo extends JFrame{ 34 35 private JButton saveInfo, showInfo; 36 private JLabel laName, laAge, laGender, laScore; 37 private JTextField textName, textAge, textScore; 38 private JTextArea showText; 39 private JComboBox boxGender; 40 41 private SetallStu = new HashSet (); 42 43 public ShowStudentInfo(){ 44 init(); 45 // this.pack(); 46 this.setSize(350, 600); 47 48 this.setTitle("学生信息录入系统"); 49 this.setLocationRelativeTo(null); 50 this.setResizable(false); 51 this.setVisible(true); 52 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 53 54 } 55 56 //初始化 57 private void init(){ 58 addContent(); 59 addEventHandler(); 60 } 61 62 private void addContent() { 63 JPanel mianBan1 = new JPanel(); 64 mianBan1.setLayout(null); 65 66 saveInfo = new JButton("录入信息"); 67 saveInfo.setBounds(60, 200, 100, 35); 68 saveInfo.setFont(new Font("宋体", Font.PLAIN, 16)); 69 70 showInfo = new JButton("显示信息"); 71 showInfo.setBounds(180, 200, 100, 35); 72 showInfo.setFont(new Font("宋体", Font.PLAIN, 16)); 73 74 laName = new JLabel("姓名:"); 75 laName.setBounds(40, 40, 80, 35); 76 laName.setFont(new Font("宋体", Font.PLAIN, 20)); 77 78 laAge = new JLabel("年龄:"); 79 laAge.setBounds(40, 80, 80, 35); 80 laAge.setFont(new Font("宋体", Font.PLAIN, 20)); 81 82 laGender = new JLabel("性别:"); 83 laGender.setBounds(40, 160, 80, 35); 84 laGender.setFont(new Font("宋体", Font.PLAIN, 20)); 85 86 laScore = new JLabel("成绩:"); 87 laScore.setBounds(40,120, 80, 35); 88 laScore.setFont(new Font("宋体", Font.PLAIN, 20)); 89 90 textName = new JTextField(); 91 textName.setBounds(120,40, 175, 35); 92 textName.setFont(new Font("宋体", Font.PLAIN, 20)); 93 94 textAge = new JTextField(); 95 textAge.setBounds(120,80, 175, 35); 96 textAge.setFont(new Font("宋体", Font.PLAIN, 20)); 97 98 textScore = new JTextField(); 99 textScore.setBounds(120,120, 175, 35);100 textScore.setFont(new Font("宋体", Font.PLAIN, 20));101 102 boxGender = new JComboBox(new String[]{"男","女"});103 boxGender.setBounds(120,160, 75, 35);104 boxGender.setFont(new Font("宋体", Font.PLAIN, 20));105 106 //文本域107 showText = new JTextArea();108 // showText.setBounds(10, 250, 320, 300);//109 showText.setFont(new Font("宋体", Font.PLAIN, 20));110 showText.setBorder(BorderFactory.createLineBorder(Color.BLACK));111 112 //设置不可以直接编辑JTextArea里的内容,可以复制113 showText.setEditable(false);114 115 //设置自动换行116 // showText.setLineWrap(true);117 118 //实现滚动,后边两个是初始化视图显示水平和垂直滚动条119 // JScrollPane mianBan2=new JScrollPane(showText,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);120 JScrollPane mianBan2=new JScrollPane(showText);121 mianBan2.setBounds(10, 250, 320, 300);122 123 124 mianBan1.add(laName);mianBan1.add(textName);125 mianBan1.add(laAge);mianBan1.add(textAge);126 mianBan1.add(laGender);mianBan1.add(boxGender);127 mianBan1.add(laScore);mianBan1.add(textScore);128 mianBan1.add(saveInfo);mianBan1.add(showInfo);129 130 // mianBan1.setBounds(0, 0, 340, 250);131 132 // this.setLayout(null);133 this.add(mianBan2);134 this.add(mianBan1);135 136 }137 138 private void addEventHandler() {139 this.saveInfo.addActionListener(new ActionListener() {140 public void actionPerformed(ActionEvent e) {141 showText.setText("");142 if(textName.getText().trim().equals("")){143 showText.setText("请输入姓名!");144 return;145 }146 if(!(textAge.getText().trim().matches("[1-9]{1}[0-9]?"))){147 showText.setText("请输入有效年龄!(1-99)");148 return;149 }150 if(!(textScore.getText().trim().matches("(0|100|[1-9]{1}[0-9]?)"))){151 showText.setText("请输入有效成绩!(0-100)");152 return;153 }154 String gender = (String)boxGender.getSelectedItem();155 156 allStu = StudentStream.readStudents("file/student.txt");157 158 allStu.add(new Student(textName.getText(), Integer.parseInt(textAge.getText()), gender, Integer.parseInt(textScore.getText())));159 StudentStream.saveStudents(allStu, "file/student.txt");160 showText.setText("存入成功");161 162 }});163 164 this.showInfo.addActionListener(new ActionListener() {165 public void actionPerformed(ActionEvent e) {166 allStu = StudentStream.readStudents("file/student.txt");167 showText.setText("");168 169 if(allStu.isEmpty()){170 showText.setText("还没有任何信息");171 return;172 }173 174 showText.setText("姓名\t年龄\t性别\t成绩\n");175 for(Student su : allStu){176 showText.append(su.toString() + "\n");177 }178 }});179 180 }181 182 public static void main(String[] args) {183 new ShowStudentInfo();184 }185 186 }
1 package com.io.showStudentInfo; 2 3 import java.io.Serializable; 4 5 public class Student implements Serializable{ 6 7 private String name; 8 private int age; 9 private String gender;10 private int score;11 12 13 public Student() {14 super();15 }16 17 18 public Student(String name, int age, String gender, int score) {19 super();20 this.name = name;21 this.age = age;22 this.gender = gender;23 this.score = score;24 }25 26 27 public int getScore() {28 return score;29 }30 31 32 public void setScore(int score) {33 this.score = score;34 }35 36 37 public String getName() {38 return name;39 }40 public void setName(String name) {41 this.name = name;42 }43 public int getAge() {44 return age;45 }46 public void setAge(int age) {47 this.age = age;48 }49 public String getGender() {50 return gender;51 }52 public void setGender(String gender) {53 this.gender = gender;54 }55 56 public String toString(){57 58 return this.getName() + "\t" + this.getAge() + "\t" + this.getGender() + "\t" + this.getScore();59 60 }61 62 63 64 }
1 package com.io.showStudentInfo; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.FileReader; 8 import java.io.IOException; 9 import java.io.InputStream;10 import java.io.ObjectInputStream;11 import java.io.ObjectOutputStream;12 import java.io.OutputStream;13 import java.util.HashSet;14 import java.util.Set;15 16 import com.io.showStudentInfo.Student;17 18 /**19 * Date: 2016-3-18-下午4:00:5320 * Class_name: StudentStream.java21 * Package_name: com.lovo.demo_17_222 * Author: ZhangYue23 * Description: 24 */25 public class StudentStream {26 27 public static void saveStudents(SetallStu, String filePath){28 try {29 30 File file= new File(filePath);31 if(!file.exists()){32 file.createNewFile();33 }34 35 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));36 37 out.writeObject(allStu);38 39 out.close();40 } catch (FileNotFoundException e) {41 e.printStackTrace();42 } catch (IOException e) {43 // TODO Auto-generated catch block44 e.printStackTrace();45 }46 }47 48 @SuppressWarnings("unused")49 public static Set readStudents(String filePath){50 51 try {52 53 //三种方法,判断文件是否为空54 if(new File(filePath).length() == 0){55 return new HashSet ();56 } 57 // if(new FileInputStream(new File(filePath)).read() == -1){58 // return new HashSet ();59 // } 60 // if(new FileInputStream(new File(filePath)).available() == 0){61 // return new HashSet ();62 // }63 64 65 ObjectInputStream inObj = new ObjectInputStream(new FileInputStream(filePath));66 67 Object obj = inObj.readObject();68 69 @SuppressWarnings("unchecked")70 Set stu = (Set )obj;71 72 inObj.close();73 return stu;74 } catch (FileNotFoundException e) {75 e.printStackTrace();76 } catch (IOException e) {77 e.printStackTrace();78 } catch (ClassNotFoundException e) {79 e.printStackTrace();80 }81 82 return null;83 }84 }