GUI图形用户界面
GUI(图形用户界面)给应用程序提供界面,其中包括窗口、菜单、按钮和其他图形组件,这就是今天大多数人所熟悉的“典型”应用程序界面。
例如JTable这个类的用义
- JTable:用JTable类可以以表格的形式显示和编辑数据;
- JTable类的对象并不存储数据,他只是数据的表现;
图形用户界面所涉及的细节很多,需要涉及的内容还是蛮复杂的,但是可以借助GUI来了解程序编写的一个设计思想:MVC设计模式。
MVC设计模式
简单说:
MVC:数据、表现和控制三者分离,各负其责,独立运行
M = Model(模型) V=View(表现) C=Control(控制)
- 模型:保存和维护数据,提供接口让外部修改数据,通知表现需要刷新
- 表现:从模型获得数据,根据画出表现
- 控制:从用户得到输入,根据输入调整数据
课程表(kechengbiao)
例如以下这个课程表表格通过程序来实现
程序代码段
通过具体的程序代码,来对MVC有一个更加清晰的认识。
在此程序设计中需要用到JTable类
程序构造
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class KCB {
public static void main(String[] args) {
//frame是一个容器
JFrame frame = new JFrame(); //创建一个窗口
//JTable是一个类
JTable table = new JTable(new KCBData());
JScrollPane pane = new JScrollPane(table); //实现滚卷让title
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//将类放到这个容器中
frame.add(pane);
frame.pack(); //要让这个窗口显示出来,自己计算大小
frame.setVisible(true); //显示出来
}
}
具体数据表现
TableModel:关系Table Object(视图)<->Table Model Object(接口)<->Table Data(其中的数据)
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
public class KCBData implements TableModel {
private String[] title = {
"","周一","周二","周三","周四","周五","周六","周日"
};
private String[] titles = {
"第一节课","第二节课","第三节课","第四节课","第五节课","第六节课","第七节课","第八节课"
};
private String[][] data = new String[8][8]; //创建出来的data数组,是一个管理者
//构造,初始化这个数组和单元格
public KCBData()
{
for(int i=0;i<data.length;i++)
{
for(int j=0;j<data[i].length;j++)
{
data[i][j] = ""; //遍历完每一个单元格,让他为空字符串
}
}
}
//获得表格制造的行数
@Override
public int getRowCount() {
return 8;
}
//获得制造表格的列数
@Override
public int getColumnCount() {
return 8;
}
//返回每一个列的表头
@Override
public String getColumnName(int arg0) {
return title [arg0];
}
@Override
public Class<?> getColumnClass(int arg0) {
return String.class;
}
//每一个单元格是不是可以被编辑
@Override
public boolean isCellEditable(int arg0, int arg1) {
return true;
}
//获得每一个单元格的数值
@Override
public Object getValueAt(int arg0, int arg1) {
return data[arg0][arg1];
}
@Override
public void setValueAt(Object arg0, int arg1, int arg2) {
data[arg1][arg2] = (String)arg0;
}
@Override
public void addTableModelListener(TableModelListener l) {
}
@Override
public void removeTableModelListener(TableModelListener l) {
}
public String[] getTitles() {
return titles;
}
public void setTitles(String[] titles) {
this.titles = titles;
}
}
编程能力的提升实际上也是一种思维模式的转变,会在以后轻松很多。