Java GUI-Swing详解
文章目录
- 一、GUI-Swing
- 1. Swing介绍
- 2. 窗口
- 3. 弹窗
- 4. 标签
- 1)图标标签
- 2)图片标签
- 5. 面板
- 1)普通面板
- 2)带有滚动条的面板
- 6. 按钮
- 1)图片按钮
- 2)单选按钮
- 3)复选按钮
- 7. 列表
- 1)下拉框
- 2)列表框
- 8. 文本框
- 1)文本框
- 2)密码框
- 3)文本域
一、GUI-Swing
1. Swing介绍
- 什么是Swing
- 也是Java图形用户界面的处理方法,不过Swing是高级图形库,是基于Awt平台为基础构建起来的组件
- Swing特点
- 是轻量级的,没有使用Windows函数
- 移植性好,因为没有使用Windows平台的函数,而是使用虚拟机进行调用,所以可以在任意的平台运行,没有平台限制
- 运行较慢,在Windows平台运行下还是Awt更快
2. 窗口
-
JFrame
-
作用
- Swing中的顶级窗口,也是容器,用来存放其他的容器与组件
-
注意事项
- 在JFrame窗口中,并不是直接在窗口上进行操作的,而是隔了一个默认的ContentPane容器,优先展示的是ContentPane的属性设置。所以有时候会发生对JFrame窗口进行设置后,看不到设置的结果,就是因为优先展示的是ContentPane的设置。
- 使用getContentPane()方法得到这个窗口容器
- 建议除了窗口的关闭按钮、大小、位置、可见性等,其他颜色、布局、添加组件等操作都在窗口容器中进行操作
-
代码示例
- 创建一个JFrame窗口,并在窗口的中间添加一个标签
public class WindowJFrame {//Swing中Jframe窗口练习public static void main(String[] args) {new WindowJFrame("Swing中JFrame窗口练习");}public WindowJFrame(String total) {JFrame frame = new JFrame(total);//创建JFrame窗口//设置窗口的位置大小属性frame.setBounds(100, 100, 500, 500);//获得窗口的容器Container container = frame.getContentPane();//使用窗口容器设置窗口的布局为绝对布局container.setLayout(null);//设置标签Label label = new Label("这是JFrame窗口的标签");label.setBackground(Color.yellow);label.setBounds(200, 200, 150, 50);//将标签添加进窗口容器中container.add(label);//设置可见性及窗口的关闭按钮frame.setVisible(true);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);} }
3. 弹窗
-
JDialog
-
作用
- 创建一个对话框窗口(弹窗)
- 这个弹窗默认实现了关闭按钮的功能,不用再手动实现
-
代码练习
- 创建一个窗口,窗口中间添加一个JButton按钮,当点击这个按钮时,就弹出一个弹窗
public class JDialogTest extends JFrame {//Swing弹窗练习public static void main(String[] args) {new JDialogTest("Swing中弹窗JDialog的练习");}public JDialogTest(String total) {//设置窗口super(total);this.setBounds(100, 100, 500, 500);this.setVisible(true);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);this.setResizable(false);//设置窗口是否可拉伸//得到窗口的容器,用来设置布局,放置组件Container container = this.getContentPane();//设置窗口容器的布局container.setLayout(null);//设置为绝对布局//创建一个JButton按钮JButton button = new JButton("点击我,你就可以获得一个弹窗");button.setBounds(150, 200, 250, 50);button.setBackground(Color.yellow);//设置JButton按钮的触发事件,弹出一个弹窗button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new MyJDialog("这是我的弹窗");//创建弹窗}});//将JButton按钮放进容器中container.add(button);} }class MyJDialog extends JDialog {public MyJDialog(String total) {//设置弹窗this.setBounds(500, 50, 400, 400);this.setVisible(true);/*不需要因为弹窗自实现窗口关闭功能*/this.setTitle("你想要的小弹窗");this.setResizable(false);//获得弹窗的容器Container container = this.getContentPane();container.setLayout(null);//创建标签JLabel label = new JLabel("我的弹窗标签");label.setBounds(150, 100, 100, 50);label.setBackground(Color.cyan);//将JLabel标签放进弹窗中container.add(label);} }
4. 标签
1)图标标签
-
作用
- 绘制一个图标,放在标签或按钮上面
-
代码练习
- 创建一个窗口,在窗口的中间添加一个JLabel标签,在标签上绘制一个矩形
public class IconTest extends JFrame implements Icon {//Swing图标练习private int width;private int height;public static void main(String[] args) {new IconTest().init();}/*** 初始化方法*/private void init() {IconTest frame = new IconTest(50, 30);this.setBounds(100, 100, 500, 500);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);this.setResizable(false);this.setVisible(true);JLabel label = new JLabel("图标", frame, SwingConstants.CENTER);//得到窗口的容器Container container = this.getContentPane();//将标签添加进窗口容器中container.add(label);}public IconTest() {}public IconTest(int width, int height) {this.width = width;this.height = height;}@Overridepublic void paintIcon(Component c, Graphics g, int x, int y) {g.setColor(Color.YELLOW);g.fillRect(x, y, 50, 30);}@Overridepublic int getIconWidth() {return this.width;}@Overridepublic int getIconHeight() {return this.height;} }
2)图片标签
-
ImageIcon
-
作用
- 将一个图片放标签或按钮上面
-
代码练习
- 将一个图片放在标签上
public class ImageTest {//将一个图片设为标签的图案public static void main(String[] args) {new MyJFrame("将图片设置为标签的图案练习");} }class MyJFrame extends JFrame {public MyJFrame() {super();}public MyJFrame(String title) {super(title);this.setBounds(100, 100, 500, 500);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//得到图片的资源URL url = MyJFrame.class.getResource("littleRobot.jpg");//括号内是图片的路径//将图片转为图标ImageIcon imageIcon = new ImageIcon(url);JLabel label = new JLabel("我的标签");label.setSize(26, 23);label.setLocation(150, 150);//将图标与标签关联label.setIcon(imageIcon);label.setHorizontalAlignment(SwingConstants.CENTER);//创建窗口容器,并将标签添加进去Container container = this.getContentPane();container.add(label);this.setVisible(true);//最有再将窗口设置为可见} }
5. 面板
1)普通面板
-
JPanel
-
作用
- 是一个轻量级的容器
-
代码练习
- 创建一个窗口,练习按钮的表格
public class JPanelTest {//JPanel面板练习public static void main(String[] args) {new MyJPanelFrame("JPanel面板练习");} }/*** 自定义的窗口类*/ class MyJPanelFrame extends JFrame {public MyJPanelFrame(String tital) {super(tital);this.setBounds(100, 100, 500, 500);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//得到窗口的容器,并将窗口布局为两行两列的表格Container container = this.getContentPane();container.setLayout(new GridLayout(2, 2, 10, 10));//后面的两个10分别表示上下与左右间距//创建四个面板JPanel panel1 = new JPanel(new GridLayout(2, 1));JPanel panel2 = new JPanel(new GridLayout(1, 2));JPanel panel3 = new JPanel(new GridLayout(2, 2));JPanel panel4 = new JPanel(new GridLayout(2, 3));//往面板中添加JButton按钮panel1.add(new JButton("1"));panel1.add(new JButton("1"));panel2.add(new JButton("2"));panel2.add(new JButton("2"));panel3.add(new JButton("3"));panel3.add(new JButton("3"));panel3.add(new JButton("3"));panel3.add(new JButton("3"));panel4.add(new JButton("4"));panel4.add(new JButton("4"));panel4.add(new JButton("4"));panel4.add(new JButton("4"));panel4.add(new JButton("4"));panel4.add(new JButton("4"));//将四个面板装进窗口容器中container.add(panel1);container.add(panel2);container.add(panel3);container.add(panel4);//将窗口设置为可见的this.setVisible(true);} }
2)带有滚动条的面板
-
JScrollPanel
-
作用
- 一个带有滚动条的面板
-
代码练习
- 创建一个带有滚动条的文本窗口
public class JScrollPanelTest extends JFrame {//滚动面板及文本域练习public static void main(String[] args) {new JScrollPanelTest("滚动面板及文本域的练习");}public JScrollPanelTest(String title) {super(title);this.setBounds(100, 100, 500, 500);//创建文本域,并设置文本域JTextArea textArea = new JTextArea("文本域");//内容textArea.setBounds(200, 200, 200, 300);//大小和位置textArea.setBackground(new Color(222, 230, 225));//颜色//创建滚动面板JScrollPane scrollPane = new JScrollPane(textArea);//创建窗口的容器,将滚动面板添加进窗口容器中Container container = this.getContentPane();container.add(scrollPane);//设置窗口的关闭及显示等this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭this.setVisible(true);//可见性this.setResizable(false);//是否可拉伸} }
6. 按钮
1)图片按钮
-
ImageIcon
-
作用
- 将一个图片作为按钮的图标
-
代码示例
- 将一个图片设置为JButton按钮的图标
public class PictureJButtons extends JFrame {//图片按钮练习public static void main(String[] args) {new PictureJButtons("图片按钮练习");}public PictureJButtons(String title) {//创建窗口super(title);this.setBounds(100, 100, 500, 500);//获得窗口的容器Container container = this.getContentPane();container.setLayout(null);//设置窗口布局为绝对布局//获得图片图标URL url = PictureJButtons.class.getResource("wechatIcon.png");ImageIcon imageIcon = new ImageIcon(url);//创建JButton按钮,并与图片图标相关联JButton button = new JButton();button.setIcon(imageIcon);button.setBounds(230, 230, 38, 38);//将JButton按钮放进窗口容器中container.add(button);//设置窗口的关闭及可见性this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);} }
2)单选按钮
-
JRadioButton
-
作用
- 单选按钮,同一组(ButtonGroup)中只能有一个按钮被选中
-
代码练习
- 实现三个单选按钮,让用户选择左中右
public class SingleButtons extends JFrame {//单选按钮的练习public static void main(String[] args) {new SingleButtons("单选按钮的练习");}public SingleButtons(String title) {super(title);this.setBounds(100, 100, 500, 500);Container container = this.getContentPane();container.setLayout(null);//创建单选按钮JRadioButton leftButton = new JRadioButton("LEFT");leftButton.setBounds(120, 230, 80, 40);JRadioButton rightButton = new JRadioButton("CENTER");rightButton.setBounds(230, 230, 80, 40);JRadioButton centerButton = new JRadioButton("RIGHT");centerButton.setBounds(340, 230, 80, 40);//创建单选框的分组,一组之中同时只能选择一个按钮ButtonGroup group = new ButtonGroup();//将按钮放置进分组中group.add(leftButton);group.add(rightButton);group.add(centerButton);//将分组放进窗口容器中container.add(leftButton);container.add(rightButton);container.add(centerButton);//窗口关闭等设置this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);} }
3)复选按钮
-
JCheckBox
-
作用
- 可以选择复选框中的多个选项
-
代码练习
- 实现复选按钮,可以选择多个
*/ public class CheckButtons extends JFrame {//复选按钮的练习public static void main(String[] args) {new CheckButtons("复选按钮的练习");}public CheckButtons(String title) {super(title);this.setBounds(100, 100, 500, 500);Container container = this.getContentPane();container.setLayout(null);//采用绝对布局//创建复选按钮JCheckBox checkBox1 = new JCheckBox("选项1");checkBox1.setBounds(150, 230, 80, 40);JCheckBox checkBox2 = new JCheckBox("选项2");checkBox2.setBounds(280, 230, 80, 40);//将复选按钮放进窗口容器中container.add(checkBox1);container.add(checkBox2);//窗口关闭等设置this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);} }
7. 列表
1)下拉框
-
JComboBox
-
作用
- 多个指定的选值,用户可以从多个指定的选值之中选择一个
- 选择地域、年龄段、性别等有固定内容的、不希望用户随意输入的选项时用到
-
代码练习
- 让用户选择自己的年龄段
public class DropDownBoxs extends JFrame {//下拉框的练习public static void main(String[] args) {new DropDownBoxs("下拉框的练习");}public DropDownBoxs(String title) {super(title);this.setBounds(100, 100, 500, 500);Container container = this.getContentPane();container.setLayout(null);//创建下拉框及设置JComboBox<String> comboBox = new JComboBox<>();comboBox.setBounds(100, 200, 300, 30);comboBox.setBackground(Color.cyan);//给下拉框中添加文字comboBox.addItem("0--20岁");comboBox.addItem("20--30岁");comboBox.addItem("30--50岁");comboBox.addItem("50--70岁");comboBox.addItem("70--100岁");//将下拉框添加进窗口容器中container.add(comboBox);//窗口关闭等设置this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);} }
2)列表框
-
JList
-
作用
- 显示对象列表,可以与集合相关联,动态的展示集合中的信息
-
代码练习
- 使用列表框将集合中的元素显示出来
public class ListBoxs extends JFrame {//列表框的练习public static void main(String[] args) {new ListBoxs("列表框的练习");}public ListBoxs(String title) {super(title);this.setBounds(100, 100, 500, 500);Container container = this.getContentPane();container.setLayout(null);//创建列表框,并与集合相关联Vector<String> vector = new Vector<>();//创建集合JList<String> list = new JList<>(vector);//创建列表,与集合相关联,列表中展示集合中的元素list.setBounds(100, 100, 300, 300);//给集合中添加元素vector.add("ZhangSan------23");vector.add("LiSi------24");vector.add("WangWu------25");vector.add("ZhaoLiu------26");//将列表框添加进窗口容器container.add(list);//窗口关闭等设置this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);} }
8. 文本框
1)文本框
-
JTextField
-
作用
- 只能接收用户单行输入,遇到回车会自动触发事件
-
代码练习
- 创建一个文本框,可以接收用户输入的信息
public class JTextFields extends JFrame {//文本框的练习,文本框一次只能输入一行public static void main(String[] args) {new JTextFields("文本框的练习");}public JTextFields(String title) {super(title);this.setBounds(100, 100, 500, 500);Container container = this.getContentPane();container.setLayout(null);//创建文本框JTextField textField = new JTextField();textField.setBounds(100, 100, 300, 30);//将文本框与窗口容器关联container.add(textField);//窗口关闭等设置this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);} }
2)密码框
-
JPasswordField
-
作用
- 密码框,用户看不到输入的内容,但是后台可以接收到实际的内容
-
代码练习
- 创建一个密码框
public class PasswordBoxs extends JFrame {//密码框的练习public static void main(String[] args) {new PasswordBoxs("密码框的练习");}public PasswordBoxs(String title) {super(title);this.setBounds(100, 100, 500, 500);Container container = this.getContentPane();container.setLayout(null);//创建密码框JPasswordField passwordBox = new JPasswordField("我是密码框");passwordBox.setBounds(100, 100, 300, 30);//将用户输入的字符样式更改为指定的字符//passwordBox.setEchoChar('*');//将密码框添加进窗口容器中container.add(passwordBox);//窗口关闭等设置this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);} }
3)文本域
-
JTextArea
-
作用
- 一个支持多行输入的文本域,带有滚动条
-
代码练习
- 创建一个文本域
public class TextAreas extends JFrame {//文本域的练习public static void main(String[] args) {new TextAreas("文本域的练习");}public TextAreas(String title) {super(title);this.setBounds(100, 100, 500, 500);Container container = this.getContentPane();container.setLayout(null);//创建文本域TextArea textArea = new TextArea("文本域");textArea.setBounds(100, 100, 300, 300);//将文本域添加进窗口容器中container.add(textArea);//窗口关闭等设置this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);} }
发布评论