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