首页 > 编程语言 >JAVA SWING之JFrame和JPanel布局

JAVA SWING之JFrame和JPanel布局

时间:2023-10-27 12:23:03浏览次数:32  
标签:JFrame JAVA add public JPanel new JButton

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

一、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就是一个菜盘,装了各个组件以后放到桌上。一个JFrame界面上可以有多个JPanel用来划分不同的区域。

2.如何使用JPanel:
常用方法:

 

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

import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;

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布局管理

上述第二个例子中没有采用布局方法,所以想怎么放panel就怎么放,实际swing中有很多布局方法,可以直接使用。
1.边框布局方式
边框布局管理器(BorderLayout)将窗口分为 5 个区域:North、South、East、West 和 Center。其中,North 表示北,将占据面板的上方;Soufe 表示南,将占据面板的下方;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();
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
效果图如图:

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

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();
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
代码效果如图所示:

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

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

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();
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
代码效果图片:

当然还有其它布局方式,只不过最常用的是这几种,掌握一种,其它的举一反三就行了
如果你想要自定义布局(就是组件想放在JFrame哪个地方就放哪个地方)首推的就是不新建Jpanel,这样你的组件可以放在JFrame自带的Jpanel的任意地方。不用按照规定方式来布局
————————————————
版权声明:本文为CSDN博主「CX330 star」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43909848/article/details/123091395

标签:JFrame,JAVA,add,public,JPanel,new,JButton
From: https://www.cnblogs.com/szmtjs10/p/17792076.html

相关文章

  • 在JavaScript中创建多行字符串
    内容来自DOChttps://q.houxu6.top/?s=在JavaScript中创建多行字符串在JavaScript中,等效的代码如下:consttext=`ThisIsAMultilineString`;更新:ECMAScript6(ES6)引入了一种新的字面量类型,即模板字面量。它们具有许多功能,包括变量插值等等,但最重要的是对于这个问题,它......
  • 一步步带你剖析Java中的Reader类
     本文分享自华为云社区《深入理解Java中的Reader类:一步步剖析》,作者:bug菌。前言  在Java开发过程中,我们经常需要读取文件中的数据,而数据的读取需要一个合适的类进行处理。Java的IO包提供了许多类用于数据的读取和写入,其中Reader便是其中之一。本文将对Java中的Reader进行详细介......
  • Mac brew安装Java8 && Mac配置多个Java版本
    安装Java8 1.打开终端,输入以下命令安装brew: `/usr/bin/ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"` 2.安装Java8: `brewtapcaskroom/versions` `brewcaskinstalljava8` 3.验证Java8是否安装成功: `j......
  • 高效技巧揭秘:Java轻松批量插入或删除Excel行列操作
    摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言在职场生活中,对Excel工作表的行和列进行操作是非常普遍的需求。一般情况下在Excel中,可以通过右键菜单插入或者删除行与列。不过在软件开发......
  • java数组 去重字符串去空格
    packagegta.custom.action.typeForm;importjava.util.ArrayList;publicclassTestmain{publicstaticvoidmain(Stringargs[]){String[]str={"2","2","3","1","4","4"};/......
  • JAVA中char类型加减乘除运算表达式返回类型
    我们都知道java中,如果char类型和int类型做加减法,那么char类型会被精度提升至int类型然后参与运算,返回的也是int类型的数据。那么如果表达式中参与运算的均为char类型,那么表达式返回的类型是什么呢?'A'-'a'经过简单测试,是int类型。charc='w';sb.append('A'+c-'a');......
  • Java基础 多线程
    进程:进程是程序的基本执行实体(简单理解就是,一个软件运行之后,它就是一个进程)线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。简单说,线程就是应用软件中互相独立的、又可以同时运行的功能。如果这样的功能比较多,就形成了多线程 ......
  • 学习Java的第一天 Markdown 语法
    Markdown学习标题:一级标题#+标题名字​二级标题##+.....以此类推二级标题三级标题字体Hello,World!粗体字体前后两个**Hello,World!斜体字体前面一个*Hello,World!又粗又斜字体前后三个***Hello,World!删除线......
  • java项目树出现了红色时针标记,run mian方法时无反应
     java的左侧项目树出现了红色的时针标记,导致java类的代码中String、System等关键字出现红色错误, 解决办法,右键src--markdirectoryas--sourceroot,即可  后续问题:runmian方法时无反应逻辑、配置等都没问题,就是死活没反应。看来一堆教程也没个有用!!! 直接关掉项......
  • Java基础 Commons-io
    Commons-io是apache开源基金组织提供的一组有关IO操作的开源工具包,是用来提高IO流的开发效率的   ......