Java提供了三个主要包做GUI开发

java.awt 包 – 主要提供字体/布局管理

javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)

java.awt.event 包 – 事件处理,后台功能的实现。

创建一个界面的主要步骤分为:
1.JFrame窗口
2.创建面板
3.对面板设置布局
4.添加相应组件并设置相应位置
5.设置窗口大小及其在桌面显示位置。

1.Swing组件

如图所示:swing组件主要可分为三个部分,后面会详细介绍

(1)顶层容器: 常用有JFrame,JDialog

(2)中间容器: JPanel,JOptionPane,JScrollPane,JLayeredPane 等,主要以panel结尾。

(3)基本组件: JLabel,JButton,JTextField,JPasswordField,JRadioButton 等。

2.顶层容器

组件

描述

JFrame

一个普通的窗口(绝大多数Swing图形界面使用JFrame作为顶级容器)

JDialog

对话框

3.中间容器

组件

描述

JPanel

一般轻量级面板容器组件(作为JFrame的中间容器)

JOptionPane

弹出提示框到panel容器 JOptionPane.showMessageDialog(panel3, “没有选中任何文件”, “提示”,JOptionPane.WARNING_MESSAGE);

JScrollPane

带滚动条的,可以水平和垂直滚动的面板组件



4.基本组件

组件

描述

JLabel

标签

JButton

按钮

JRadioButton

单选按钮

JCheckBox

复选框

JToggleButton

开关按钮

JTextField

文本框

JPasswordField

密码框

JTextArea

文本区域

JComboBox

下拉列表框

JList

列表

JProgressBar

进度条

JSlider

滑块

5.JFrame组件

JFrame frame = new JFrame(“HelloWorldSwing”);

// 创建及设置窗口;

frame.setDefaultLookAndFeelDecorated(true);

// 确保一个漂亮的外观风格;frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

// 显示窗口;

frame.setVisible(true);

//这个最好放在最后,不然会出现视图看不到的情况;

frame.setBounds(600, 300, 500, 400);

设置窗口的x,y位置,窗口大小x,y;

frame.add(panel);

添加panel面板到容器;

frmIpa.getContentPane().add(panel, BorderLayout.NORTH);

添加面板到主窗口,布局在北面;frmIpa.getContentPane().add(scrollPane, BorderLayout.CENTER);

6.Panel组件

JPanel

代码

作用

JPanel panel=new JPanel()

创建面板容器

panel.add(button);

添加按钮到面板

JPanel panel=new JPanel()

创建面板容器

JOptionPane

代码

作用

JOptionPane.showMessageDialog(panel3, “没有选中任何文件”, “提示”,JOptionPane.WARNING_MESSAGE);

弹出提示框到panel容器

JScrollPane

代码

作用

JScrollPane scrollPane = new JScrollPane();

创建可滚动面板

scrollPane.setViewportView(textArea);

设置面板内容

7.实现加法计算器的GUI设计

package work;

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class AddJiSuan1 
{
public static void main(String [] args)
{
	new MyFrameAddCount("计算器");//创建一个JFrame窗口
}
}
class MyFrameAddCount extends JFrame
{
	JLabel lab,lab1;//定义相应组件
	JButton jbt;
	JPanel jp1,jp2,jp3;
	JTextField jtf1,jtf2,jtf3;
	MyFrameAddCount(String title)
	{
		super(title);
		lab=new JLabel("加法计算器");//实例化对象
		lab1=new JLabel("+");
		jtf1=new JTextField(10);
		jtf2=new JTextField(10);
		jtf3=new JTextField(10);
		jbt=new JButton("=");
		jbt.addActionListener(new MonitorAddCount(jtf1,jtf2,jtf3));//创建监听器
		jp1=new JPanel();
         jp2=new JPanel();
         jp3=new JPanel();
         jp1.setLayout(new GridLayout(2,1));//设置面板1的布局为网格布局
         this.add(jp1);//为JFrame窗口添加面板
         jp1.add(jp2);
         jp1.add(jp3);
         jp2.add(lab);
         jp3.add(jtf1);
         jp3.add(lab1);
         jp3.add(jtf2);
         jp3.add(jbt);
         jp3.add(jtf3);
         this.setBounds(200,300,600,400);//设计JFrame的桌面位置和大小
         this.setVisible(true);//设置窗口可见
         this.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置运行后程序结束运行。
         pack();//按照组件大小改变窗口
	}
}
class MonitorAddCount implements ActionListener//创动作类实现监听
{
	JTextField jtf1,jtf2,jtf3;
	MonitorAddCount(JTextField jtf1,JTextField jtf2,JTextField jtf3)
{//将组件传递为其赋值
	this.jtf1=jtf1;
	this.jtf2=jtf2;
	this.jtf3=jtf3;
}
	@Override
	public void actionPerformed(ActionEvent e){
		int a = Integer.parseInt(jtf1.getText());//由于获取的内容为String类型,需要用integer的parseint方法转换为数字
		int b = Integer.parseInt(jtf2.getText());
		int c = a + b;
		jtf3.setText(""+c);
		System.out.println(c);
	}
	
}

8.超市收银登录界面

package shouyin_system;

import javax.swing.*;

import shouyin_system.Main_Test;
import tools.DBUtil_User;
import tools.SqlOperate_User;
import userDao.User;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class ShouYinSystem_Login  extends JFrame
{
JPanel jp1,jp2,jp3;
JLabel labimg,labuser,labpwd,labrole;
JButton jbtlog,jbtclear;
JRadioButton jrbt1,jrbt2;
JTextField jtf1;
JPasswordField pwd;
ButtonGroup bg;
public ShouYinSystem_Login()
{
	jp1=new JPanel();
	jp2=new JPanel();
	jp3=new JPanel();
	labimg=new JLabel();
	labimg.setIcon(new ImageIcon("D:\\hb\\supermarket\\images\\top.jpg"));
	labuser=new JLabel("用户名:");
	labpwd=new JLabel("密   码:");
	labrole=new JLabel("角   色:");
	jtf1 =new JTextField(10);
	pwd=new JPasswordField(10);
	jbtlog=new JButton("登录");
	jbtlog.addActionListener(new LoginListener());
	jbtclear=new JButton("取消");
	jbtclear.addActionListener(new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO 自动生成的方法存根
			jtf1.setText("");
			pwd.setText("");
		}
	});
	jrbt1=new JRadioButton("管理员",true);
	jrbt2=new JRadioButton("收银员");
	bg=new ButtonGroup();
	bg.add(jrbt1);
	bg.add(jrbt2);
	jp1.add(labimg);
	add(jp1,"North");
	jp2.setLayout(null);
	add(jp2,"Center");
	jp2.add(labuser);
	jp2.add(jtf1);
	jp2.add(labpwd);
	jp2.add(pwd);
	jp2.add(labrole);
	jp2.add(jrbt1);
	jp2.add(jrbt2);
	add(jp3,"South");
	jp3.add(jbtlog);
	jp3.add(jbtclear);
	labuser.setBounds(71,17,53,27);
	jtf1.setBounds(156,20,145,22);
	pwd.setBounds(156,56,145,22);
	labpwd.setBounds(71,56,48,23);
	labrole.setBounds(71,85,53,38);
	jrbt1.setBounds(155,96,79,21);
	jrbt2.setBounds(251,96,70,17);
	jbtlog.setBounds(120,150,70,17);
	jbtclear.setBounds(240,150,70,17);
	this.setResizable(false);
	this.setBounds(200,300,500,400);
    this.setVisible(true);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public class LoginListener implements ActionListener
{
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO 自动生成的方法存根
		String admin=jtf1.getText();
		String password=new String(pwd.getPassword());
		String role="";
		if(jrbt1.isSelected())
			role="管理员";
		if(jrbt2.isSelected())
			role="收银员";
		System.out.println(role);
		SqlOperate_User sqlo=new SqlOperate_User();
		User u=sqlo.findadmin(admin);//用來接收User
		System.out.println(u.getRole());
		if(u!=null){
			if(admin.equals(u.getAdmin())){
				 if(role.equals(u.getRole()))
				{
					 JOptionPane.showMessageDialog(null, "登录成功");
						new MainFrame();
						ShouYinSystem_Login.this.dispose();
				}
				 else 
				 {
					 JOptionPane.showMessageDialog(null, "角色与用户名数据不匹配,请重新输入!");
					 jtf1.setText("");
					 pwd.setText("");
				 }
			}
			else 
				JOptionPane.showMessageDialog(null, "密码错误");
		}
		else
			JOptionPane.showMessageDialog(null, "用户名错误");
	/*	//连接数据库
		Connection conn = DBUtil.getConn();
		//查询数据库
		String sql="select * from user where admin=? and password=?";
		try{
		PreparedStatement psmt=conn.prepareStatement(sql);
		psmt.setString(1, admin);
		psmt.setString(2, password);
		ResultSet rs=psmt.executeQuery();
		if(rs.next())
		{
			new MainFrame();
			JOptionPane.showMessageDialog(null, "登录成功");
		}
		else
		{
			JOptionPane.showMessageDialog(null, "登录失败");
		}
		}catch(SQLException e1)
		{
			e1.printStackTrace();
		}*/
		
	}
}

}