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();
		}*/
		
	}
}

}

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐