zoukankan      html  css  js  c++  java
  • GUI

    GUI

      定义规则:

        大小:先水平、后垂直;先宽、后高(单位像素)

        位置:原点:x:0/y:0(原点定位于左上角)

        窗体关闭即退出:

      1. 界面元素:(1)容器:

             (2)组件:

      2.布局——嵌套布局

      3.事件处理

       

      标题栏占25, 设置窗体面板大小是减去标题栏的内容面板  this.setSize(500, 400);//设置窗体大小--像素

     SWT开发:

      Java.awt包(关于界面类):容器类与组件类:带外观(过时不在使用)

                                工具类:颜色类、字体类

      Java.swing包:容器类与组件类(带Jxxxx)

      界面元素:(1)容器:4种首层容器:Jwindow(最原始容器)/JFrame(原始容器升级版)/JDialog(对话框)/JApplet(Java小应用程序);

             (2)组件:标签;文本框(密码框);按钮;下拉列表;单选;复选;文本域

    容器类JFrame:

    public class MyFrame extends JFrame{
    	
      private Container contentP;//内容面板
    	
      private JLabel msgLab;//文字标签
    	
      private JLabel imgLab;//图片标签
    	
      private JTextField usernameTxt;//文本框
    	
      private JPasswordField pwdTxt;//密码框
    	
      private JButton okBtn;//按钮
    	
      private JButton getMoentyBtn;//取钱按钮
    	
      private JComboBox<String> teacherCmb;//下拉列表
    	
      private JTextArea selfArea;//文本域
    	
      private JRadioButton maleRad;//单选框
    	
      private JRadioButton femaleRad;
    	
      private JCheckBox hobbitBox;//复选框
    		
      public MyFrame(){
    	Toolkit tk = Toolkit.getDefaultToolkit();//获取工具对象
    	int screenWidth = (int)tk.getScreenSize().getWidth();
    	int screenHeight = (int)tk.getScreenSize().getHeight();
    	this.setSize(500, 400);//设置窗体大小--像素
    	this.setLocation((screenWidth-500)/2, (screenHeight-400)/2);//设置窗体的位置
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭即退出程序
    	this.setTitle("我的第一个GUI窗体");//标题栏设置标题
    	this.setIconImage(tk.createImage("image/icon.png"));//设置标题栏图标
    	this.setResizable(false);//设置窗体改变大小的能力
    	this.addContent();
    	this.setVisible(true);//设置该窗体可见
      }
    	
      private void addContent(){
    	this.contentP = this.getContentPane();//获取内容面板
    	this.contentP.setBackground(Color.WHITE);//设置窗体背景色
    	this.contentP.setLayout(null);//设置布局管理器为null---代表放入该容器的组件的大小位置全靠自定义
    		
    	//文本标签
    	this.msgLab = new JLabel("用户名:");//产生对象
    	this.msgLab.setText("用户名:");
    //	this.msgLab.setBorder(BorderFactory.createLineBorder(Color.BLACK));//给标签设置边框--调试用
    	this.msgLab.setFont(new Font("微软雅黑",Font.BOLD,16));//设置字体
    	this.msgLab.setForeground(new Color(82,254,211));//设置字体颜色
    	this.msgLab.setBounds(100, 20, 80, 30);//设置大小位置
    	this.contentP.add(this.msgLab);//放入容器
    		
    	//图片标签
    	this.imgLab = new JLabel(new ImageIcon("image/fish.jpg"));
    	this.imgLab.setBounds(200, 20, 243, 167);
    	this.contentP.add(this.imgLab);
    		
    	//文本框
    	this.usernameTxt = new JTextField();
    	this.usernameTxt.setBounds(20, 70, 100, 30);
    	this.usernameTxt.setFont(new Font("微软雅黑",Font.BOLD,16));//设置字体
    	this.usernameTxt.setForeground(new Color(82,254,211));//设置字体颜色
    //	this.usernameTxt.setEditable(false);//设置文本框不可编辑
    	this.contentP.add(this.usernameTxt);
    		
    	//密码框
    	this.pwdTxt = new JPasswordField();
    	this.pwdTxt.setEchoChar('*');
    	this.pwdTxt.setFont(new Font("微软雅黑",Font.BOLD,16));//设置字体
    	this.pwdTxt.setForeground(new Color(82,254,211));//设置字体颜色
    	this.pwdTxt.setBounds(20, 120, 100, 30);
    	this.contentP.add(this.pwdTxt);
    		
    	//按钮
    	this.okBtn = new JButton("确定");
    	this.okBtn.setText("确定");
    	this.okBtn.setFont(new Font("微软雅黑",Font.BOLD,16));//设置字体
    	this.okBtn.setForeground(new Color(82,254,211));//设置字体颜色
    	this.okBtn.setBounds(20, 160, 100, 30);
    	this.contentP.add(this.okBtn);
    		
    	this.getMoentyBtn = new JButton(new ImageIcon("image/buttonGet.jpg"));
    	this.getMoentyBtn.setBounds(20, 200, 140, 50);
    	this.contentP.add(this.getMoentyBtn);
    		
    	//下拉列表
    	this.teacherCmb = new JComboBox<String>();
    	this.teacherCmb.addItem("周春艳");
    	this.teacherCmb.addItem("刘弯弯");
    	this.teacherCmb.addItem("万洁");
    	this.teacherCmb.addItem("张欣");
    	this.teacherCmb.addItem("何茹薇");
    	this.teacherCmb.setEditable(true);//设置为可编辑为true
    	this.teacherCmb.setBounds(20, 260, 100, 20);
    	this.contentP.add(this.teacherCmb);
    		
    	//文本域
    	this.selfArea = new JTextArea();
    	JScrollPane scrollP = new JScrollPane(this.selfArea);
    	scrollP.setBounds(200, 200, 280, 160);
    	this.contentP.add(scrollP);
    		
    	//单选框
    	this.maleRad = new JRadioButton("男");
    	this.femaleRad = new JRadioButton("女");
    	this.maleRad.setBounds(20, 290, 50, 25);
    	this.femaleRad.setBounds(80, 290, 50, 25);
    	this.maleRad.setBackground(Color.WHITE);
    	this.femaleRad.setBackground(Color.WHITE);
    	this.maleRad.setSelected(true);//设置默认选中
    	this.contentP.add(this.maleRad);
    	this.contentP.add(this.femaleRad);
    	ButtonGroup bGroup = new ButtonGroup();//按钮分组
    	bGroup.add(this.maleRad);
    	bGroup.add(this.femaleRad);
    		
    	//复选框
    	this.hobbitBox = new JCheckBox("兴趣爱好");
    	this.hobbitBox.setBounds(20, 325, 100, 25);
    	this.contentP.add(this.hobbitBox);
      }
    	
    }

    public static void main(String[] args) {   // TODO Auto-generated method stub   //容器类JFrame   MyFrame frame = new MyFrame(); }

    布局layut

      最常用的4种布局管理器:“只要使用布局管理器,任何自定义布局无法使用”

    1.边界布局(应用最多):BorderFrame

      布局方式:把整个容器划分为5个部分:东西南北中,南北要贯通,中间最大(不仅是中间的范围最大,权利也最大“周边不存在的时候,中间会占领周边”),当中间不存在的时候周边也不能占领中间;

      使用场景:不是用来直接放组件的,而是用来放置子容器(中间容器)的;

    public class BorderFrame extends JFrame {
    	
      private Container contentP;//内容面板
    	
      private JButton btn1;
      private JButton btn2;
      private JButton btn3;
      private JButton btn4;
      private JButton btn5;
    	
      public BorderFrame(){
    	Toolkit tk = Toolkit.getDefaultToolkit();//获取工具对象
    	int screenWidth = (int)tk.getScreenSize().getWidth();
    	int screenHeight = (int)tk.getScreenSize().getHeight();
    	this.setSize(500, 400);//设置窗体大小--像素
    	this.setLocation((screenWidth-500)/2, (screenHeight-400)/2);//设置窗体的位置
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭即退出程序
    	this.setTitle("我的第一个GUI窗体");//标题栏设置标题
    	this.setIconImage(tk.createImage("image/icon.png"));//设置标题栏图标
    	this.setResizable(false);//设置窗体改变大小的能力
    	this.addContent();
    	this.setVisible(true);//设置该窗体可见
      }
    	
    	
      private void addContent(){
    	this.contentP = this.getContentPane();//获取内容面板
    	this.contentP.setBackground(Color.WHITE);//设置窗体背景色
    	this.contentP.setLayout(new BorderLayout());//设置布局管理器为边界布局管理器---在默认的情况下,JFrame的内容面板就是边界布局
    		
    	this.btn1 = new JButton("button1");
    	this.btn2 = new JButton("button2");
    	this.btn3 = new JButton("button3");
    	this.btn3.setFont(new Font("宋体",Font.BOLD,28));
    	this.btn4 = new JButton("button4");
    	this.btn5 = new JButton("button5button5");
    	this.contentP.add(this.btn1);//直接add就是默认往中间放
    	this.contentP.add(BorderLayout.NORTH, this.btn2);
    	this.contentP.add(BorderLayout.SOUTH,this.btn3);
    	this.contentP.add(BorderLayout.EAST,this.btn4);
    	this.contentP.add(BorderLayout.WEST,this.btn5);
    		
      }
    }

    public static void main(String[] args) {
      // TODO Auto-generated method stub
    
      BorderFrame bframe = new BorderFrame();
    }
    

    2.流布局:FlowFrame

      布局方式:按从左往右,从上往下,由中间开始的方式依次排放组件;

           组件大小要根据组件内容那个确定;

           组件的位置随着容器大小的改变而改变;

      使用场景:流布局是用来放置组件的,而不是用来放中间容器的;最好只做单行布局; 

    public class FlowFrame extends JFrame {
      private Container contentP;//内容面板
    	
      private JButton btn1;
      private JButton btn2;
      private JButton btn3;
      private JButton btn4;
      private JButton btn5;
      private JTextField inputTxt;
    	
      public FlowFrame(){
    	Toolkit tk = Toolkit.getDefaultToolkit();//获取工具对象
    	int screenWidth = (int)tk.getScreenSize().getWidth();
    	int screenHeight = (int)tk.getScreenSize().getHeight();
    	this.setSize(500, 400);//设置窗体大小--像素
    	this.setLocation((screenWidth-500)/2, (screenHeight-400)/2);//设置窗体的位置
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭即退出程序
    	this.setTitle("我的第一个GUI窗体");//标题栏设置标题
    	this.setIconImage(tk.createImage("image/icon.png"));//设置标题栏图标
    	this.setResizable(true);//设置窗体改变大小的能力
    	this.addContent();
    	this.setVisible(true);//设置该窗体可见
      }
      private void addContent(){ this.contentP = this.getContentPane();//获取内容面板 this.contentP.setBackground(Color.WHITE);//设置窗体背景色 this.contentP.setLayout(new FlowLayout());//设置布局管理器为流布局管理器 this.btn1 = new JButton("button1"); this.btn2 = new JButton("button2"); this.btn3 = new JButton("button3"); this.btn3.setFont(new Font("宋体",Font.BOLD,28)); this.btn4 = new JButton("button4"); this.btn5 = new JButton("button5button5"); this.inputTxt = new JTextField(); this.inputTxt.setColumns(10); this.add(this.btn1); this.add(this.btn2); this.add(this.btn3); this.add(this.btn4); this.add(this.btn5); this.add(this.inputTxt);   } }
    public static void main(String[] args) {
      // TODO Auto-generated method stub
      FlowFrame fFrame = new FlowFrame();
    }
    

    3.网格布局:GridFrame:

      布局方式:按行列将整个容器划分为等大的区域,放入的子容器的数目如果与设置的数目不等,优先保证行改变列

      使用场景:不是用来放置组件的,而是用来放置容器(中间容器)的。

           使用场景:不是用来放置组件的,而是用来放置容器(中间容器)的。

    public class GridFrame extends JFrame {
    	private Container contentP;//内容面板
    	
    	private JButton btn1;
    	private JButton btn2;
    	private JButton btn3;
    	private JButton btn4;
    	private JButton btn5;
    	
      public GridFrame(){ Toolkit tk = Toolkit.getDefaultToolkit();//获取工具对象 int screenWidth = (int)tk.getScreenSize().getWidth(); int screenHeight = (int)tk.getScreenSize().getHeight(); this.setSize(500, 400);//设置窗体大小--像素 this.setLocation((screenWidth-500)/2, (screenHeight-400)/2);//设置窗体的位置 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭即退出程序 this.setTitle("我的第一个GUI窗体");//标题栏设置标题 this.setIconImage(tk.createImage("image/icon.png"));//设置标题栏图标 this.setResizable(false);//设置窗体改变大小的能力 this.addContent(); this.setVisible(true);//设置该窗体可见   }   private void addContent(){ this.contentP = this.getContentPane();//获取内容面板 this.contentP.setBackground(Color.WHITE);//设置窗体背景色 this.contentP.setLayout(new GridLayout(2,3));//设置布局管理器为网格布局管理器 this.btn1 = new JButton("button1"); this.btn2 = new JButton("button2"); this.btn3 = new JButton("button3"); this.btn3.setFont(new Font("宋体",Font.BOLD,28)); this.btn4 = new JButton("button4"); this.btn5 = new JButton("button5"); this.contentP.add(this.btn1); this.contentP.add(this.btn2); this.contentP.add(this.btn3); this.contentP.add(this.btn4); this.contentP.add(this.btn5);   } }

    public static void main(String[] args) {
      // TODO Auto-generated method stub
      GridFrame gFrame = new GridFrame();
    }

    面板类JPand:面板嵌套


    1.定义内容面板:设置分割框体:

    public class GameFrame extends JFrame {
    	
      private Container contentP;
    	
      private UpPanel upP;
    	
      private MidPanel midP;   private DownPanel dnP;   public GameFrame(){ Toolkit tk = Toolkit.getDefaultToolkit();//获取工具对象 int screenWidth = (int)tk.getScreenSize().getWidth(); int screenHeight = (int)tk.getScreenSize().getHeight(); this.setSize(300, 300);//设置窗体大小--像素 this.setLocation((screenWidth-300)/2, (screenHeight-300)/2);//设置窗体的位置 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭即退出程序 this.setTitle("猜数字游戏");//标题栏设置标题 this.setIconImage(tk.createImage("image/icon.png"));//设置标题栏图标 this.setResizable(false);//设置窗体改变大小的能力 this.addContent(); this.setVisible(true);//设置该窗体可见   }   private void addContent() { // TODO Auto-generated method stub this.contentP = this.getContentPane(); this.contentP.setLayout(new GridLayout(3,1));//用网格布局划分框体 this.upP = new UpPanel(); this.midP = new MidPanel(); this.dnP = new DownPanel(this); this.contentP.add(this.upP); this.contentP.add(this.midP); this.contentP.add(this.dnP); }   public Container getContentP() { return contentP;   }   public void setContentP(Container contentP) { this.contentP = contentP;   }   public UpPanel getUpP() { return upP;   }   public void setUpP(UpPanel upP) { this.upP = upP;   }   public MidPanel getMidP() { return midP;   }   public void setMidP(MidPanel midP) { this.midP = midP;   }   public DownPanel getDnP() { return dnP;   }   public void setDnP(DownPanel dnP) { this.dnP = dnP;   } }

    2.先设置布局上框架:

    public class UpPanel extends JPanel {
    	
      private JTextField inputTxt;//设置文本框
    	
      public UpPanel() {
    	// TODO Auto-generated constructor stub
    	this.setBackground(Color.LIGHT_GRAY);
    	this.setLayout(new FlowLayout());//JPanel默认的布局管理器就是流布局
    	this.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK), "Your Guess"));
         //(Color.BLACK):边框颜色, "Your Guess":设置边框文字
    this.inputTxt = new JTextField(); this.inputTxt.setColumns(10); this.add(this.inputTxt);   }   public JTextField getInputTxt() { return inputTxt;   }   public void setInputTxt(JTextField inputTxt) { this.inputTxt = inputTxt;   } }

    3.设置中间框架:

    public class MidPanel extends JPanel {
    	
      private JLabel msgLab;
    	
      public MidPanel() {
    	// TODO Auto-generated constructor stub
    	this.setBackground(Color.LIGHT_GRAY);
    	this.setLayout(null);
    	this.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK), "Hint"));
    		
    	this.msgLab = new JLabel("Let's Play HiLo");
    	this.msgLab.setBounds(100, 30, 100, 30);
    	this.add(this.msgLab);
      }
    
      public JLabel getMsgLab() {
    	return msgLab;
      }
    
      public void setMsgLab(JLabel msgLab) {
    	this.msgLab = msgLab;
      }
    

    4.设置下部框体:

    4-1.先设置边界布局:并设置按钮

    public class DownPanel extends JPanel {
    	
      private ButtonPanel btnP;//设置按钮
    	
      public DownPanel(GameFrame gm) {
    	// TODO Auto-generated constructor stub
    	this.setBackground(Color.LIGHT_GRAY);
    	this.setLayout(new BorderLayout());
    		
    	this.btnP = new ButtonPanel(gm);
    	this.add(BorderLayout.SOUTH,this.btnP);
      }
    
      public ButtonPanel getBtnP() {
    	return btnP;
      }
    
      public void setBtnP(ButtonPanel btnP) {
    	this.btnP = btnP;
      }
    }
    

    4-2.按钮设置

    public class ButtonPanel extends JPanel {
    	
      private JButton enterBtn;
    	
      private JButton cancelBtn;
    		
    	this.setBackground(Color.LIGHT_GRAY);
    	this.enterBtn = new JButton("确定");
    	this.cancelBtn = new JButton("取消");
    		
    	this.add(this.enterBtn);
    	this.add(this.cancelBtn);
    		
    	this.enterBtn.addActionListener(new ActionListener(){
    
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			// TODO Auto-generated method stub
    			//首先获取文本框中的输入
    			//做输入有效性校验---正则
    			//校验通过,转换为整数,再和随机数比较
    			//然后根据比较结果,修改标签的显示信息
    				
    				
    		}
    			
    	});
      }

      public JButton getEnterBtn() { return enterBtn;   }   public void setEnterBtn(JButton enterBtn) { this.enterBtn = enterBtn;   }   public JButton getCancelBtn() { return cancelBtn;   }   public void setCancelBtn(JButton cancelBtn) { this.cancelBtn = cancelBtn;   } }
    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    	GameFrame game = new GameFrame();
    }
    

    事件处理:

      事件:按钮——事件源对象

      委托事件模型:(1)事件源:——绑定关系——2)监听器对象:     

        一个监听器可以绑定多个事件源;一个事件源可以绑定多个监听器;监听器有各自的监听事件类型;

     

      步骤:1.写好界面,事件源对象已经有了;

         2.选择合适的监听器类型;

         3.书写监听器的实现类(写好处理代码);

         4.产生监听器对象和事件源对象进行绑定;

        Event + Listrener:事件源监听器接口:Action(动作)

      监听器实现方式一:

        单独书写一个类,实现监听器接口。

        特点:1.可以让一个监听器类监听多个事件源,用if判断进行分割;但这么做违背了单一职责、因此从设计上每一个事件源书写单独的监听器类。

           2.如果需要操作费时间远的其它组件,只能传参。

      监听器实现方式二:

        让容器类充当监听器。

        特点:1.只能让一个监听器类监听多个事件源,用if判断进行分割;铁定违背单一职责。

           2.操作本容器的组件或中间容器,不用传参;

      监听器实现方式三:

        匿名内部类——在跟事件源对象绑定监听器对象的同时,实现监听器类。

        特点:1.每个事件源对象拥有独立的监听器类,同时没有多的java文件。即满足单一,又没有增加文件量。

           2.操作外部容器类的任何组件或子容器不用传参。

    public class ColorFrame extends JFrame{	
    	private Container contentP;
    	
    	private JButton redBtn;
    	
    	private JButton greenBtn;
    	
    	public ColorFrame(){
    		Toolkit tk = Toolkit.getDefaultToolkit();//获取工具对象
    		int screenWidth = (int)tk.getScreenSize().getWidth();
    		int screenHeight = (int)tk.getScreenSize().getHeight();
    		this.setSize(300, 300);//设置窗体大小--像素
    		this.setLocation((screenWidth-300)/2, (screenHeight-300)/2);//设置窗体的位置
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭即退出程序
    		this.setTitle("我的第一个GUI窗体");//标题栏设置标题
    		this.setIconImage(tk.createImage("image/icon.png"));//设置标题栏图标
    		this.setResizable(false);//设置窗体改变大小的能力
    		this.addContent();
    		this.setVisible(true);//设置该窗体可见
    	}
    
    	private void addContent() {
    		// TODO Auto-generated method stub
    		this.contentP = this.getContentPane();
    		this.contentP.setBackground(Color.WHITE);
    		this.contentP.setLayout(new FlowLayout());
    		
    		//事件源对象
    		this.redBtn = new JButton("红色");
    		this.redBtn.setActionCommand("red");
    		this.greenBtn = new JButton("绿色");
    		this.greenBtn.setActionCommand("green");
    				
    		this.redBtn.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				ColorFrame.this.contentP.setBackground(Color.RED);
    				ColorFrame.this.redBtn.setEnabled(false);
    				ColorFrame.this.greenBtn.setEnabled(true);
    			}
    		});
    		
    		this.greenBtn.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				ColorFrame.this.contentP.setBackground(Color.GREEN);
    				ColorFrame.this.redBtn.setEnabled(true);
    				ColorFrame.this.greenBtn.setEnabled(false);
    			}
    		});
    		
    		
    		this.contentP.add(this.redBtn);
    		this.contentP.add(this.greenBtn);
    	}	
    }
    

    读取文件:

    public class LoginFrame extends JFrame {
    	
    	private Container contentP;
    	
    	private JLabel nameLab;
    	
    	private JLabel pwdLab;
    	
    	private JTextField nameTxt;
    	
    	private JPasswordField pwdTxt;
    	
    	private JButton loginBtn;
    	
    	private Properties props;
    	
    	public LoginFrame() {
    		// TODO Auto-generated constructor stub
    		Toolkit tk = Toolkit.getDefaultToolkit();//获取工具对象
    		int screenWidth = (int)tk.getScreenSize().getWidth();
    		int screenHeight = (int)tk.getScreenSize().getHeight();
    		this.setSize(300, 300);//设置窗体大小--像素
    		this.setLocation((screenWidth-300)/2, (screenHeight-300)/2);//设置窗体的位置
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭即退出程序
    		this.setTitle("用户登录");//标题栏设置标题
    		this.setIconImage(tk.createImage("image/icon.png"));//设置标题栏图标
    		this.setResizable(false);//设置窗体改变大小的能力
    		this.addContent();
    		this.setVisible(true);//设置该窗体可见
    		
    		this.props = new Properties();
    		try {
    			props.load(new FileInputStream("user.properties"));
    		} catch (FileNotFoundException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		} catch (IOException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
    	}
    
    	private void addContent() {
    		// TODO Auto-generated method stub
    		this.contentP = this.getContentPane();
    		this.contentP.setBackground(Color.WHITE);
    		this.contentP.setLayout(null);
    		
    		this.nameLab = new JLabel("用户名:");
    		this.nameLab.setBounds(20, 20, 80, 30);
    		this.contentP.add(this.nameLab);
    		
    		this.pwdLab = new JLabel("密     码:");
    		this.pwdLab.setBounds(20, 70, 80, 30);
    		this.contentP.add(this.pwdLab);
    		
    		this.nameTxt = new JTextField();
    		this.nameTxt.setBounds(110, 25, 100, 20);
    		this.contentP.add(this.nameTxt);
    		
    		this.pwdTxt = new JPasswordField();
    		this.pwdTxt.setBounds(110, 75, 100, 20);
    		this.contentP.add(this.pwdTxt);
    		
    		this.loginBtn = new JButton("登录");
    		this.loginBtn.setBounds(160, 110, 80, 25);
    		this.contentP.add(this.loginBtn);
    		
    		this.loginBtn.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				String inputName = LoginFrame.this.nameTxt.getText();
    				String password = new String(LoginFrame.this.pwdTxt.getPassword());
    				
    				if(inputName.equals(props.getProperty("username")) && password.equals(props.getProperty("password"))){
    					JOptionPane.showMessageDialog(LoginFrame.this, "登录成功!");
    				}else{
    					JOptionPane.showMessageDialog(LoginFrame.this, "登录失败!");
    				}
    				
    				LoginFrame.this.nameTxt.setText("");
    				LoginFrame.this.pwdTxt.setText("");
    				LoginFrame.this.nameTxt.requestFocus();
    				
    			}
    		});
    	}
    

     

    4.卡片布局(最实用“事件处理用”):布局管理器最后一种,也是最常用种;

      整个翻页: 内容面板 设置为 卡片布局

      布局翻页: JPael 设置为 卡片布局

      4-1.设置内容面板:

    public class CardFrame extends JFrame{
    	
    	private Container contentP;
    	
    	private SeasonPanel seaP;//设置卡片布局管理器
    	
    	private ButtonPanel btnP;//设置布局器管理器的步骤
    	
    	public CardFrame(){
    		Toolkit tk = Toolkit.getDefaultToolkit();//获取工具对象
    		int screenWidth = (int)tk.getScreenSize().getWidth();
    		int screenHeight = (int)tk.getScreenSize().getHeight();
    		this.setSize(300, 300);//设置窗体大小--像素
    		this.setLocation((screenWidth-300)/2, (screenHeight-300)/2);//设置窗体的位置
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭即退出程序
    		this.setTitle("卡片布局管理");//标题栏设置标题
    		this.setIconImage(tk.createImage("image/icon.png"));//设置标题栏图标
    		this.setResizable(false);//设置窗体改变大小的能力
    		this.addContent();
    		this.setVisible(true);//设置该窗体可见
    	}
    
    	private void addContent() {
    		// TODO Auto-generated method stub
    		this.contentP = this.getContentPane();
    		this.contentP.setLayout(new BorderLayout());
    		
    		this.seaP = new SeasonPanel();
    		this.btnP = new ButtonPanel(this);
    		
    		this.contentP.add(BorderLayout.CENTER,this.seaP);
    		this.contentP.add(BorderLayout.SOUTH,this.btnP);
    	}
    
    	public SeasonPanel getSeaP() {
    		return seaP;
    	}
    
    	public void setSeaP(SeasonPanel seaP) {
    		this.seaP = seaP;
    	}
    
    	public ButtonPanel getBtnP() {
    		return btnP;
    	}
    
    	public void setBtnP(ButtonPanel btnP) {
    		this.btnP = btnP;
    	}
    }
    

      4-2.设置卡片管理布局器

    public class SeasonPanel extends JPanel {
    	
    	private SpringPanel sprP;//设置颜色或添加相片
    	
    	private SummerPanel sumP;//设置颜色或添加相片
    private AutumnPanel autP;//设置颜色或添加相片
    private WinterPanel winP;//设置颜色或添加相片
    public SeasonPanel(){ this.setBackground(Color.BLACK); this.setLayout(new CardLayout());//设置卡片布局管理器 this.sprP = new SpringPanel(); this.sumP = new SummerPanel(); this.autP = new AutumnPanel(); this.winP = new WinterPanel(); //第一个被放入的卡片在最上面 //每张卡片放入的时候要给出别名 this.add("spring", this.sprP); this.add("summer", this.sumP); this.add("autumn", this.autP); this.add("winter", this.winP); } public SpringPanel getSprP() { return sprP; } public void setSprP(SpringPanel sprP) { this.sprP = sprP; } public SummerPanel getSumP() { return sumP; } public void setSumP(SummerPanel sumP) { this.sumP = sumP; } public AutumnPanel getAutP() { return autP; } public void setAutP(AutumnPanel autP) { this.autP = autP; } public WinterPanel getWinP() { return winP; } public void setWinP(WinterPanel winP) { this.winP = winP; } }

      4-2-1.设置颜色或添加图片

    public class SpringPanel extends JPanel {
    	
    	public SpringPanel(){
    		this.setBackground(Color.GREEN);
    	}
    	
    }
    
    public class SummerPanel extends JPanel{
    	
    	public SummerPanel(){
    		this.setBackground(Color.RED);
    	}
    	
    }
    
    public class AutumnPanel extends JPanel {
    	
    	public AutumnPanel(){
    		this.setBackground(Color.ORANGE);
    	}
    	
    }
    
    public class WinterPanel extends JPanel {
    	
    	public WinterPanel(){
    		this.setBackground(Color.LIGHT_GRAY);
    	}
    	
    }
    

      4-3.设置卡片管理布局器步骤

    public class ButtonPanel extends JPanel {
    	
    	private JButton firstBtn;
    	
    	private JButton lastBtn;
    	
    	private JButton nextBtn;
    	
    	private JButton preBtn;
    	
    	private JButton sumBtn;
    	
    	private CardFrame cardF;
    	
    	public ButtonPanel(CardFrame cardF) {
    		// TODO Auto-generated constructor stub
    		this.cardF = cardF;
    		
    		this.setBackground(Color.WHITE);
    		this.setLayout(new FlowLayout());
    		
    		this.firstBtn = new JButton("|<");
    		this.firstBtn.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				//翻页步骤:1、首先得到被设置为卡片布局的那个容器
    				SeasonPanel sp = ButtonPanel.this.cardF.getSeaP();
    				//2、得到这个容器的布局管理器
    				CardLayout card = (CardLayout)sp.getLayout();
    				//3、调用该布局管理器翻页
    				card.first(sp);
    			}
    		});
    			
    		this.preBtn = new JButton("<<");
    		this.preBtn.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				//翻页步骤:1、首先得到被设置为卡片布局的那个容器
    				SeasonPanel sp = ButtonPanel.this.cardF.getSeaP();
    				//2、得到这个容器的布局管理器
    				CardLayout card = (CardLayout)sp.getLayout();
    				//3、调用该布局管理器翻页
    				card.previous(sp);
    			}
    		});
    				
    		this.nextBtn = new JButton(">>");
    		this.nextBtn.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				//翻页步骤:1、首先得到被设置为卡片布局的那个容器
    				SeasonPanel sp = ButtonPanel.this.cardF.getSeaP();
    				//2、得到这个容器的布局管理器
    				CardLayout card = (CardLayout)sp.getLayout();
    				//3、调用该布局管理器翻页
    				card.next(sp);
    			}
    		});
    			
    		this.lastBtn = new JButton(">|");
    		this.lastBtn.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				//翻页步骤:1、首先得到被设置为卡片布局的那个容器
    				SeasonPanel sp = ButtonPanel.this.cardF.getSeaP();
    				//2、得到这个容器的布局管理器
    				CardLayout card = (CardLayout)sp.getLayout();
    				//3、调用该布局管理器翻页
    				card.last(sp);
    			}
    		});
    		
    		this.sumBtn = new JButton("夏天");
    		this.sumBtn.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				//翻页步骤:1、首先得到被设置为卡片布局的那个容器
    				SeasonPanel sp = ButtonPanel.this.cardF.getSeaP();
    				//2、得到这个容器的布局管理器
    				CardLayout card = (CardLayout)sp.getLayout();
    				//3、调用该布局管理器翻页
    				card.show(sp, "summer");
    			}
    		});
    		
    		this.add(this.firstBtn);
    		this.add(this.preBtn);
    		this.add(this.nextBtn);
    		this.add(this.lastBtn);
    		this.add(this.sumBtn);
    	}
    }
    

     设置背景:

    public class CardFrame2 extends JFrame {
    	
    	private Container contentP;
    	
    	private JLabel backLab;
    	
    	private JButton okBtn;
    	
    	public CardFrame2(){
    		Toolkit tk = Toolkit.getDefaultToolkit();//获取工具对象
    		int screenWidth = (int)tk.getScreenSize().getWidth();
    		int screenHeight = (int)tk.getScreenSize().getHeight();
    		this.setSize(600, 428);//设置窗体大小--像素;大小要与背景图片一样并且加上标题框高度+28
    		this.setLocation((screenWidth-600)/2, (screenHeight-428)/2);//设置窗体的位置
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭即退出程序
    		this.setTitle("背景图片问题");//标题栏设置标题
    		this.setIconImage(tk.createImage("image/icon.png"));//设置标题栏图标
    		this.setResizable(false);//设置窗体改变大小的能力
    		this.addContent();
    		this.setVisible(true);//设置该窗体可见
    	}
    
    	private void addContent() {
    		// TODO Auto-generated method stub
    		this.contentP = this.getContentPane();
    		this.contentP.setLayout(new BorderLayout());		
    		this.backLab = new JLabel(new ImageIcon("background.jpg"));
    		this.contentP.add(this.backLab);
    		
    		this.backLab.setLayout(null);
    		
    		this.okBtn = new JButton("确定");
    		this.okBtn.setBounds(200,50, 80, 30);
    		this.backLab.add(this.okBtn);
    		
    	}
    }
    

      

  • 相关阅读:
    CentOS安装
    java字符串
    h5弹球对战游戏
    看是否健康
    layui社区源码笔记之fly-list
    layui社区源码笔记之user-rank
    layui社区源码笔记之layui-input form
    layui社区源码笔记之fly-tab
    layui社区模板主页框架分析
    分组答辩小程序
  • 原文地址:https://www.cnblogs.com/scxu28/p/6188395.html
Copyright © 2011-2022 走看看