• Java-GUI笔记——JFrame类


    1.JFrame类

    1.1 JFrame类在javax.swing 包中——主要提供各种组件(窗口/按钮/文本框),在Java中还提供了另外2个做GUI开发的包。

    java.awt 包 – 主要提供字体/布局管理器,java.awt.event 包 – 事件处理,后台功能的实现。

     1.2顶层容器的概念(转自:https://www.cnblogs.com/Angella/p/6058545.html

    顶层容器值得是容纳其他容器的容器组件,包括JFrame类,JWindows类,JDialog类,JApplet等。

    Swing提供三个顶层容器类:JFrame,JDialog和JApplet。当使用这些容器类时,请谨记以下原则。

    (1)要在屏幕上显示,每个GUI组件必须是一个“容器层级”的一部分。

    (2)每个GUI组件只能属于一个容器,如果组件已经在一个容器当中,而又试图将它添加到另一个容器当中去,那么应该从第一个容器中移除该组件,然后添加到两一个容器去。

    (3)各种可视化组件不直接放到顶层容器中去,而是放在容器的内容面板中。

    (4)可以选择添加一个菜单栏到顶层容器中,菜单栏应该按惯例位于顶层容器中,但必须位于内容面板之外。

    (5)Swing中还有一个命名为JInternalFrame的内部窗体,它模仿JFrame,但实际上内部窗体并不是真正的顶层容器。

    2.JFrame类使用

    package Jframe;
    
    import javax.swing.JFrame;
    
    public class mainFrame extends JFrame {
    
        
        public mainFrame() {
        
            // 创建窗口
            JFrame frame = new JFrame();    
            //设置窗口标题
            this.setTitle("主窗体");
            //设置窗口的x,y位置,窗口大小x,y.
            this.setBounds(600, 300, 500, 400);
            //设置窗体的大小
            this.setSize(600, 600);
            //设置窗体的位置
            this.setLocation(600, 300);
            
            
            //设置默认的关闭窗口
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
        
        
        public static void main(String[] args) {
            mainFrame mainFrame = new mainFrame();
        }
    
    
    }

    注意:setDefaultCloseOperation有4种方法,装在javax.swing.WindowConstants接口中。

    1.DO_NOTHING_ON_CLOSE   什么都不做,直接关闭
    2.DISPOSE_ON_CLOSE          :自动隐藏并释放窗体
    3.HIDE_ON_CLOSE                :隐藏窗口的默认关闭
    4.EXIT_ON_CLOSE                :退出程序的默认窗口关闭

    3.窗体默认在屏幕居中打开

    在mainFrame 类中创建一个居中方法

    //居中方法
        public void setFrameCenter()
        {
            //得到屏幕大小
            Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();        
            //得到x的位置
            int x = (dimension.width-this.getWidth())/2;
            //得到y的位置
            int y = (dimension.height-this.getHeight())/2;
             //设置窗口位置
             this.setLocation(x, y);
        }

    然后在构造方法中加上即可

            //窗体居中
            this.setFrameCenter();

     4.设置窗体的背景

    直接调用setBackground(Color color)方法无法设置颜色,JFrame上的contentPane默认是Color.WHITE的,创建一个contentPane,设置其颜色。

    先说明下Jframe框架基本结构和继承关系(转自:https://blog.csdn.net/stanleyee/article/details/50615947

     

     窗口结构

     每一个顶级容器,都有一个隐藏的中间容器,叫做Root Pane。Root Pane 管理着Content Pane 、Menu Bar 和 其它一些容器。

     在mainFrame类中创建一个成员变量为容器对象,得到JFrame上面的内容窗格,组件需要放到内容窗格的上面,内容窗格再放到 JFrame 顶层容器的上面。

        //获取当前窗口的内容窗格
        private Container container = this.getContentPane();

    然后在构造函数中设置其颜色

            //窗体背景
            this.container.setBackground(new Color(234,23,33));

    还有一种解决方案,为JFrame添加一个Panel或者JLabel等其他组件,设置其颜色为你想要的颜色,然后将其覆盖JFrame窗口即可。

     5.代码

    package Jframe;
    
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class mainFrame extends JFrame {
        
        //创建容器对象
        private Container container = this.getContentPane();
        //创建ImagePanel
        private ImagePanel imagePanel;
        
        public mainFrame() {
        
            // 创建窗口
            JFrame frame = new JFrame();    
            //设置窗口标题
            this.setTitle("主窗体");
            //设置窗口的x,y位置,窗口大小x,y.
            this.setBounds(600, 300, 500, 400);
            //设置窗体的大小
            this.setSize(600, 600);
            //设置窗体的位置
            this.setLocation(600, 300);
            //窗体居中
            this.setFrameCenter();
            //窗体背景
            this.container.setBackground(new Color(234,23,33));
            //设置默认的关闭窗口
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
        
        
        //居中方法
        public void setFrameCenter()
        {
            //得到屏幕大小
            Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();        
            //得到x的位置
            int x = (dimension.width-this.getWidth())/2;
            //得到y的位置
            int y = (dimension.height-this.getHeight())/2;
             //设置窗口位置
             this.setLocation(x, y);
        }
        
        
        
        public static void main(String[] args) {
            mainFrame mainFrame = new mainFrame();
        }
    
    
    }
    View Code

    6.运行效果

    参考文章:

    https://blog.csdn.net/qq_42035966/article/details/82258199

    https://blog.csdn.net/xlh1991/article/details/16986555

    https://blog.csdn.net/stanleyee/article/details/50615947

    https://www.cnblogs.com/HDK2016/p/8435679.html

    转载文章链接已标明,如有侵权请告知。文章仅作为知识记忆所用,如有错误,敬请指正。
  • 相关阅读:
    Java解析复杂xml文件,使用Xpath
    表达式求值
    解决 error CS0012 错误
    mssql sqlserver 分组排序函数row_number、rank、dense_rank用法简介及说明
    c#核心基础
    Git源代码管理
    CASE 表达式
    NPM -- 初探--01
    ASP.NET Zero--基础设施
    ASP.NET Zero--基于令牌的认证&SWAGGER UI
  • 原文地址:https://www.cnblogs.com/YorkZhangYang/p/12792014.html
Copyright © 2020-2023  润新知