风也温柔

计算机科学知识库

初学JAVA的时候学习过SWING和Jpanel设置有什么关系JAVA SWING之JFrame和JPanel布局

  初学JAVA的时候学习过SWING,每次写程序就直接复制Jframe和Jpanel设置,到现在也不清楚它们有什么关系,才回顾学习。Swing虽然是很老的技术了,但也有很多工具是Swing写的例如JetBrains系列,最常用的IDEA。开发一下小工具还是不错的。掌握整体布局后,再去写代码和添加组件就很简单了。

  学习资料参考:Swing学习

  一、JFrame窗口

  1.什么是JFrame

  JFrame 用来设计类似于 Windows 系统中窗口形式的界面。JFrame 是 Swing 组件的顶层容器,该类继承了 AWT 的 Frame 类,支持 Swing 体系结构的高级 GUI 属性。

  2.如何使用JFrame

  当我们创建一个类的时候需要继承JFrame类,才可继续调用方法。在继承类中即使不初始化JFrame也可直接调用 JFrame 类的方法。创建了窗体后不能直接将其它组件放到窗体中,必须创建一个容器实例化对象才能放入内容窗格中。如图

  在这里插入图片描述

  常用方法

  在这里插入图片描述

  如下一个简单的窗口

   public class Test extends JFrame{

        public Test() {
                setTitle("Java 第一个 GUI 程序");    //设置显示窗口标题
                setSize(400,200);    //设置窗口显示尺寸
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //置窗口是否可以关闭,关闭窗口后程序将一起关闭
                JLabel l=new JLabel("这是使用JFrame类创建的窗口");    //创建一个标签
                getContentPane().add(l);    //将标签组件添加到内容窗格上
                setVisible(true);    //设置窗口是否可见
        }
        public static void main(String[] args) {
            new Test();
        }
    }

  在这里插入图片描述

  二、JPanel面板

  1.什么是JPanel:

  JPanel 是一种中间层容器,它能容纳组件并将组件组合在一起,但它本身必须添加到其他容器中使用。JPanel 类的构造方法如下。上述contentPane实际上就是一个JPanel。Jframe中会默认new一个JPanel,塞入JFrame中。有一个很形象的比喻,JFrame是一个桌子,各个组件是一盘盘菜,而JPanel就是一个菜盘初学JAVA的时候学习过SWING和Jpanel设置有什么关系JAVA SWING之JFrame和JPanel布局,装了各个组件以后放到桌上。一个JFrame界面上可以有多个JPanel用来划分不同的区域。

  2.如何使用JPanel:

  常用方法:

  在这里插入图片描述

  此处写了两个JPanel示例代码如下:

   public class Test extends JFrame{

        public Test() {
                setTitle("Java 第二个 GUI 程序");    //设置显示窗口标题
                setBounds(100,100,400,341);    //设置窗口显示位置及尺寸
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setVisible(true);    //设置窗口是否可见
                getContentPane().setLayout(null);//设置空布局,组件想怎么放怎么放
                
                JPanel panel = new JPanel();//第一个JPanel
                panel.setBorder(new LineBorder(Color.CYAN));
                panel.setBounds(10, 10, 364, 98);
                panel.add(new Label("first"));//将标签放入面板中
                getContentPane().add(panel);//将panel放入jframe界面
                
                JPanel panel_1 = new JPanel();//第二个JPanel
                panel_1.setBorder(new LineBorder(Color.PINK));
                panel_1.setBounds(10, 141, 364, 128);
                panel_1.add(new Label("second"));//这是第二个面板
                getContentPane().add(panel_1);//将panel放入jframe界面            
        }
        public static void main(String[] args) {
            new Test();
        }
    }

  在这里插入图片描述

  三、SWING布局管理

  java界面布局_java界面布局类型_java计算器界面布局

  上述第二个例子中没有采用布局方法,所以想怎么放panel就怎么放,实际swing中有很多布局方法,可以直接使用。

  1.边框布局方式

  边框布局管理器(BorderLayout)将窗口分为 5 个区域:North、South、East、West 和 Center。其中,North 表示北,将占据面板的上方;Soufe 表示南java界面布局,将占据面板的下方;East表示东,将占据面板的右侧;West 表示西,将占据面板的左侧;中间区域 Center 是在东、南、西、北都填满后剩下的区域,如图所示:

  在这里插入图片描述

  示例代码如下:

   public class Test extends JFrame{

        public Test() {
                setTitle("Java 第二个 GUI 程序");    //设置显示窗口标题
                setBounds(100,100,400,341);    //设置窗口显示位置及尺寸
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                getContentPane().setLayout(new BorderLayout());//设置边框布局
                //如果想设置横纵向间隔使用方法BorderLayout(int hgap,int vgap)
                JButton button1=new JButton ("上");
                JButton button2=new JButton("左");
                JButton button3=new JButton("中");
                JButton button4=new JButton("右");
                JButton button5=new JButton("下");
                getContentPane().add(button1,BorderLayout.NORTH);
                getContentPane().add(button2,BorderLayout.WEST);
                getContentPane().add(button3,BorderLayout.CENTER);
                getContentPane().add(button4,BorderLayout.EAST);
                getContentPane().add(button5,BorderLayout.SOUTH);
                setVisible(true);    //设置窗口是否可见,注意,一般这个放最后面更合适
        }
        public static void main(String[] args) {
            new Test();
        }
    }

  效果图如图:

  在这里插入图片描述

  如果缺失四个方向任何一方,会由中间部分去补充区域

  2.流式布局方式

  FlowLayout(流式布局管理器)是 JPanel 和 JApplet 的默认布局管理器。FlowLayout 会将组件按照从上到下、从左到右的放置规律逐行进行定位。与其他布局管理器不同的是,FlowLayout 布局管理器不限制它所管理组件的大小,而是允许它们有自己的最佳大小。

  示例代码:

   public class Test extends JFrame{

        public Test() {
                setTitle("Java 第二个 GUI 程序");    //设置显示窗口标题
                setBounds(100,100,400,341);    //设置窗口显示位置及尺寸
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                JPanel jPanel=new JPanel();    //创建面板
                JButton btn1=new JButton("1");    //创建按钮
                JButton btn2=new JButton("2");
                JButton btn3=new JButton("3");
                JButton btn4=new JButton("4");
                JButton btn5=new JButton("5");
                JButton btn6=new JButton("6");
                JButton btn7=new JButton("7");
                JButton btn8=new JButton("8");
                JButton btn9=new JButton("9");
                jPanel.add(btn1);    //面板中添加按钮
                jPanel.add(btn2);
                jPanel.add(btn3);
                jPanel.add(btn4);
                jPanel.add(btn5);
                jPanel.add(btn6);
                jPanel.add(btn7);
                jPanel.add(btn8);
                jPanel.add(btn9);
                //向JPanel添加FlowLayout布局管理器,将组件间的横向和纵向间隙都设置为20像素
                //FlowLayout(int align, int hgap,int vgap)组件对齐方式以及横纵隔距离
                jPanel.setLayout(new FlowLayout(FlowLayout.LEADING,20,20));
                jPanel.setBackground(Color.blue);    //设置背景色
                add(jPanel);
                setVisible(true);    //设置窗口是否可见,注意,一般这个放最后面更合适
        }
        public static void main(String[] args) {
            new Test();
        }
    }

  代码效果如图所示:

  在这里插入图片描述

  在拖动界面大小时组件会自动排序,宽度不足则换行

  3.卡片布局方式

  CardLayout(卡片布局管理器)能够帮助用户实现多个成员共享同一个显示空间,并且一次只显示一个容器组件的内容。CardLayout 布局管理器将容器分成许多层java界面布局,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件。自由定义显示哪个面板

  示例代码:

   public class Test extends JFrame{

        public Test() {
                setTitle("Java 第四个 GUI 程序");    //设置显示窗口标题
                setBounds(100,100,400,341);    //设置窗口显示位置及尺寸
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                JPanel p1=new JPanel();    //面板1
                JPanel p2=new JPanel();    //面板2
                //CardLayout(int hgap, int vgap)可指定布局横纵间隔
                JPanel cards=new JPanel(new CardLayout());    //卡片式布局的面板
                p1.add(new JButton("登录按钮"));
                p1.add(new JButton("注册按钮"));
                p1.add(new JButton("找回密码按钮"));
                p2.add(new JTextField("用户名文本框",20));
                p2.add(new JTextField("密码文本框",20));
                p2.add(new JTextField("验证码文本框",20));
                cards.add(p1,"card1");    //向卡片式布局面板中添加面板1
                cards.add(p2,"card2");    //向卡片式布局面板中添加面板2
                CardLayout cl=(CardLayout)(cards.getLayout());
                cl.show(cards,"card1");    //调用show()方法显示面板2
                add(cards);
                setVisible(true);    //设置窗口是否可见,注意,一般这个放最后面更合适
        }
        public static void main(String[] args) {
            new Test();
        }
    }

  代码效果图片:

  在这里插入图片描述

  swing学习参考资料:资料

  文章来源:https://blog.csdn.net/weixin_43909848/article/details/123091395