简单swing界面开发

界面的容器包括窗体(JFrame)和面板(JPanel),一个界面有且只有一个窗体,面板是仅小于窗体的容器。

容器上面可以加各种组件,包括标签(JLabel),文本输入框(JTextField),复选框(JCheckBox),密码框(JPasswordField),按钮(JButton),下拉框(JComboBox)

 

菜单栏的添加 对象.setJMenuBar();实例化一个菜单栏,然后向上面添加菜单项以及在菜单项上添加菜单子项

 

容器上的组件必然是按照一定顺序排列起来的,不可能杂乱无章,所以就有了布局类,常用的有边框布局(BorderLayout),流式布局(FlowLayout),网格布局(GridLayout)

主要的方法举例:A a = new B();//实例化一个对象
  a.set*****(***);//设置对象的属性
  a.add(********);//向对象上加组件 
所有的操作都可以概括为这几点,具体方法不必死记,需灵活应用。

 

下面是QQ登陆界面和计算器界面:



 

 下面是源代码:

package cn.kml.login;
import java.awt.BorderLayout;

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
 * 用于实现QQ登陆界面
 * @author 陌陌
 */
public class QQLogin {
	public static void main(String[] args) {
		//实例化一个Login类对象
		QQLogin log=new QQLogin();
		//调用初始化界面的方法
		log.initUI();
		}
	
	//定义一个初始化界面的方法
	public void initUI(){
		
		//实例化一个JFrame对象
		javax.swing.JFrame jf = new javax.swing.JFrame();
		//设置对象的属性
		jf.setSize(381,290);
		jf.setUndecorated(true);
		jf.setLocationRelativeTo(null);
		jf.setTitle("QQ登录界面");
//		jf.setDefaultCloseOperation(3);
		jf.setResizable(false);//设置窗体不可最大化
		
		/*****************************设置窗体的背景*****************************************/
		//实例化一个图标对象
		ImageIcon background = new ImageIcon("images/background.png");
		//实例化一个标签对象
		JLabel jlb = new JLabel(background);
		//设置标签的大小
		jlb.setBounds(0,0, background.getIconWidth(), background.getIconHeight());
		//将标签添加到LayeredPane的最底层
		jf.getLayeredPane().add(jlb, new Integer(Integer.MIN_VALUE));
		//将LayeredPane上一层的面板设置为透明
		JPanel contentPanel = (JPanel)jf.getContentPane();
		//设置面板为透明
		contentPanel.setOpaque(false);
		
		/******************************窗体的北边**********************************************/
		//实例化一个面板对象
		JPanel jpn=new JPanel();
		jpn.setOpaque(false);//设置为透明
		jpn.setPreferredSize(new Dimension(379,142));
		//设置面的布局为流式布局,靠右显示
		jpn.setLayout(new FlowLayout(FlowLayout.RIGHT,0,0));
		//在面板上加上三个按钮
		//添加三个图标对象
		String[] button ={"images/set.png","images/min.png","images/close.png"}; 
		String[] command = {"a","b","c"};
		CloseListener clis = new CloseListener(jf,jpn);
		for(int i=0;i<3;i++){
		ImageIcon close = new ImageIcon(button[i]); 
		JButton buset = new JButton(close);
		buset.setActionCommand(command[i]);
		buset.setPreferredSize(new Dimension(27,17));
		jpn.add(buset);
		buset.addActionListener(clis);
		}
		jf.add(jpn,BorderLayout.NORTH);
		
		/*****************************窗体的西边**********************************************/
		//实例化一个面板对象
		JPanel jpw=new JPanel();
		jpw.setOpaque(false);
		//设置版面的布局
		jpw.setLayout(new FlowLayout(FlowLayout.RIGHT,15,3));
		//实例化一个ImageIcon对象
		ImageIcon im2=new ImageIcon("images/head.png");
		//实例化一个便签对象,显示图标对象
		JLabel jlw=new JLabel(im2);
		jpw.add(jlw);
		//把面板对象加到窗体的西边
		jf.add(jpw,BorderLayout.WEST);
		
		/******************************窗体的中间**********************************************/
		//实例化一个面板对象
		JPanel jpc=new JPanel();
		jpc.setOpaque(false);
		//设置面板的布局类型为流式布局类型,左边对齐
		jpc.setLayout(new FlowLayout(FlowLayout.LEFT,20,5));
		//实例化一个下拉框类的对象,显示已登录
		javax.swing.JComboBox jc = new javax.swing.JComboBox();
		jc.addItem("请输入QQ");
		jc.addItem("758768990");
		jc.addItem("655467677");
		jc.addItem("65454343");
		jc.setPreferredSize(new Dimension(164,24));
		jc.setEditable(true);
		jpc.add(jc);
		//实例化一个标签对象,显示注册账号。
		javax.swing.JLabel jl1 = new javax.swing.JLabel("注册账号");
		jl1.setOpaque(false);
		jpc.add(jl1);
		//实例化一个下拉框类的对象,显示”请输入密码“
		javax.swing.JPasswordField jc1 = new javax.swing.JPasswordField();
		jc1.setPreferredSize(new Dimension(164,24));
		jc1.setEditable(true);
		jpc.add(jc1);
		//实例化一个标签对象,显示找回密码
		javax.swing.JLabel jl2 = new javax.swing.JLabel("找回密码");
		jl2.setOpaque(false);
		jpc.add(jl2);
		
		//实例化两个复选框
		JCheckBox jch1=new JCheckBox("记住密码");
		JCheckBox jch2=new JCheckBox("自动登录");
		jch1.setOpaque(false);
		jch2.setOpaque(false);
		jpc.add(jch1);
		jpc.add(jch2);
		jf.add(jpc,BorderLayout.CENTER);
		
		/*********************窗体的南边********************************************/
		//实例化一个面板对象
		JPanel jpno=new JPanel();
		jpno.setOpaque(false);
		
		
		//实例化一个图标对象
		ImageIcon login = new ImageIcon("images/login.png");
		
		//实例化一个按钮类的对象,显示登陆。
		JButton jb = new JButton(login);
		jb.setPreferredSize(new Dimension(156,31));
		jpno.add(jb);
		
		jf.add(jpno,BorderLayout.SOUTH);
		
		jf.setVisible(true);
		//窗体可见之后,给关闭按钮添加一个监听器
	}
}

 

package cn.kml.login;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CloseListener implements ActionListener{
	private JFrame jf;
	private JPanel jpn;
	
	public CloseListener(JFrame jf,JPanel jpn){
		this.jf=jf;
		this.jpn=jpn;
	}
	//重写
	public void actionPerformed(ActionEvent e) {
		
		if(e.getActionCommand().equals("c")){
			jf.setVisible(false);
		}
	}

}

 

package cn.kml.counter;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Counter {

	
	public static void main(String[] args) {
		//实例化一个Counter对象
		Counter co=new Counter();
		co.COUNT();
		}
	private Component jbu;
	//初始化一个计算器界面
	private int j;
	private JButton jbut;
	public void COUNT(){
		//实例化一个JFrame对象
		JFrame jf=new JFrame();
		
		//设置对象的属性
		jf.setSize(250,353);
		jf.setTitle("        计算器");
		jf.setLocationRelativeTo(null);
		//jf.setUndecorated(true);
		jf.setDefaultCloseOperation(3);
		jf.setResizable(false);
		
		/*********************设置窗体的菜单栏**********************/
		//实例化一个菜单栏对象
		JMenuBar jm = new JMenuBar();
		
		//实例化一个菜单项对象
		JMenu jm1 = new JMenu("查看(V)");
		//在菜单项中添加菜
		JMenuItem jit = new JMenuItem("标准型(T)");
		JMenuItem jis = new JMenuItem("科学型(S)");
		jm1.add(jit);
		jm1.add(jis);
		jm.add(jm1);//添加到菜单栏中
		
		JMenu jm2 = new JMenu("编辑(E)");
		//在菜单项中添加菜单子项
		JMenuItem jic = new JMenuItem("复制(C) Ctrl+C");
		JMenuItem jiv = new JMenuItem("粘贴(V) Ctrl+V");
		jm2.add(jic);
		jm2.add(jiv);
		jm.add(jm2);
		
		JMenu jm3 = new JMenu("帮助(H)");
		//在菜单栏中设置菜单子项
		JMenuItem ji = new JMenuItem("查看帮助(V)");
		jm3.add(ji);
		jm.add(jm3);
		jf.setJMenuBar(jm);
		
		/********************设置计算器的背景**********************/
		//实例化一个图标对象
		ImageIcon bg = new ImageIcon("image/bg1.png");
		//实例化一个标签对象
		JLabel jlb = new JLabel(bg);
		//设置标签的大小
		jlb.setBounds(0, 0, bg.getIconWidth(),bg.getIconHeight());
		//把标签添加到LayeredPane的最底层
		jf.getLayeredPane().add(jlb,new Integer(Integer.MIN_VALUE));
		//把LayeredPane的上一层设置为透明
		JPanel contentPanel = (JPanel)jf.getContentPane();
		//设置面板为透明
		contentPanel.setOpaque(false);
		/*********************窗体的北边*************************/
		JPanel jp1=new JPanel();
		jp1.setOpaque(false);
		//实例化一个文本输入框
		JTextField jt=new JTextField();
		jt.setText("0");
		jt.setHorizontalAlignment(JTextField.RIGHT);
		jt.setFont(new Font("楷体",Font.BOLD,35));
		jt.setEditable(false);
		jt.setPreferredSize(new Dimension(208,54));
		jp1.add(jt);
		jf.add(jp1,BorderLayout.NORTH);
		/*******************************窗体的西边*******************************************/
		//实例化一个版面对象
		JPanel jpw = new JPanel();
		jpw.setOpaque(false);
		jpw.setPreferredSize(new Dimension(192,250));
		
		//设置面板为流式布局
		jpw.setLayout(new FlowLayout(FlowLayout.RIGHT,6,6));
		String[] array={"image/MC.png","image/MR.png","image/MS.png",
				"image/M+.png","image/ZUOJIAN.png",
				"image/CE.png","image/C.png","image/+-.png",
				"image/7.png","image/8.png","image/9.png",
				"image/XIE.png","image/4.png","image/5.png",
				"image/6.png","image/XINHAO.png",
				"image/1.png","image/2.png","image/3.png","image/-.png",
				"image/0.png","image/DIAN.png","image/+.png"};
		for(int i=0;i<array.length;i++){
			JButton jbu= new JButton(new ImageIcon(array[i]));
			if(array[i].equals("image/0.png")){
				jbu.setPreferredSize(new Dimension(80,28));
				jpw.add(jbu);
			}else{
				jbu.setPreferredSize(new Dimension(38,28));
				jpw.add(jbu);
			}
			}
		jf.add(jpw,BorderLayout.WEST);
		
		/******************窗体的东边**********************/
		//实例化一个面板对象
		JPanel jpe = new JPanel();
		jpe.setOpaque(false);
		//设置面板的布局为流式布局
		jpe.setLayout(new FlowLayout(FlowLayout.LEFT,0,6));
		jpe.setPreferredSize(new Dimension(75,260));

		String[] array1={"image/M-.png","image/GENHAO.png",
				"image/%.png","image/1X.png","image/=.png"};
		//实例化按钮对象
		for(int j=0;j<array1.length;j++){
			JButton jbut= new JButton(new ImageIcon(array1[j]));
			if(array1[j].equals("image/=.png")){
				jbut.setPreferredSize(new Dimension(38,65));
				jpe.add(jbut);
			}else{
				jbut.setPreferredSize(new Dimension(38,28));
				jpe.add(jbut);
			}
		}
		jf.add(jpe);
		
		jf.setVisible(true);
		}
}