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

发布时间:2023年12月21日

?点击返回标题->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ㄒ)/~~)。

文章来源:https://blog.csdn.net/liKeQing1027520/article/details/135138480
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。