目录
Swing
一、常用窗体
1. JFrame框架窗体
2. JDialog窗体
二、标签组件
1. 标签
2. 图标
3. 图片图标
三、布局管理器
1. 绝对布局
2. 流布局管理器
3. 边界布局管理器
4. 网格布局管理器
四、面板
1. JPanel
2. JScrollPane
五、按钮组件
1. 提交按钮组件(JButton)
2. 单选按钮组件(JRadioButton)
3. 复选框组件(JCheckBox)
六、列表组件
1. 下拉列表(JComboBox)
2. 列表框(JList)
七、文本组件
1. 文本框(JTextField)
2. 密码框(JPasswordField)
3. 文本域(JTextArea)
Swing窗体是Swing的一个组件,同时也是创建图形化用户界面的容器,可以将其它组件放置在窗体容器中。
JFrame窗体是一个容器,在Swing开发中我们经常要用到,它是Swing程序中各个组件的载体。语法格式如下:
JFrame jf = new JFrame(title);
中更常用的方式是通过继承java.swing.JFrame类创建一个窗体,可通过this关键字调用其方法。
常用的窗体关闭方式有四种:
JDialog窗体是Swing组件中的对话框,继承了AWT组件中的java.awt.Dialog类。功能是从一个窗体中弹出另一个窗体。
在Swing中显示文本或提示信息的方法是使用标签,它支持文本字符串和图标。上面我们提到的JLabel就是这里的内容
标签由JLabel类定义,可以显示一行只读文本、一个图像或带图像的文本。
常用语法格式如下,创建的是一个不带图标和文本的JLabel对象:
JLabel jl = new JLabel();
Swing中的图标可以放置在按钮、标签等组件上,用于描述组件的用途。图标可以用Java支持的图片文件类型进行创建,也可以使用java.awt.Graphics类提供的功能方法来创建。
在Swing中通过Icon接口来创建图标,可以在创建时给定图标的大小、颜色等特性。
con是接口,在使用Icon接口的时候,必须实现Icon接口的三个方法:
public int getIconHeight() public int getIconWidth() public void paintIcon(Component arg0, Graphics arg1, int arg2, int arg3)
前两个方法用于获取图片的长宽,paintIcon()方法用于实现在指定坐标位置画图。
Swing中的图标除了可以绘制之外,还可以使用某个特定的图片创建。利用javax.swing.ImageIcon类根据现有图片创建图标。
对于图片标签,我们经常将图片放置在标签上,用JLabel中的setIcon()方法即可,当然也可以在初始化JLabel对象时为标签指定图标,这需要获取一个Icon实例。
而getResource()方法可以获得资源文件的URL路径,这里的路径是相对于前面的那个类的,所以可将该图片与该类放在同一个文件夹下;如果不在同一个文件夹下,需通过其它方法获取路径。
1. 使用Container.setLayout(null)方法取消布局管理器
2. 使用Container.setBounds()方法设置每个组件的位置和大小
Container container = getContentPane(); // 创建容器 JButton jb = new JButton("按钮"); // 创建按钮 jb.setBounds(10, 30, 100, 30); // 设置按钮位置和大小 container.add(jb); // 将按钮添加到容器中
setBounds()方法中,前两个参数是位置的xy坐标,后两个参数是按钮的长和宽。
流布局管理器是布局管理器中最基本的布局管理器,使用FlowLayout类,像“流”一样从左到右摆放组件,直到占据了这一行的所有空间,再向下移动一行。组件在每一行的位置默认居中排列,要更改位
置可自行设置。
在FlowLayout的有参构造方法中,alignment设置为0时,每一行的组件将被指定左对齐排列;当alignment被设置为2时,每一行的组件将被指定右对齐排列;而为1时是默认的居中排列。
在不指定窗体布局时,Swing组件默认的布局管理器是边界布局管理器,使用的是BorderLayout类。在上个例子中,一个JLabel标签占据了整个空间,实质上是默认使用了边界布局管理器。边界布局管理器还可以容器分为东、南、西、北、中五个区域,可以将组件加入这五个区域中。
package com.kou5; import java.awt.BorderLayout; import java.awt.Container; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.WindowConstants; public class BorderLayoutDemo extends JFrame { private String[] border = {BorderLayout.CENTER, BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.EAST}; // 此数 组用于存放组件摆放位置 private String[] button = {"中", "北", "南", "西", "东"}; // 此数组用于存 放按钮名称 public BorderLayoutDemo() { Container container = this.getContentPane(); this.setLayout(new BorderLayout()); // 设置容器为边界布局管理器 // 循环添加按钮 for(int i=0; i<button.length ; i++) { container.add(border[i], new JButton(button[i])); // 左参数为设 置布局,右参数为创建按钮 } this.setVisible(true); this.setSize(300, 200); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new BorderLayoutDemo(); } }
网格布局管理器将容器划分为网格,组件按行按列排列,使用GridLayout类。在此布局管理器中,每个组件的大小都相同,且会填满整个网格,改变窗体大小,组件也会随之改变。
package com.kou; import java.awt.Container; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.WindowConstants; class GirdLayoutDemo extends JFrame { public GirdLayoutDemo() { Container container = this.getContentPane(); this.setLayout(new GridLayout(7, 3, 5, 5)); // 前两个参数为7行3列, 后两个参数为网格间的间距 for(int i=0; i<20; i++) { container.add(new JButton("按钮" + i)); } this.setVisible(true); this.setSize(300, 300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new GirdLayoutDemo(); } }
面板也是一个容器,可作为容器容纳其他组件,但也必须被添加到其他容器中。Swing中常用面板有JPanel面板和JScrollPane面板。
JPanel面板可以聚集一些组件来布局。继承自java.awt.Container类。
若遇到一个较小的容器窗体中显示一个较大部分内容的情况,可用JScrollPane面板。这是一个带滚动条的面板,就像平时浏览网页,经常遇到的滚动条一样。如果需要在JScrollPane面板中放置多个组件,需将这多个组件放置在JPanel面板上,然后将JPanel面板作为一个整体组件添加在JScrollPane面板上。
package com.kou5; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.WindowConstants; public class JScrollPaneDemo extends JFrame { public JScrollPaneDemo() { Container container = this.getContentPane(); JTextArea tArea = new JTextArea(20, 50); // 创建文本区域组件 tArea.setText("还没学完java"); JScrollPane sp = new JScrollPane(tArea); container.add(sp); this.setVisible(true); this.setSize(300, 150); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JScrollPaneDemo(); } }
其中JTextArea是创建一个文本区域组件,大小为20*50,setText()方法是给该文本区域填值。这里在new一个JScrollPane时,就将文本区域组件添加到其上。
JButton在之前已经出现多次,是较为常用的组件,用于触发特定动作。可以在按钮上显示文本标签,还可以显示图标。
默认情况下,单选按钮显示一个圆形图标,通常在其旁放置一些说明性文字。当用户选中某个单选按钮后,按钮组中其它按钮将被自动取消,这时就需要按钮组(ButtonGroup)来将同组按钮放在一起,该按钮组中的按钮只能选择一个,而不在此按钮中的按钮不受影响
复选框是一个方块图标,外加一段描述性文字,与单选按钮的区别就是可以多选。每一个复选框都提供“选中”与“不选中”两种状态。
下拉列表框使用JComboBox类对象来表示,如下方代码:
package com.kou5; import javax.swing.*; import java.awt.*; public class Demo extends JFrame { public Demo(){ Container container = this.getContentPane(); Icon icon = new ImageIcon(Demo.class.getResource("koudada.jpg")); JComboBox status = new JComboBox(); status.addItem(null); status.addItem("正在上映"); status.addItem("即将上映"); status.addItem("下架"); container.add(status); this.setVisible(true); this.setSize(500, 350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new Demo(); } }
列表框只是在窗体上占据固定的大小,如果要使列表框具有滚动效果,可以将列表框放入滚动面板中。使用数组初始化列表框的参数如下。
package com.kou5; import javax.swing.*; import java.awt.*; public class Demo extends JFrame { public Demo(){ Container container = this.getContentPane(); Icon icon = new ImageIcon(Demo.class.getResource("koudada.jpg")); //使用数组初始化列表框的参数如下。 String[] contents = {"1", "2", "3"}; JList jl = new JList(contents); container.add(jl); this.setVisible(true); this.setSize(500, 350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new Demo(); } }
将Vector类型的数据作为初始化JList的参数如下。
package com.kou5; import javax.swing.*; import java.awt.*; import java.util.Vector; public class Demo extends JFrame { public Demo(){ Container container = this.getContentPane(); Icon icon = new ImageIcon(Demo.class.getResource("koudada.jpg")); //将Vector类型的数据作为初始化JList的参数如下 Vector contents = new Vector(); JList jl = new JList(contents); contents.add("1"); contents.add("2"); contents.add("3"); container.add(jl); this.setVisible(true); this.setSize(500, 350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new Demo(); } }
文本框用来显示或编辑一个单行文本,语法格式如下:
JTextField jt = new JTextField("aaa"); // 创建一个文本框,值为aaa JTextField jt2 = new JTextField("aaa", 20); // 创建一个长度为20的文本框,值为 aaa jt.setText(""); // 将文本框置空
密码框与文本框的定义与用法类似,但会使用户输入的字符串以某种符号进行加密。如下方代码:
JPasswordField jp = new JPasswordField(); jp.setEchoChar('#'); // 设置回显符号
文本域组件在上面的代码中已经用过,如下方代码所示:
JTextArea tArea = new JTextArea(20, 50); // 创建文本区域组件 tArea.setText("还没学完java");
还有其他内容可参考API或源码。常用的结构和方法就这么多了,现在这个不怎么用了。 了解即可!