zoukankan      html  css  js  c++  java
  • java笔记之图形类详解

    软件的交互方式:
    1. 控制台的交互方式、
    2. 图形化界面的交互方式 。

    java使用到的图形类主要在java.awt 与javax.swing包中。

    java.awt 与 javax.swing包的区别:
    java.awt中使用的图形类都是依赖于系统 的图形库的。
    javax.swing包使用到的图形类都是sun自己实现,不需要依赖系统的图形库。
    疑问: 既然swing包中的图形类已经取代awt包的图形类,为什么不删除awt呢?

    1、swing比awt包出现的晚,所以会存在一些界面是用了awt包的相关类和方法,删除会带来影响。 
    2、awt包中不仅含有图像类,还有其它的类和方法。二者仅仅是在图形类上有很高的相似度,而其它则并不是这样。

    在java中所有的图形类都被称作组件类。

    组件的类别:
    ----------| 容器组件
    ----------| 非容器组件

    public class Demo1 {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("这个是我第一个图形化界面的例子");
            //设置窗体的大小
    //        frame.setSize(300,400);
            //设置窗体(左上角)出现的位置
            //frame.setBounds((1366-300)/2, (768-400)/2, 300,400); // 第一个参数是左上角的x轴坐标, 第二参数是左上角y的坐标。 第三个窗体宽, 第四窗体的高。
            initFrame(frame, 300,400);
            frame.setVisible(true); //setVisible 设置窗体的可见性。
            //设置窗体关闭事件
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        }
        
        
        //获取屏幕的分辨率   设置窗体在屏幕的居中位置。
        public static void initFrame(JFrame frame,int width , int height){
            Toolkit toolkit = Toolkit.getDefaultToolkit(); //获取一个与系统相关工具类对象
            //获取屏幕的分辨率
            Dimension d = toolkit.getScreenSize();
            int x = (int) d.getWidth();
            int y = (int) d.getHeight();
            frame.setBounds((x-width)/2, (y-height)/2, width, height);
            
        }
        
        
        
    }

    JOptionPane(对话框)
    消息对话框
    警告对话框
    错误对话框
    输入对话框
    确认对话框

    此处用上班迟到扣钱为例

    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    
    public class Demo02 {
        public static void main(String[] args) {
            JFrame frame=new JFrame("窗体");
            Demo01.initJframe(frame, 400, 500);
            JOptionPane.showMessageDialog(frame, "明天停电,不用上班", "通知", JOptionPane.INFORMATION_MESSAGE);
            JOptionPane.showMessageDialog(frame,"上班迟到2次,迟到次数用完了。","警告",JOptionPane.WARNING_MESSAGE);
            JOptionPane.showMessageDialog(frame, "迟到3次了,罚50元","处分", JOptionPane.ERROR_MESSAGE);
            JOptionPane.showInputDialog("请输入你要给我的金额($)");
            JOptionPane.showConfirmDialog(frame, "你确认要交吗?");
        }
    }

    效果展示:

    文件对话框(FileDialog):
    FileDialog(Dialog parent, String title, int mode)
    parent: 对话框的所有者
    tiltle : 对话框的标题
    mode: load(打开) 、 save(保存)

    public class Demo3 {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("窗体");
            //创建一个文件对话框(初始也是不可见)
            //FileDialog fileDialog = new FileDialog(frame, "请选择打开的文件", FileDialog.LOAD);
            FileDialog fileDialog = new FileDialog(frame,"请选择保存的路径",FileDialog.SAVE);
            FrameUtil.initFrame(frame, 300,400);
            fileDialog.setVisible(true);
            System.out.println("文件所在的目录:"+ fileDialog.getDirectory());
            System.out.println("文件名:"+ fileDialog.getFile());
            
            
            
        }
        
    }

    布局管理器:布局管理就是用于指定组件的 摆放位置的。
    每种布局管理器都有自己的摆放风格
    BorderLayout(边框布局管理器)

    摆放的风格: 上北 、 下南 、 左西、 右东 , 中

    Borderlayout 要注意的事项:
    1. 使用Borderlayout添加组件的时候,如果没有指定组件的方位,那么默认添加到中间的位置上。
    2. 使用BorderLayout的时候,如果东南西北那个方向没有对应 的组件,那么中间位置的组件就会占据其空缺的位置。
    3. 窗体默认的布局管理器就是Borderlayout.

    public class Demo1 {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("边框局部管理器");
            //创建一个边框布局管理器
            BorderLayout borderLayout = new BorderLayout();
            //让borderlayout管理frame窗体。
            frame.setLayout(borderLayout);
            
            frame.add(new JButton(""),BorderLayout.NORTH);
            frame.add(new JButton(""),BorderLayout.SOUTH);
            frame.add(new JButton("西"),BorderLayout.WEST);
            frame.add(new JButton(""),BorderLayout.EAST);
            frame.add(new JButton(""),BorderLayout.CENTER);
            //初始化窗体
            FrameUtil.initFrame(frame, 300, 300);
        }
        
    }

    流式布局管理器(FlowLayout)

    流式布局管理器要注意的事项:
    1. 流式布局管理器默认情况是居中对齐的。
    2. panel默认的局部管理器就是FlowLayout.

    import java.awt.FlowLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    public class Demo04 {
            public static void main(String[] args) {
                JFrame frame = new JFrame("窗体");
                //创建面板
                JPanel panel = new JPanel();
                frame.add(panel);
                //创建一个流式布局管理器
                FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT, 0, 30);// FlowLayout.LEFT 指定对齐的方式。
                //让流式布局管理器管理frame窗体
                panel.setLayout(flowLayout);
                
                panel.add(new JButton("按钮1"));
                panel.add(new JButton("按钮2"));
                panel.add(new JButton("按钮3"));
                panel.add(new JButton("按钮4"));
                
                //初始化窗体
                
                Demo01.initJframe(frame,300, 400);
                
                
            }
    }

    表格布局管理器(GridLayout)
    注意的事项: 如果表格数量不够使用时,默认会多加一列。

    import java.awt.GridLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    public class Demo04 {
            public static void main(String[] args) {
                JFrame frame = new JFrame("计算器");
                //创建表格布局管理器
                GridLayout gridLayout = new GridLayout(4, 4, 1, 2);
                //让窗体交给表格布局管理器管理
                frame.setLayout(gridLayout);
                for(int i = 0 ; i<10; i++){
                    frame.add(new JButton(i+""));
                }
                frame.add(new JButton("+"));
                frame.add(new JButton("-"));
                frame.add(new JButton("*"));
                frame.add(new JButton("/"));
                frame.add(new JButton("="));
                frame.add(new JButton("."));
                
                Demo01.initJframe(frame,300, 400);
                
                
            }
    }

  • 相关阅读:
    Java反射
    浅谈page,request,session,application四种范围
    使用MySQL连接池
    SQL注入漏洞的演示及解决办法
    JDBC工具类的提取
    JDBC使用过程
    MYSQL常用函数
    MySQL数据操作
    MySQL存储引擎
    Python核心技术与实战——六|异常处理
  • 原文地址:https://www.cnblogs.com/AllenRandolph/p/7049833.html
Copyright © 2011-2022 走看看