JavaGUI(但期末速成版)之容器和控件

 点击返回标题->JavaGUI期末速成版-CSDN博客


前言

依旧先声明,本篇记录的JavaGUI编程都是十分精简的,内容只取常用的、套路的、应付期末考试的。


在学习本篇之前,很有必要先弄清楚Java基于swing包下的图形化编程的层次逻辑。

在前一篇中,我们粗略明白了主窗口(JFrame类对象)和子窗口(JDialog类对象)。

在此基础上,我们进一步想往窗口中加入一些东西,比如标签、按钮、文本框等等(习惯称这些玩意叫作“组件”)。

先卖个关子——想一想,组件是直接塞在窗口里的嘛?

答案为否,我们必须借助一个名为容器的东西,先把容器嵌在窗口中,然后才可以把各种组件往容器里塞。(部分组件可以直接添加到窗口中,但是添加到窗口和添加到容器的效果是一样的,所以我认为不如直接把所有组件都添加到容器中)

打个比方助于理解吧:上一篇讲的JFrame类和JDialog类,它们实例化的对象称作窗口,窗口起到的作用好比一张桌子,各种组件就像电学组件(晶体管、电容、电阻等等),直接把电学组件放在桌子上,似乎不太对劲吧?所以需要一个电路板来容纳、承接它们。其中这个电路板,起到的就是类似于容器的作用。

因此,我们的思路是:先往窗口中嵌入容器后,再往容器中添加组件。


一,容器

(1)JPanel

对于这个类,(因为博主是为了应付期末考)我的建议是直接硬记,所有组件都是添加到容器中的,所以记住——先用JPanel类实例化一个容器对象,然后把需要的组件添加到容器中,最后根据是否需要滑动条来决定:

①不要滑动条,则直接把JPanel类对象添加到(用add方法)窗口类对象中。

②需要滑动条,就把JPanel类对象显示到(用setViewportView方法)JScrollPanel类对象中,然后把JScrollPanel类对象添加到窗口类对象中。

比如我要添加4个按钮(按钮控件在下面会讲的):

那么第一步先创建一个JPanel类对象,然后把4个创建好的按钮对象添加到JPanel类对象中。

JPanel pane = new JPanel();//实例化容器对象
//实例化4个按钮组件对象
JButton button1 = new JButton("按钮1");
JButton button2 = new JButton("按钮2");
JButton button3 = new JButton("按钮3");
JButton button4 = new JButton("按钮4");
//把4个按钮组件对象添加到容器中
pane.add(button1);
pane.add(button2);
pane.add(button3);
pane.add(button4);

接下来第二步假设我们不需要滑动条,所以直接把JPanel类对象添加到提前创建好的窗口类对象(fr)中。

fr.add(pane);

(2)JScrollPanel

这个类用来创建一个带有滑动条的面板,你看到它名字里有个Panel,可能就认为它的作用和JPanel差不多,实则不然。它的作用就是让JPanel类对象多一个进度条,多的不讲,实际情况是蒟蒻博主也无暇去学了。所以就记住这个类的几行套路代码好了!

看了下面这4行代码后你肯定觉得很难记,其实我也这么觉得。。。(但其实有编译器代码提示的话,只要理解了就不用记了)。

首先先创建一个JScrollPanel类对象,对此对象我们有两个操作:

  1. 设置水平滑动条,即示例的第2行代码。
  2. 设置垂直滑动条,即示例的第3行代码。

        (设置滑动条时,我们常用两种操作:

        ①设置为需要时才出现滑动条,即第2行代码中的参数        

        ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED

        ②设置为滑动条一直存在,即第3行代码中的参数

        ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS)

(还是放张图在这里吧...虽然感觉没啥用)

然后,把提前创建好的JPanel类对象(pane)显示到(用setViewportView方法)JScrollPanel类对象中。

JScrollPane scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setViewportView(pane);

最后,承接JPanel类中讲到的,接下来第二步假设我们需要滑动条,则把JScrollPanel类对象添加到提前创建好的窗口对象(fr)中。

fr.add(scrollPane);

(3)综合运用

下面进行一个案例,添加4个按钮到GUI中,并把面板设置成水平滑动条需要时出现,垂直滑动条一直出现。

import javax.swing.*;

public class Main {
    public static void createGUI() {
        JFrame fr = new JFrame("这是主窗口");//通常直接在有参构造的时候命名,省得后续用setTitle()方法命名了。
        fr.setSize(400, 250);//设置窗体宽高
        fr.setLocation(400, 300);//设置窗体坐标
        //下面这行代码的作用和上面两行被注释的代码的作用一模一样,不信你试试~
        //fr.setBounds(400, 300, 400, 250);
        fr.setVisible(true);//设置窗体可见,基本必写吧?
        fr.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体关闭按钮响应事件为关闭此窗口。

        //创建容器和按钮,把按钮塞到容器中。
        JPanel pane = new JPanel();
        JButton button1 = new JButton("按钮1");
        JButton button2 = new JButton("按钮2");
        JButton button3 = new JButton("按钮3");
        JButton button4 = new JButton("按钮4");
        pane.add(button1);
        pane.add(button2);
        pane.add(button3);
        pane.add(button4);

        //创建滑动面板,设置水平滑动需要时出现,垂直滑动一直出现。然后让事先创建好的容器对象(pane)显示到滑动面板对象上。
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.setViewportView(pane);
        
        //最后把滑动面板对象(不要错误添加成容器对象pane噢~那样就变成没有滑动效果的案例了)添加到事先创建好的窗口对象(fr)上。
        fr.add(scrollPane);
    }

    public static void main(String[] args) {
        createGUI();
    }
}


二,常用控件

(1)文本组件

①JLabel

JLabel组件可以显示文本、图像,还可以设置标签内容的垂直和水平对齐方式。

②JTextField

重点是只能接收单行文本的输入。

③JTextArea

重点是能接收多行文本输入

(2)按钮组件

①JButton

最朴实无华的按钮组件,只要会用下面这行代码来创建按钮就行了。

JButton button = new JButtion("按钮名字");

后面两个按钮预估期末考不是重点,所以我不展开讲,以后估计也没机会再用得到了。。想要学习的就建议去查阅其它资料了。

②JCheckBox

③JRadioButton

JRadioButton组件被称为单选按钮组件,单选按钮只能选中一个,就像收音机上的电台控制按钮,当按下一个按钮,先前按下的按钮就会自动弹起。

(实际上还有一大堆组件,但根本没时间和精力去学习了/(ㄒoㄒ)/~~)

(3)综合运用

下面利用一个案例来综合知识。创建一个GUI,如下图所示:其中文本框长度为20。

import javax.swing.*;

public class Main {
    public static void createGUI() {
        JFrame fr = new JFrame("这是主窗口");//通常直接在有参构造的时候命名,省得后续用setTitle()方法命名了。
        fr.setSize(400, 250);//设置窗体宽高
        fr.setLocation(400, 300);//设置窗体坐标
        //下面这行代码的作用和上面两行被注释的代码的作用一模一样,不信你试试~
        //fr.setBounds(400, 300, 400, 250);
        fr.setVisible(true);//设置窗体可见,基本必写吧?
        fr.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体关闭按钮响应事件为关闭此窗口。

        //创建容器和Jlabel、JTextField、JButton组件,并塞到容器中。
        JPanel pane = new JPanel();
        JLabel label = new JLabel("请输入:");
        JTextField textField = new JTextField(20);
        JButton button = new JButton("发送");
        pane.add(label);
        pane.add(label);
        pane.add(textField);
        pane.add(button);
        //把容器放在窗口中
        fr.add(pane);
    }

    public static void main(String[] args) {
        createGUI();
    }
}

写完这个综合运用,好学的小伙伴(争对看到这句话的所有认~)就提前好奇了,这些按钮啊、输入框之类的,似乎看起来只是个摆设?没有具体的功能?

当然能实现具体的功能,等下篇学了事件的监听和处理之后,就能根据按钮的按下与否来响应对应的事件了(到了期末才发现要学的尊嘟好多/(ㄒoㄒ)/~~)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/261583.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EasyUiAutotest 项目目录设置及说明

一、前置说明 清晰的项目目录结构非常重要的,它能够为项目提供结构化、易维护、易理解的环境。 二、目录设置及说明 项目目录结构如下: EasyUiAutotest ├───atme # me,供个人使用的目录,与整体项目无关,存…

指针---你真的会使用指针吗?

指针作为C语言中的一个部分,可以说指针是C语言的核心,那么它的难度肯定是不言而喻的,总是能把人给绕得找不到方向。 今天我就好好的说一说指针这个东西。 1、何为指针? 指针是C语言中用来存放地址的一个变量类型。我们可以将指针看…

[电子榨菜] js中的闭包closure

0.写在前面: 下学期就打算去实习了,这段时间要密集接收考试和面试的捶打,计网和软工就没有办法为大家继续贡献开源内容了,明年九月份之前的更新内容将会以前端,人工智能,和工程设计为基础, 很抱歉啦,不过我还是希望我这一年来的努力可以帮到一些人.虽然自己这一年过的浑浑噩噩…

more的详细用法

概要&#xff1a; Linux中more的功能是分页显示文件内容 空格键显示下一屏(页)&#xff0c;回车键Enter显示下一行&#xff0c;q键退出 本篇所用系统是Ubuntu22.04 一、more filename more后面跟的是文件名&#xff0c;分页显示文件内容 二、more < filename more从…

C语言—每日选择题—Day59

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 以下关于 typedef 正确的描述是&#xff08;&#xff09;【多选】 A&#xff1a;用typedef可以定义各种类型别名&#xff0c;但不能定义变量…

收藏!可能是最完整的全球AI大模型名单

ChatGPT的出现在全球掀起了AI大模型的浪潮。 区块链是生产关系的重构&#xff0c;元宇宙是虚拟场景的重构&#xff0c;而互联网则解决了信息流通和生产效率的问题&#xff0c;但这些都是在生产关系范畴内&#xff0c;而ChatGPT的出现则大幅度提升了生产力&#xff0c;让人类可…

openGauss学习笔记-168 openGauss 数据库运维-备份与恢复-导入数据-使用gs_restore命令导入数据

文章目录 openGauss学习笔记-168 openGauss 数据库运维-备份与恢复-导入数据-使用gs_restore命令导入数据168.1 操作场景168.2 操作步骤168.3 示例 openGauss学习笔记-168 openGauss 数据库运维-备份与恢复-导入数据-使用gs_restore命令导入数据 168.1 操作场景 gs_restore是…

Windows中安装nvm进行Node版本控制

1.nvm介绍 nvm英文全程也叫node.js version management&#xff0c;是一个node.js的版本管理工具。nvm和npm都是node.js版本管理工具&#xff0c;但是为了解决node各种不同之间版本存在不兼容的问题&#xff0c;因此可以通过nvm安装和切换不同版本的node。 2.nvm下载 可在点…

Linux基础(第三部分)

目录 一、查看文件显示命令 1、cat&#xff1a;查看文件内容&#xff1b;上下合并文件 2、标准输入与标准输出&#xff1a; 3、例题&#xff1a;如何合并两个文件 4、tac 就是反方向查看 5、rev 把一行倒过来 6、hexdump 查看硬件设备 7、more和less 8、查看文件内容…

ICC2:Less than minimum edge length和Concave convex edge enclosure

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 首先,要介绍一下这两种drc Less than minimum edge length对应的tf rule如下: 而Concave convex edge enclosure对应图示和tf 规则如下,可

【UML】第7篇 用例图(2/3)

目录 一、什么是用例&#xff08;Use Case&#xff09; 二、用例的识别 2.1 识别用例的思考方法 2.2 识别用例的注意事项 三、用例的命名 四、用例规约 五、用例的粒度处理 错误1&#xff1a;粒度过细 错误2&#xff1a;把步骤当用例 错误3&#xff1a;把活动当用例 …

关于RAP和ZIP之间的区别、关系和转换,看这篇就差不多了

RAR和ZIP文件都是流行的文件格式&#xff0c;允许你以压缩的方式存储文件。因此&#xff0c;文件占用的空间较小&#xff0c;并且可以在需要时快速传输。 当你有一些RAR文件已经被压缩时&#xff0c;由于各种原因&#xff0c;你可能仍然想将它们转换为ZIP文件。阅读本文了解如…

Axure RP 8 for Mac/win中文版:打造完美交互式原型设计体验

Axure RP 8&#xff0c;一款引领潮流的交互式原型设计工具&#xff0c;为设计师提供了无限的可能性&#xff0c;让他们能够创造出逼真的原型&#xff0c;从而更好地展示和测试他们的设计。 Axure RP 8拥有丰富的功能和工具&#xff0c;让设计师可以轻松地创建出复杂的交互式原…

hadoop集群的开启与关闭

背景 很久没完hadoopl,连怎么开启关闭都不会了qwq 1.进入安装hadoop的目录 我这里是已经进入了 2.开启集群 sbin/start-dfs.sh 3.关闭集群 sbin/stop-dfs.sh

尚硅谷 java 2023(基础语法)笔记

一、变量与运算符 1、HelloWorld的编写和执行 class HelloChina{public static void main(String[] args){System.out.println("hello,world!!你好&#xff0c;中国&#xff01;");} } 总结&#xff1a; 1. Java程序编写和执行的过程&#xff1a; 步骤1&#xff1…

【java】java学习笔记

1. 快速入门 // Hello类 public class Hello {// main方法public static void main(String[] args) {System.out.println("hello world!");} } 在控制台输入以下命令&#xff0c;对.java文件&#xff08;源文件&#xff09;进行编译操作&#xff0c;生成Hello.clas…

提前预判和确认再做 现货白银投资的两种思路

在现货白银投资中&#xff0c;对于交易的步骤长期有两种看法。一种是提前预判行情并提前布局。另外一种是等待行情启动再做布局。这种两种方法要怎么选呢&#xff1f;笔者将从自己的角度出发&#xff0c;对这个问题进行讨论。 我们来看一下前一种的投资者&#xff0c;他们喜欢提…

个人或企业为啥要搭建及自己的知识付费平台才有前景?

在知识经济的时代&#xff0c;知识的传播和变现显得愈发重要。许多个人或企业选择将自己的知识、技能和经验通过课程的形式进行传播&#xff0c;以实现知识的价值。然而&#xff0c;在使用其他平台进行课程销售的过程中&#xff0c;他们常常面临着一些问题和挑战。 首先&#…

基于FPGA的简易BPSK和QPSK

1、框图 2、顶层 3、m_generator M序列的生成&#xff0c;输出速率为500Kbps 4、S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据&#xff08;就有4个象限&#xff09;&#xff1b; 5、my_pll是生成256M的时钟作为载波&#xff0c;因为sin和cos信号的…

linux 性能优化-内存优化

CPU 管理一样&#xff0c;内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应 用程序的指令、数据、缓存等。 1.内存原理 1.1.内存映射 1.1.1.日常生活常说的内存是什么? 我的笔记本电脑内存就是 8GB 的这个内存其实是物理内存物理内存也称为主存&#xff0…