Java基础 自学讲义 9. Swing用户界面组件

目录
一. 设计模式
二. 布局管理

  1. 流布局FlowLayout
  2. 边框布局BoderLayout
  3.网格布局GridLayout

三. 文本输入

  1. 文本域
  2.标签和标签组件
  3.密码域
  4.文本区
  5.滚动窗格

四. 选择组件

  1. 复选框

航航说Swing可以少学一些, 不是太有用, 所以学快一点啦~嘤嘤嘤

一. 设计模式

每个组件都有三要素: 内容, 外观, 行为
Swing采用的设计模式(Design Pattern)是: 模型-视图-控制器设计模式(Model-View-Controller) 即MVC模式
在MVC模式中要求我们实现三个独立的类:

模型:存储内容
视图:显示内容
控制器: 控制用户输入

重要的是在model中没有任何关于外观界面的事, 只负责存储内容, 所以在MVC模式有一个优点就是可以为一个模型开发多个视图;
控制器用于处理用户的输入, 比如按键, 鼠标动作等等, 然后决定是否把这个动作转化成对模型或视图的改变, 如果改变了就通知模型或者视图进行更新, 在模型和视图端是不知道为什么要更新的;
三者之间的交互过程如下:
Java基础 自学讲义 9. Swing用户界面组件

对于大多数组件都有一个以Model结尾的模型类, 比如JButton对应的是ButtonModel, 可以这样定义:

ButtonModel greenButtonModel = greenButton.getModel();
greenButtonModel.setPressed(true);

可以传递给视图一些信息:
Java基础 自学讲义 9. Swing用户界面组件

二. 布局管理

Java基础 自学讲义 9. Swing用户界面组件
Java基础 自学讲义 9. Swing用户界面组件
Java基础 自学讲义 9. Swing用户界面组件

1.流布局FlowLayout

如果不指定布局方式, 默认采取的就是流布局 , 就是能放下就顺着放下去, 不够位置放了就换行;

2.边框布局BoderLayout

Java基础 自学讲义 9. Swing用户界面组件
可以这样设置边框布局:

this.add(myWindow, BorderLayout.SOUTH);

BoderLayout可以指定几种位置:CENTER, NORTH, SOUTH, WEST, EAST五种;
如果没有提供值会默认用CENTER;
当窗口被Resize的时候, CENTER的组件大小会随着改变, 处于边缘的组件大小不会改变;

3.网格布局GridLayout

使用网格布局要指定行和列, 效果大概这样:
Java基础 自学讲义 9. Swing用户界面组件

panel.setLayout(new GridLayout(4, 4));

三.文本输入

1.文本域

文本域可以用JTextField, JPassword或者JTextArea来实现;
JTextField只能输入一行, 可以设置默认值, 设置列数;
JTextArea可以设置行和列,默认值;
JPassword特点是输入的内容会加密显示;

JTextField aTextField = new JTextField("DefaultInformation",20);
JPasswordField aPasswordField = new JPasswordField("DefaultInformation",20);
JTextArea aTextArea = new JTextArea("DefaultInformation",10,20);

这些类都有set和get这些基本的方法, 要注意的是如果用setColumns改变了一个组件的大小, 一定要用revalidate方法去刷新这个组件, 否则会没有效果;
Java基础 自学讲义 9. Swing用户界面组件

2.标签和标签组件

可以使用JLabel加一个标签, 同时可以设置标签的内容和对齐方式,像这样:

JLabel aLabel = new JLabel("DefaultInformation", JLabel.RIGHT);

然后也可以通过setText和setIcon方法对这个标签进行设置;
label里的内容也可以是一个完整的html文本;
Java基础 自学讲义 9. Swing用户界面组件

3.密码域

Java基础 自学讲义 9. Swing用户界面组件

4.文本区

前面的TextArea写过了, 要注意可以使用textArea.setLineWrap(true);来设置自动换行, 但是自动换行只是视觉效果, 实际获得的String里面是没有\n的;
JTextArea 组件只显示无格式的文本, 没有特殊字体或者格式设置。如果想要显示 格式化文本(如 HTML), 就需要使用 JEditorPane 类。

5.滚动窗格

给TextArea加上滚动条:

        JTextArea aTextArea = new JTextArea("DefaultInformation",10,30);
        aTextArea.setLineWrap(false);
        JScrollPane aScrollPane = new JScrollPane(aTextArea);
        myWindow.add(aScrollPane, BorderLayout.CENTER);

要注意的是加上滚动条之后加入到Panel中的就不是aTextArea了而应该是aScrollPane

四. 选择组件

1.复选框