点击返回标题->JavaGUI期末速成版-CSDN博客
前言
依旧先声明,本篇记录的JavaGUI编程都是十分精简的,内容只取常用的、套路的、应付期末考试的。
在学习本篇之前,很有必要先弄清楚Java基于swing包下的图形化编程的层次逻辑。
在前一篇中,我们粗略明白了主窗口(JFrame类对象)和子窗口(JDialog类对象)。
在此基础上,我们进一步想往窗口中加入一些东西,比如标签、按钮、文本框等等(习惯称这些玩意叫作“组件”)。
先卖个关子——想一想,组件是直接塞在窗口里的嘛?
答案为否,我们必须借助一个名为容器的东西,先把容器嵌在窗口中,然后才可以把各种组件往容器里塞。(部分组件可以直接添加到窗口中,但是添加到窗口和添加到容器的效果是一样的,所以我认为不如直接把所有组件都添加到容器中)
打个比方助于理解吧:上一篇讲的JFrame类和JDialog类,它们实例化的对象称作窗口,窗口起到的作用好比一张桌子,各种组件就像电学组件(晶体管、电容、电阻等等),直接把电学组件放在桌子上,似乎不太对劲吧?所以需要一个电路板来容纳、承接它们。其中这个电路板,起到的就是类似于容器的作用。
因此,我们的思路是:先往窗口中嵌入容器后,再往容器中添加组件。
对于这个类,(因为博主是为了应付期末考)我的建议是直接硬记,所有组件都是添加到容器中的,所以记住——先用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);
这个类用来创建一个带有滑动条的面板,你看到它名字里有个Panel,可能就认为它的作用和JPanel差不多,实则不然。它的作用就是让JPanel类对象多一个进度条,多的不讲,实际情况是蒟蒻博主也无暇去学了。所以就记住这个类的几行套路代码好了!
看了下面这4行代码后你肯定觉得很难记,其实我也这么觉得。。。(但其实有编译器代码提示的话,只要理解了就不用记了)。
首先先创建一个JScrollPanel类对象,对此对象我们有两个操作:
- 设置水平滑动条,即示例的第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);
下面进行一个案例,添加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();
}
}
JLabel组件可以显示文本、图像,还可以设置标签内容的垂直和水平对齐方式。
重点是只能接收单行文本的输入。
重点是能接收多行文本输入
①JButton
最朴实无华的按钮组件,只要会用下面这行代码来创建按钮就行了。
JButton button = new JButtion("按钮名字");
后面两个按钮预估期末考不是重点,所以我不展开讲,以后估计也没机会再用得到了。。想要学习的就建议去查阅其它资料了。
②JCheckBox
③JRadioButton
JRadioButton组件被称为单选按钮组件,单选按钮只能选中一个,就像收音机上的电台控制按钮,当按下一个按钮,先前按下的按钮就会自动弹起。
(实际上还有一大堆组件,但根本没时间和精力去学习了/(ㄒoㄒ)/~~)
下面利用一个案例来综合知识。创建一个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ㄒ)/~~)。