java Swing

Swing

一、历史

1.1SUN Jdk 1.1 AWT,控件很少,不方便开发

1.2SUN Jdk 1.2Swing基于AWT的绘图功能重绘的界面组件,提供了及其丰富的控制

a.性能慢

b.结构优秀(MVC)

c.实际应用很少

1.3 IBM提供了SWT

a.采用了本地的C代码完成控件绘制,性能很好

b.实际应用不多

二、Swing的应用

1.JFrame代表一个窗口控件,包括标题栏、控制按钮和边框,中间是内容面板

2.JLabel用来在GUI上显示Text或者图片

3.面板(JPanel)用来组织控件的矩形区域

三、布局管理(布局就是控制组件在面板中的显示位置)

1.空布局(绝对位置布局)

JFrame(width,high);

JPanel(width,high);

JButton OK(x,y,w,h);

绝对位置布局不是很好用。

实例:

<span style="white-space:pre">	</span>public static void main(String[] args) {
		//绝对位置布局
		JFrame win=new JFrame("Null layout");
		win.setSize(574,390);<span style="white-space:pre">			</span>//设置窗口大小
		JPanel content=new JPanel();
		content.setLayout(null);<span style="white-space:pre">		</span>//空布局,不要忘了写
		win.setContentPane(content);
		JButton ok=new JButton("OK");<span style="white-space:pre">		</span>//OK按钮
		content.add(ok);<span style="white-space:pre">			</span>//将OK按钮加到content布局中
		ok.setLocation(370, 327);<span style="white-space:pre">		</span>//设置按钮相对于content最左上一点的坐标
		ok.setSize(92,21);<span style="white-space:pre">			</span>//设置按钮的大小
		JButton cancel=new JButton("Cancel");
		content.add(cancel);
		cancel.setLocation(466, 327);
		cancel.setSize(92,21);
		win.setVisible(true);
	}

2.布局管理器(相对位置布局,组件的大小和位置由布局控制)

A.BorderLayout(边框布局)

将一个面板分为东南西北中,每个位置只能放一个控件,“中”会自动的向其它的四个方向填充

-------------------------------------

|      北(North)                 |

-------------------------------------

|西|            中               |东   |

|    |                              |       |

-------------------------------------

|            南                            |

-------------------------------------

B.FlowLayout(流布局)

每个元素顺序排列,一行满了,排下一行

C.GridLayout表格布局

指定行数,列数,元素按照等宽的行列表格进行布局 

四、工厂方法

封装复杂的对象创建过程的方法

界面的设计:

1.创建类LoginFrame继承于JFrame

1.1提供构造器,构造器中调用init()方法

1.2init()方法用来初始化全部界面组件,就是来画界面

1.3添加showView()用来显示界面

1.4提供测试类来进行单元测试

2.完成界面初始化代码

实例:

public class ExamFrame extends JFrame{
	public ExamFrame() {
		init();
	}
	private void init(){<span style="white-space:pre">			</span>//初始化全部界面组件
		setTitle("在线测评");<span style="white-space:pre">		</span>//设置标题
		setSize(400,500);<span style="white-space:pre">		</span>//设置界面大小
		setContentPane(createContentPane());//初始化内容面板
	}
	private JPanel createContentPane(){
		JPanel pane=new JPanel(new BorderLayout());
		ImageIcon icon=new ImageIcon(getClass().getResource("12.png"));//插入一个图片
		pane.add(BorderLayout.NORTH,new JLabel(icon));
		pane.add(BorderLayout.CENTER,createCenterPane());<span style="white-space:pre">		</span>//初始化中间部分的面板
		pane.add(BorderLayout.SOUTH,createToolPane());<span style="white-space:pre">			</span>//初始化工具栏
		return pane;
	}
	private JPanel createCenterPane(){<span style="white-space:pre">					</span>//中间部分面板
		JPanel pane=new JPanel(new BorderLayout());
		pane.add(BorderLayout.NORTH,new JLabel("姓名:XXX,考试:XXX,考试时间:XXX",JLabel.CENTER));//北,居中显示
		pane.add(BorderLayout.CENTER,createQuestionPane());<span style="white-space:pre">		</span>//初始化问题面板
		pane.add(BorderLayout.SOUTH,createOptionsPane());<span style="white-space:pre">		</span>//初始化选项面板
		return pane;
	}
	private JPanel createOptionsPane(){
		JPanel pane=new JPanel();
		JCheckBox a=new JCheckBox("A");<span style="white-space:pre">					</span>//CheckBox选择按钮
		JCheckBox b=new JCheckBox("B");
		JCheckBox c=new JCheckBox("C");
		JCheckBox d=new JCheckBox("D");
		pane.add(a);
		pane.add(b);
		pane.add(c);
		pane.add(d);
		return pane;
	}
	private JScrollPane createQuestionPane(){<span style="white-space:pre">		</span>//以这样的方式创建一个可以下拉的显示文件内容区域
		JScrollPane pane=new JScrollPane();
		JTextArea questionArea=new JTextArea();
		questionArea.setText("问题\nA.\nB.");
		pane.getViewport().add(questionArea);
		return pane;
	}
	private JPanel createToolPane(){
		JPanel pane=new JPanel(new BorderLayout());
		pane.add(BorderLayout.WEST,new JLabel("题目20的第1题"));
		pane.add(BorderLayout.CENTER,createBtnPane());
		pane.add(BorderLayout.EAST,new JLabel("剩余时间222秒"));
		return pane;
	}
	private JPanel createBtnPane(){<span style="white-space:pre">				</span>//初始化按钮面板
		JPanel pane=new JPanel();
		JButton next=new JButton("下一题");
		JButton last=new JButton("上一题");
		JButton handin=new JButton("交卷");
		pane.add(next);
		pane.add(last);
		pane.add(handin);
		return pane;
	}
	public void showView(){<span style="white-space:pre">					</span>//显示界面
		setVisible(true);
	}
}

转载请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值