3,13Java基础知识:GUI全部

GUI 图形用户界面

JavaGUI的容器
首层容器:JWindow JFrame(默认BorderLayout) JDialog
中间容器:JPanel(默认FLowlayout)

内容面板:Container

AWT:使用操作系统本身,跨平台时效果不一样
Swing:效果一样,跨平台

Swing 程序建立步骤:
①建立容器
②建立组件
③组件添加到容器
④设置布局
⑤添加事件

Swing 容器
JApplet 浏览器中运行的容器
JFrame 顶层容器,不能包含在其他容器中
JPanel 举行区域,页面
JScrollPane
JDialog

布局管理器:
主要有FLowlayout 从左到右从上到下
BorderLayout EWSN Center
GridLayout(行,列,行宽,列宽);
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 }
MyFrame
  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 }
SimpleFrame
  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 block
168                 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 }
GuessNumUI
  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             @Override
111             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 }
ChangeColor
  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 }
Login

布局:

 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:46
13  * Class_name: BorderLayoutTest.java
14  * Package_name: com.lovo.demo_16
15  * Author: ZhangYue
16  * 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 }
BorderLayoutTest
 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:36
12  * Class_name: FlowLayoutTest.java
13  * Package_name: com.lovo.demo_16
14  * Author: ZhangYue
15  * 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 }
FlowLayoutTest
 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:29
12  * Class_name: GridLayoutTest.java
13  * Package_name: com.lovo.demo_16
14  * Author: ZhangYue
15  * 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 }
GridLayoutTest

录入学生信息,写入文件,也可以显示学生信息:

  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 Set<Student> allStu = new HashSet<Student>();    
 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("姓名	年龄	性别	成绩
");
175                 for(Student su : allStu){
176                     showText.append(su.toString() + "
");
177                 }
178             }});
179         
180     }
181 
182     public static void main(String[] args) {
183         new ShowStudentInfo();
184     }
185 
186 }
ShowStudentInfo
 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() + "	" + this.getAge() + "	" + this.getGender() + "	" + this.getScore();
59         
60     }
61     
62     
63 
64 }
Student
 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:53
20  * Class_name: StudentStream.java
21  * Package_name: com.lovo.demo_17_2
22  * Author: ZhangYue
23  * Description: 
24  */
25 public class StudentStream {
26     
27     public static void saveStudents(Set<Student> allStu, 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 block
44             e.printStackTrace();
45         }
46     }
47 
48     @SuppressWarnings("unused")
49     public static Set<Student> readStudents(String filePath){
50     
51         try {
52             
53             //三种方法,判断文件是否为空
54             if(new File(filePath).length() == 0){
55                 return new HashSet<Student>();
56             }                
57 //            if(new FileInputStream(new File(filePath)).read() == -1){
58 //                return new HashSet<Student>();
59 //            }    
60 //            if(new FileInputStream(new File(filePath)).available() == 0){
61 //                return new HashSet<Student>();
62 //            }
63 
64 
65             ObjectInputStream inObj = new ObjectInputStream(new FileInputStream(filePath));
66             
67             Object obj = inObj.readObject();
68             
69             @SuppressWarnings("unchecked")
70             Set<Student> stu = (Set<Student>)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 }
StudentStream
原文地址:https://www.cnblogs.com/chenyuanqiu2008/p/5309049.html