目录
一. 设计模式
二. 布局管理
1. 流布局FlowLayout
2. 边框布局BoderLayout
3.网格布局GridLayout三. 文本输入
1. 文本域
2.标签和标签组件
3.密码域
4.文本区
5.滚动窗格四. 选择组件
1. 复选框
航航说Swing可以少学一些, 不是太有用, 所以学快一点啦~嘤嘤嘤
一. 设计模式
每个组件都有三要素: 内容, 外观, 行为
Swing采用的设计模式(Design Pattern)是: 模型-视图-控制器设计模式(Model-View-Controller) 即MVC模式
在MVC模式中要求我们实现三个独立的类:
模型:存储内容
视图:显示内容
控制器: 控制用户输入
重要的是在model中没有任何关于外观界面的事, 只负责存储内容, 所以在MVC模式有一个优点就是可以为一个模型开发多个视图;
控制器用于处理用户的输入, 比如按键, 鼠标动作等等, 然后决定是否把这个动作转化成对模型或视图的改变, 如果改变了就通知模型或者视图进行更新, 在模型和视图端是不知道为什么要更新的;
三者之间的交互过程如下:
对于大多数组件都有一个以Model结尾的模型类, 比如JButton对应的是ButtonModel, 可以这样定义:
ButtonModel greenButtonModel = greenButton.getModel();
greenButtonModel.setPressed(true);
可以传递给视图一些信息:
二. 布局管理
1.流布局FlowLayout
如果不指定布局方式, 默认采取的就是流布局 , 就是能放下就顺着放下去, 不够位置放了就换行;
2.边框布局BoderLayout
可以这样设置边框布局:
this.add(myWindow, BorderLayout.SOUTH);
BoderLayout可以指定几种位置:CENTER, NORTH, SOUTH, WEST, EAST五种;
如果没有提供值会默认用CENTER;
当窗口被Resize的时候, CENTER的组件大小会随着改变, 处于边缘的组件大小不会改变;
3.网格布局GridLayout
使用网格布局要指定行和列, 效果大概这样:
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方法去刷新这个组件, 否则会没有效果;
2.标签和标签组件
可以使用JLabel加一个标签, 同时可以设置标签的内容和对齐方式,像这样:
JLabel aLabel = new JLabel("DefaultInformation", JLabel.RIGHT);
然后也可以通过setText和setIcon方法对这个标签进行设置;
label里的内容也可以是一个完整的html文本;
3.密码域
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