JAVA Swing 开发(JFrame JDialog JButton JPanel JScrollPanel )

本文介绍了Java Swing的主要组件,包括JFrame、JDialog、JPanel和JScrollPane等,详细讲解了它们的功能、使用方法及代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA Swing 开发

AWT 创建和使用的界面或按钮具有本地外观的感觉,绘制出的界面不完全具备跨平台性,操作系统不同绘制出来的界面可能不同,Swing与本地图形库没有太大的关系,也就是说,不管什么操作系统只要使用了Swing 绘制界面,显示都是一样的,Swing具有跨平台性,而且能绘制比AWT更丰富的图形界面,虽然Swing提供的组件可以更方便地开发Java应用程序,但是Swing 并不能取代AWT,在开发Swing程序时通常借助AWT的一些对象来共同完成应用程序的设计。

java.awt包中有一个container类,JComponent是它的子类,大部分Swing组件都是JComponent直接或间接类,Swing的体系结构如下:

JComponent抽象类的实现:在这里插入图片描述

Swing的组件大部分和AWT类似,只是名字前面加了一个J,JFrame,JDialog,Jwindow都是Window的子类,其中JWindow很少使用。

JFrame

JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看做是承载这些Swing组件的容器,可以通过继承JFrame类创建一个窗体,在这个窗体中添加组件,同时为组件设置事件,由于该窗体继承了Frame类,所以他拥有最大化,最小化,关闭按钮。
JFrame窗体与Frame窗体有所不同,Frame窗体需要注册监听事件实现窗体关闭功能,JFrame只需要调用setDefaultOperation(int operation)方法,Java提供了集中可设置的常量用于关闭窗体,封装在javax.swing.WindowConstants中:
在这里插入图片描述
DO_NOTHING_ON_CLOSE(0) :无操作的默认窗体关闭操作
DISPOSE_ON_CLOSE (2): 移除窗体的默认窗体关闭操作
HIDE_ON_CLOSE(1):隐藏窗体的默认窗口关闭操作
EXIT_ON_CLOSE(3): 退出应用程序的默认关闭窗体操作

代码示例:

import javax.swing.*;
import java.awt.*;
public class TestJFrame {

    public static void main(String[] args) {

        JFrame jFrame=new JFrame("JFrame窗体");
        JButton jButton=new JButton("按钮");
        
        jFrame.add(jButton);  //添加按钮
        jFrame.setLayout(new FlowLayout());  //设置布局

        jFrame.setSize(200,150)  ;

        //Frame窗体需要注册监听事件实现窗口关闭功能,内部可以使用javax.swing.WindowConstants中封装的常量
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jFrame.setVisible(true);
    }
}

显示样式:
在这里插入图片描述
在运行程序后弹出JFrame窗体,在该代码中先创建了一个JFrame窗体,然后创建一个按钮并添加到窗体中,设置了窗体布局和大小,调用并setDefaultCloseOperation(int operation)方法设置窗体的关闭方式,最后设置窗体为可见,这是JFrame窗体的基本使用。

JDialog

JDialog是swing组件中的对话框,它继承了AWT 组件中的Dialog类,其功能是从一个窗体中弹出另一个窗体。与JFrame类似,实质上是另一种类型的窗体,JDialog类常用的构造方法如下:

在这里插入图片描述
代码示例:

    package com.huawei.ncre;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestJDialog {
    public static void main(String[] args) {

        //创建一个JFrame窗体:
        JFrame jf=new JFrame("JFrame窗体");
        //设置布局
        jf.setLayout(new FlowLayout());
        jf.setSize(300,500);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);

        JButton jb1=new JButton("按钮1");
        JButton jb2=new JButton("按钮2");

        //添加按钮
        jf.add(jb1);
        jf.add(jb2);

        final  JLabel jLabel=new JLabel();
        final JDialog jd=new JDialog(jf,"JDialog窗口");
        jd.setSize(200,150);
        jd.setLocation(50,60);
        jd.setLayout(new FlowLayout());

        jb1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jd.setModal(true);
                if (jd.getComponents().length==1){
                    jd.add(jLabel);
                }
                jLabel.setText("JDialog窗口1");
                jd.setVisible(true);
            }
        });

        jb2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jd.setModal(false);
                if (jd.getComponents().length==1){
                    jd.add(jLabel);
                }
                jLabel.setText("JDialog 窗口2");
                jd.setVisible(true);
            }
        });
    }
}

在这里插入图片描述
在这里插入图片描述

运行程序中弹出JFrame窗口,窗口中有两个按钮,分别是"JDialog窗口1" “JDialog窗口2” ,单击两个按钮,弹出相应对话框,在代码中,首先创建JFrame窗体,在窗体中添加两个按钮,于是弹出JDialog窗口,然后分别为两个按钮添加监听事件,单击按钮触发事件,弹出对应窗口,此时不能操作JFrame窗体,要先将弹出的JDialog对话框关闭后才可以操作。

中间容器

swing中不仅有JFrame和JDialog 这样的顶级窗口,还提供了一些中间容器,这些容器不能单独存在,只能放置在顶级窗口中,其中常用的两种为JPanel和JScrollPane:

JPanel:

JPanel 与AWT 中的Panel组件类似,它没有边框,不能被移动,放大,缩小或关闭,它的默认布局管理器是FlowLayout,JPanel的构造方法如下:

在这里插入图片描述

代码演示:

package com.huawei.ncre;

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

public class TestJPanel {

    public static void main(String[] args) {
        //创建JFrame窗体
        JFrame jf=new JFrame("JFrame窗口");
        jf.setLayout(new GridLayout(2,1,10,10));

        JPanel jp1 = new JPanel(new GridLayout(1, 3, 10, 10));
        JPanel jp2 = new JPanel(new GridLayout(1, 2, 10, 10));
        JPanel jp3 = new JPanel(new GridLayout(1, 2, 10, 10));
        JPanel jp4 = new JPanel(new GridLayout(2, 1, 10, 10));


        jp1.add(new JButton("按钮1"));
        jp2.add(new JButton("按钮2"));
        jp3.add(new JButton("按钮3"));
        jp4.add(new JButton("按钮4"));

        jf.add(jp1);
        jf.add(jp2);
        jf.add(jp3);
        jf.add(jp4);
        jf.setSize(200,150);

        //设置窗体关闭方式
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
    }
}

样式:
在这里插入图片描述
运行程序弹出JFrame窗口,窗口内有4个按钮,例子中,先创建了JFrame窗体,然后设置布局,创建了4个中间容器JPanel,将4个按钮添加进4个Jpanel,最后将4个中间容器添加进JFrame窗体

JsrollPane:

在设置界面时,可能会遇到一个较小的容器窗体中显示较多内容的情况,这时可以使用JScrollPane面板,JScrollPane是一个带滚动条的面板容器,但是JScrollPane只能放置一个组件,并且不能使用布局管理器,如果需要在其中放置多个组件,需要将多个组件放置在JPanel面板容器中,然后将JPanel面板作为一个整体组件添加到JScrollPane面板中。

Vue.js的diff算法是用来比较新旧虚拟节点(VNode)的差异,并将差异应用到真实的DOM树上,以更新视图。具体的diff过程如下: 1. 用JavaScript对象结构表示DOM树的结构,并构建一个真正的DOM树,插入到文档中。 2. 当状态发生变更时,重新构建一棵新的对象树。 3. 对比新旧树的差异(diff),记录差异。 4. 将第二棵树所记录的差异应用到第一棵树所构建的真正的DOM树上(patch),从而更新视图。 在比较过程中,会根据节点的类型和属性进行判断和比较。如果节点类型相同且属性相同,则认为是相同的节点,直接复用旧节点。如果节点类型不同或属性不同,则认为是不同的节点,需要创建新的真实节点。 具体的比较方式是通过遍历新旧节点的子节点,按照顺序进行比较。如果发现相同的节点,则复用旧节点,并将旧节点的索引移动到下一个节点。如果发现不同的节点,则创建新的真实节点,并将新节点的索引移动到下一个节点。 总结来说,Vue.js的diff算法通过比较新旧虚拟节点的差异,将差异应用到真实的DOM树上,以实现高效的视图更新。 #### 引用[.reference_title] - *1* *2* *3* [vue中的diff算法](https://blog.csdn.net/weixin_43638968/article/details/112686317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焱宣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值