Swing 界面开发

 Swing

     Swing属于JFC(Java Foundation Classes)的一部分。JFC包含了AWT,Swing,辅助功能API,Java2D,拖放。Swing的出现是为了解决AWT(Abastract Window Toolkit)的移植性和提供更多的企业级应用程序所需要的功能。Swing建立在核心AWT库上,JDK1.2以及更高的版本已经包含了Swing库。

Swing内部采用了MVC体系结构(modle-view-controller)。modle负责存放Swing组件的状态(数据),controller负责处理事件,view负责绘制图形。Swing使用了简化的MVC变体,controller和view合并称为UI代理。这种设计使得一个modle可以对应多个UI代理,因此非常灵活。

 

      AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。

      AWT 是抽象窗口组件工具包,是 java 最早的用于编写图形节目应用程序的开发包。是jdk1.4之前推出的图形的界面。
      Swing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的。jdk1.4的时候推出的图形界面。

 

 

常用的Swing图形界面API类

1.容器组件

JFrame      窗体类     最顶级的容器
JPanel      面板类     最灵活的容器

 

2.元素组件
JLabel      标签类
JTextField  文本输入框类
JPasswordField   密码输入框类
JComboBox    下拉列表框类
JCheckBox    复选框类
JButton     按钮类

3.常用的布局API类
FlowLayout     流式布局类
BorderLayout    边框布局类
GridLayout        网格布局类

 

PS:java.awt包名,在用的使用的要记得在类名前加包名。
 如:java.awt.FlowLayout

 

下面我们来建立一个简单的界面:

import javax.swing.*;
public class fr{
	public static void main(String[] args){
		JFrame jf=new JFrame();//实例化一个窗体
		jf.setSize(400,400);//设置窗体的大小
		jf.setLocation(400,200);//设置窗体显示的位置
		jf.setDefaultCloseOperation(3);//设置窗体关闭的属性
		jf.setVisible(true);//设置窗体是否可见
	}
}

 结果显示:



 

一个好看的、复杂的界面需要各种组件和容器的搭配,可以根据需要选择。

 

下面是一个原创的山寨QQ登录界面的部分代码,添加了部分监听器,去掉了原有窗体的边框,添加了最小化和关闭按钮,可以实现窗体的最小化、关闭和拖拽。主函数:

import java.awt.*;
import javax.swing.*;
public class Frame {
	private static final String TimesRoman = null;
	private static final int LEFT = 0;
	public static void main(String[] args){
		/*
		 * 设置窗体属性
		 */
		JFrame J=new JFrame();
		J.setSize(380, 290);
		J.setLocation(500,300);
		BorderLayout border=new BorderLayout();
		J.setLayout(border);
		J.setTitle("山寨登录QQ界面");
		J.setResizable(false);
		J.setUndecorated(true);
		/*
		 * 定义容器
		 */
		FlowLayout FL1=new FlowLayout();
		FL1.setHgap(14);
		FL1.setAlignment(LEFT);
		JPanel centerpanel=new JPanel();
		JPanel southpanel=new JPanel();
		JPanel northpanel=new JPanel();
		JPanel westpanel=new JPanel();
		centerpanel.setLayout(FL1);
		southpanel.setLayout(new FlowLayout());
		northpanel.setLayout(null);
		westpanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
		/*
		 * 定义组件
		 */
		JComboBox CB1=new JComboBox();
		ImageIcon img=new ImageIcon("1.jpg");
		ImageIcon img1=new ImageIcon("关闭.jpg");
		ImageIcon img2=new ImageIcon("最小化.jpg");
		JPasswordField P1=new JPasswordField();
		JButton JB1=new JButton("注册帐号");
		JButton JB2=new JButton("忘记密码");
		JButton JB3=new JButton("登录");
		JLabel register=new JLabel("注册帐号");
		JLabel forget=new JLabel("找回密码");
		JButton close=new JButton(img1);
		JButton minimize=new JButton(img2);
		JLabel image1=new JLabel(img);
		JLabel image2=new JLabel(new ImageIcon("2.jpg"));
		JCheckBox box1=new JCheckBox("记住密码");
		JCheckBox box2=new JCheckBox("自动登录");
		//设置组件大小
		centerpanel.setPreferredSize(new Dimension(185, 27));
		northpanel.setPreferredSize(new Dimension(380, 140));
		westpanel.setPreferredSize(new Dimension(100, 100));
		CB1.setPreferredSize(new Dimension(185, 27));
		CB1.setEditable(true);
		P1.setPreferredSize(new Dimension(185,27));
		JB1.setPreferredSize(new Dimension(60,27));
		JB3.setPreferredSize(new Dimension(150, 30));
		image2.setPreferredSize(new Dimension(80,80));
		close.setBounds(J.getWidth()-img1.getIconWidth(),0,img1.getIconWidth(),img1.getIconHeight());
		minimize.setBounds(J.getWidth()-img1.getIconWidth()-img2.getIconWidth()+1,0,img2.getIconWidth(),img2.getIconHeight());
		/*
		 * 设置按钮、复选框透明
		 */
		JB1.setFocusPainted(false);//不绘制焦点
		JB1.setBorderPainted(true); //不绘制边界
		JB1.setContentAreaFilled(false); //不填充所占的矩形区域
		JB2.setFocusPainted(false);
		JB2.setBorderPainted(false); 
		JB2.setContentAreaFilled(false); 
		box1.setFocusPainted(false);
		box1.setBorderPainted(false); 
		box1.setContentAreaFilled(false); 
		box2.setFocusPainted(false);
		box2.setBorderPainted(false); 
		box2.setContentAreaFilled(false); 
		/*
		 * 设置透明
		 */
		J.getLayeredPane().add(image1, new Integer(Integer.MIN_VALUE));
		image1.setBounds(0,0,img.getIconWidth(),img.getIconHeight());
		Container P4=J.getContentPane();  
		((JComponent) P4).setOpaque(false);
		centerpanel.setOpaque(false);
		southpanel.setOpaque(true);
		northpanel.setOpaque(false);
		westpanel.setOpaque(false);
		/*
		 * 将组件添加到容器中
		 */
		centerpanel.add(CB1);
		centerpanel.add(register);
		centerpanel.add(P1);
		centerpanel.add(forget);
		centerpanel.add(box1);
		centerpanel.add(box2);
		southpanel.add(JB3);
		westpanel.add(image2);
		northpanel.add(close);
		northpanel.add(minimize);
		/*
		 * 将容器添加进窗体
		 */
		J.add(centerpanel,BorderLayout.CENTER);
		J.add(southpanel,BorderLayout.SOUTH);
		J.add(northpanel,BorderLayout.NORTH);
		J.add(westpanel,BorderLayout.WEST);
		/*
		 * 添加监听器
		 */
		CloseListener c1=new CloseListener();//关闭监听器
		MinimizeListener m1=new MinimizeListener(J);//最小化监听器
		DragListener d1=new DragListener(J);//拖拽监听器
		close.addMouseListener(c1);
		minimize.addMouseListener(m1);
		J.addMouseMotionListener(d1);
		J.setDefaultCloseOperation(3);
		J.setVisible(true);
	}
}

 实现结果:



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值