zoukankan      html  css  js  c++  java
  • 14.swing

    一。开发架构
    1.最外层是一个jframe的框架
    2.可以在框架中添加任意组件
    3.组件分为两大类:
    a。容器类型:可以继续在该容器中添加其他组件。例如:jpanel 面板,可以多个面板添加到同一个框架中
    b。具体的组件:按钮,文本框,标体,文本域,可以添加到容器类型中
    4.事件:是触发事件完成一定的功能
    常用事件有:
    a.按钮的监听事件:ActionListener 监听按钮的点击事件
    b.鼠标监听事件:MouseListener 监听鼠标的按下,弹起,鼠标的移动
    c.键盘监听事件:KeyListener 监听键盘的点击,弹起事件
    5.在swing组件如何加载图片 见 PictureDEmo
    a.通过jlable标签来加载
    b.jpanel中的画笔对象来画出来
    6.在jframe来自定义画板,画自己想要的内容。步骤
    a.创建一个自定义的面板类,继承jpanel
    b.初始化面饭的相关显示属性
    c.把该面板加入到jframe中
    d.在面板类中重写paintComponent(Graphics g)此方法,这个方法里面就是我们画画的地方



    作业1.登录窗口
    如果用户输入的是用户名“root”,密码“admin” 则登录成功,显示另外一个窗体并显示登录XXXX成功
    如果输入有误弹出密码错误提示


    作业2.通过按键左右键的点击来切换图片的显示 总共五张图片 如果到了末尾再点调回第一张

    作业3:做一个计算器,完成通用功能

    二。例子

      计算器+按钮监听实例:

      1 package com.demo1116;
      2 
      3 import java.awt.Font;
      4 import java.awt.event.ActionEvent;
      5 import java.awt.event.ActionListener;
      6 import java.awt.event.KeyAdapter;
      7 import java.awt.event.KeyEvent;
      8 import java.awt.event.KeyListener;
      9 
     10 import javax.swing.JButton;
     11 import javax.swing.JFrame;
     12 import javax.swing.JLabel;
     13 import javax.swing.JTextField;
     14 import javax.swing.plaf.basic.BasicSplitPaneUI.KeyboardUpLeftHandler;
     15 
     16 public class MyFrame extends JFrame{
     17     double num1;//存放第一个数字
     18     double num2;//存放第二个数字
     19     String type;//记录当前的运算符号
     20     boolean isSecond = false;//记录是否是第二个数字的开始
     21     //按钮
     22     JButton jb1;
     23     JButton jb2;
     24     JButton jb3;
     25     
     26     JButton jb_point;
     27     JButton jb_add;
     28     JButton jb_result;
     29     //标体
     30     JLabel jl1;
     31     //文本框
     32     JTextField jtf_username;
     33     public MyFrame() {
     34         //设置窗口的关闭模式 关闭窗口立即终止程序
     35         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     36         setSize(500, 500);//设置框架的大小
     37         setLayout(null);//设置布局管理器为null,则表示使用手动布局
     38         setLocationRelativeTo(null);
     39         setTitle("计算器");
     40         //添加其他组件
     41         jb1 = new JButton("1");
     42         jb1.setBounds(20, 100, 50, 50);
     43         jb1.addActionListener(new MyButtonActionListener("1"));//给按钮添加事件监听器
     44         this.add(jb1);//添加组件到容器中
     45         
     46         jb2 = new JButton("2");
     47         jb2.setBounds(80, 100, 50, 50);
     48         jb2.addActionListener(new MyButtonActionListener("2"));//给按钮添加事件监听器
     49         this.add(jb2);//添加组件到容器中
     50         
     51         jb3 = new JButton("3");
     52         jb3.setBounds(150, 100, 50, 50);
     53         jb3.addActionListener(new MyButtonActionListener("3"));//给按钮添加事件监听器
     54         this.add(jb3);//添加组件到容器中
     55         
     56         jb_point = new JButton(".");
     57         jb_point.setBounds(150, 180, 50, 50);
     58         jb_point.addActionListener(new MyButtonActionListener("."));//给按钮添加事件监听器
     59         this.add(jb_point);//添加组件到容器中
     60         
     61         jb_add = new JButton("+");
     62         jb_add.setBounds(150, 250, 50, 50);
     63         jb_add.addActionListener(new MyButtonActionListener("+"));//给按钮添加事件监听器
     64         this.add(jb_add);//添加组件到容器中
     65         
     66         jb_result = new JButton("=");
     67         jb_result.setBounds(150, 320, 50, 50);
     68         jb_result.addActionListener(new MyButtonActionListener("="));//给按钮添加事件监听器
     69         this.add(jb_result);//添加组件到容器中
     70         
     71 //        jl1 = new JLabel("用户名:");
     72 //        jl1.setBounds(20, 100, 150, 50);
     73 //        jl1.setFont(new Font("", Font.BOLD, 20));//给组件设置字体样式
     74 //        this.add(jl1);
     75         
     76         jtf_username = new JTextField("0");
     77         jtf_username.setBounds(20, 20, 420, 50);
     78         jtf_username.setEnabled(false);//不可编辑状态
     79         jtf_username.setFont(new Font("", Font.BOLD, 20));
     80         //将文本框的输入右对齐
     81         jtf_username.setHorizontalAlignment(JTextField.RIGHT);
     82         this.add(jtf_username);
     83         
     84         setVisible(true);//设置框架是否可见
     85     }
     86     
     87     class MyButtonActionListener implements ActionListener{
     88         String num;
     89         MyButtonActionListener(String num){
     90             this.num = num;
     91         }
     92         @Override
     93         public void actionPerformed(ActionEvent e) {
     94             switch(num){
     95             case "1":
     96             case "2":
     97             case "3":
     98             case "4":
     99             case "5":
    100             case "6":
    101             case "7":
    102             case "8":
    103             case "9":
    104                 if(jtf_username.getText().equals("0")){
    105                     jtf_username.setText("");
    106                 }
    107                 if(isSecond){
    108                     jtf_username.setText("");
    109                 }
    110                 jtf_username.setText(jtf_username.getText()+num);
    111                 isSecond = false;
    112                 break;
    113             case ".":
    114                 if(jtf_username.getText().indexOf(".")==-1){
    115                     jtf_username.setText(jtf_username.getText()+num);
    116                 }
    117                 break;
    118             case "+":
    119                 num1 = Double.valueOf(jtf_username.getText());//记录第一个数
    120                 isSecond = true;//接下来要输入第二个数字
    121                 type = "+";//记录运算符号
    122                 break;
    123             case "=":
    124                 num2 = Double.valueOf(jtf_username.getText());//记录第二个数
    125                 switch(type){
    126                 case "+":
    127                     jtf_username.setText(num1+num2+"");
    128                 }
    129                 break;
    130             }
    131             
    132             
    133         }
    134     }
    135     
    136     public static void main(String[] args) {
    137         new MyFrame();
    138     }
    139 }

      键盘监听实例:

     1 package com.demo1116;
     2 
     3 import java.awt.event.KeyAdapter;
     4 import java.awt.event.KeyEvent;
     5 import java.awt.event.KeyListener;
     6 
     7 import javax.swing.JFrame;
     8 import javax.swing.JLabel;
     9 
    10 public class KeyActionDemo extends JFrame{
    11     JLabel jl;
    12     
    13     public void init(){//初始化界面
    14         this.setSize(500, 500);
    15         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    16         this.setLocationRelativeTo(null);//设置窗口初始出现的位置为屏幕中央
    17         
    18         jl = new JLabel();
    19         jl.setBounds(10, 10, 30, 30);
    20         this.add(jl);
    21         
    22         this.addKeyListener(new MyKeyListener());
    23         
    24         this.setVisible(true);
    25     }
    26     
    27     public KeyActionDemo() {
    28         init();
    29     }
    30     
    31     public static void main(String[] args) {
    32         new KeyActionDemo();
    33     }
    34     
    35     /**
    36      * 键盘的监听适配器,该类实现类keylistener接口,所以继承该类等于实现了接口,优势是我们可以选择性的重写里面的方法
    37      * @author allen
    38      *
    39      */
    40     class MyKeyListener extends KeyAdapter{
    41         @Override
    42         public void keyPressed(KeyEvent e) {
    43             jl.setText(e.getKeyCode()+"");
    44         }
    45     }
    46 }

      加载图片实例:

     1 package com.demo1116;
     2 
     3 
     4 import java.awt.Graphics;
     5 import java.awt.image.BufferedImage;
     6 import java.io.File;
     7 import java.io.IOException;
     8 
     9 import javax.imageio.ImageIO;
    10 import javax.swing.ImageIcon;
    11 import javax.swing.JFrame;
    12 /**
    13  * 加载图片案例
    14  * @author allen
    15  */
    16 import javax.swing.JLabel;
    17 import javax.swing.JPanel;
    18 import javax.swing.border.Border;
    19 public class PictureDemo extends JFrame{
    20     JLabel jl_pic;
    21     private void init() {
    22         this.setSize(500, 400);// 设置窗体大小,宽和高 单位是像素
    23         this.setResizable(false);// 设置窗体大小固定
    24         this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);// 设置窗体关闭时主线程自动关闭
    25         this.setLocationRelativeTo(null);// 设置窗体出现的位置在显示器正中
    26         this.setLayout(null);// 不使用布局管理器,启用手动布局
    27         
    28         //第一种方式显示图片
    29 //        jl_pic = new JLabel(new ImageIcon("img/1.jpg"));
    30 //        jl_pic.setBounds(0, 0, 500, 400);
    31 //        this.add(jl_pic);
    32         //第二种方式显示图片
    33         MyPanel mp = new MyPanel();
    34         this.add(mp);
    35         this.setVisible(true);
    36     }
    37     
    38     public PictureDemo() {
    39         init();
    40     }
    41     
    42     public static void main(String[] args) {
    43         new PictureDemo();
    44     }
    45 }
    46 /**
    47  * 自定义面板 在面板中可以完成图片的制作
    48  * @author allen
    49  */
    50 class MyPanel extends JPanel{
    51     public MyPanel() {
    52         this.setBounds(0, 0, 500, 400);
    53         this.setVisible(true);
    54     }
    55     
    56     @Override
    57     protected void paintComponent(Graphics g) {
    58         // TODO Auto-generated method stub
    59         try {
    60             //将图片文件读取到java缓存中,备用
    61             BufferedImage bi = ImageIO.read(new File("img/1.jpg"));
    62             //用画笔工具讲图片画到面板中去
    63             g.drawImage(bi, 0, 0, this);
    64         } catch (IOException e) {
    65             // TODO Auto-generated catch block
    66             e.printStackTrace();
    67         }
    68     }
    69 }
  • 相关阅读:
    python 对比学习
    支付宝
    springboot logback
    ngnix学习视频
    node学习
    puppeteer 相关知识
    Dota2App--第三天
    Dota2APP--第二天
    Dota2APP--第一天
    iOS ---进阶之摇一摇
  • 原文地址:https://www.cnblogs.com/wlxslsb/p/10671358.html
Copyright © 2011-2022 走看看