Java入门到精通之使用Java带你打造一款简单的外卖系统
小职 2020-12-04 来源 :微信公众号「IT共享之家」 阅读 670 评论 0

摘要:本篇介绍了使用Java打造一款外卖系统,主要介绍了JPanel、 JCheckBox、 JLabel、 JButton、 JTextField等组件的基本使用,背景颜色的添加,图片图标的设置,以及相应的事件处理。希望对Java开发的相关学习有所帮助。

本篇介绍了使用Java打造一款外卖系统,主要介绍了JPanel、 JCheckBox、 JLabel、 JButton、 JTextField等组件的基本使用,背景颜色的添加,图片图标的设置,以及相应的事件处理。希望对Java开发的相关学习有所帮助。

Java入门到精通之使用Java带你打造一款简单的外卖系统


【一、项目背景】

 

随着互联网时代的快速发展,便捷人民的生活,提高生活质量,外卖系统应运而生。

 

人们也喜欢享受着“足不出户,美食到家”的待遇,促使网上订餐行业快速发展。

 

【二、项目目标】

 

1. 设计一款应用程序-外卖系统,有文字和图片显示,通过选择一种或多种食物,每种食物可以选择一份或多份,点击结算后,进行总价的统计。

 

2. 实现标题文字滚动和颜色定时变化。

 

3. 实现消费多少钱免配送费以及消费多少钱满减。

 

【三、项目实施】

 

使用eclipse软件开发,先上效果图,如下图所示。

Java入门到精通之使用Java带你打造一款简单的外卖系统 

 

 

可以看到在界面上有文字和图片显示,通过选择一种或多种食物,每种食物可以选择一份或多份,结算功能,标题文字滚动加颜色变化的功能。

 

接下来,小编带大家进行具体的实现,具体的实现步骤如下。

 

【四、实现步骤】

 

一、首先实现外卖系统购物车的窗口

 

public static void main(String[] args) {

    // TODO Auto-generated method stub

        Takeout t = new Takeout();

        t.setTitle("饶洋外卖");

        t.setSize(720,550);

        t.setVisible(true);

}

使用new关键字创建Takeout类;

 

setTitle表示设置界面的标题;

 

setSize(宽,高)表示窗体大小;

 

setVisible(true或false)表示窗体是否可见;

 

二、添加文字实现

 

1. 使用到组件有JPanel、JLabel;

 

2. 添加Takeout类的成员变量;

 

public class Takeout extends JFrame {

  //成员变量

      private JPanel panel01 = new JPanel();

private JLabel label01 = new JLabel("欢迎来到饶洋外卖系统!");

3. 添加文字说明;

 

Takeout类构造函数:

 

Takeout(){

      label01.setFont(new Font("黑体",Font.PLAIN,30));

      label01.setForeground(Color.BLUE);

       panel01.add(label01);

      panel01.setOpaque(false);//设置透明

      this.setLayout(new BorderLayout());

      this.add(panel01,BorderLayout.NORTH);

      this.getContentPane().setBackground(c);

4. 文字(label01)设置显示效果

 

1) setFont(newFont(String 字体,int 风格,int 字号));

 

字体:TimesRoman, Courier, Arial等;

风格:三个常量 lFont.PLAIN, Font.BOLD, Font.ITALIC;

字号:字的大小(磅数);

2) setForegound设置前景色;

 

3) setOpaque设置控件透明(ture或false);

 

4) 布局管理器之BorderLayout(边界布局);

 

边界布局管理器把容器的的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH。依次相应为:上北(NORTH)、下南(SOUTH)、左西(WEST)、右东(EAST),中(CENTER)。

 

5. 边界布局特征

 

1) 能够把组件放在这五个位置的随意一个,假设未指定位置,则缺省的位置是CENTER。

 

2) 南、北位置控件各占领一行,控件宽度将自己主动布满整行。东、西和中间位置占领一行;若东、西、南、北位置无控件,则中间控件将自己主动布满整个屏幕。若东、西、南、北位置中不管哪个位置没有控件,则中间位置控件将自己主动占领没有控件的位置。

 

3) 它是窗体、框架的内容窗格和对话框等的缺省布局。

 

6. getContentPane.setBackground(c)初始化一个容器,设置背景RGB颜色需要在成员变量定义

 

private Color c = new Color(197,228,251);

三、添加食物文字、数量(按钮)和图片

 

需要添加JPanel、 JCheckBox、 JButton 、JLabel等。

 

1. 添加Takeout类的成员变量

 

private JPanel panel02 = new JPanel();

   private JCheckBox check[] = new JCheckBox[9];//文字(多选框)

   private JButton amount[] = new JButton[9];//数量(按钮)

   private JLabel food[] = new JLabel[9];//食物图片

   private int num[]=new int[9];//数量数组

2. 在Takeout类的构造函数设置组件的属性

 

参考代码

 

Takeout(){

  ……

    check[0]=new JCheckBox("  雪糕    3.0元",false);

    check[1]=new JCheckBox("  薯条    6.0元",false);

    check[2]=new JCheckBox("爆米花  8.0元",false);

    check[3]=new JCheckBox("  热狗  10.0元",false);

    check[4]=new JCheckBox("汉堡包11.0元",false);

    check[5]=new JCheckBox("巨无霸16.0元",false);

    check[6]=new JCheckBox("  可乐    6.0元",false);

    check[7]=new JCheckBox("  果汁    8.0元",false);

check[8]=new JCheckBox("  啤酒    6.0元",false);

for(int i=0;i<9;i++){

      amount[i]=new JButton("1份");

      food[i]=new JLabel(new         ImageIcon("image//food"+(i+1)+".jpg"));

      check[i].setOpaque(false);

      panel02.add(check[i]);

      panel02.add(amount[i]);

      panel02.add(food[i]);

      num[i]=1;

       

      amount[i].addActionListener(my);

       

      }

      panel02.setOpaque(false);

    this.add(panel02,BorderLayout.CENTER);

四、添加状态信息:JTextArea等

 

1. 添加Takeout类的成员变量

 

private JTextArea list=new JTextArea(10,20);

private String str="";

2. 在Takeout类的构造函数设置组件的属性

 

参考代码

 

Takeout(){

  ……

list.setText("状态:未选餐!");

      list.setBackground(c);

    panel02.add(list);

五、添加按钮和总价框:JPanel、 JButton、JLabel、JTextField等

 

1. 添加Takeout类的成员变量

 

private JPanel panel03=new JPanel();

     private JButton btn_ok = new JButton("结算");

     private JButton btn_cancel = new JButton("清空");

     private JLabel label02 = new JLabel("总价:");

     private JTextField text01 = new JTextField(10);

     private double a[]=new double[9];//食物单价

     private double total=0;//总价

2. 在Takeout类的构造函数设置组件的属性

 

参考代码

 

Takeout(){

  ……

    panel03.add(btn_ok);

    panel03.add(btn_cancel);

    panel03.add(label02);

    panel03.add(text01);

    panel03.add(label03);

    this.add(panel03,BorderLayout.SOUTH);

    panel03.setOpaque(false);

     

    a[0]=3.0;

    a[1]=6.0;

    a[2]=8.0;

    a[3]=10.0;

    a[4]=11.0;

    a[5]=16.0;

    a[6]=6.0;

    a[7]=8.0;

    a[8]=6.0;

六、事件处理

 

定义事件处理类,实现事件监听器

 

1. 在成员变量添加

 

private MyListener my = new MyListener();

2. 在Takeout()内添加

 

btn_ok.addActionListener(my);

 btn_cancel.addActionListener(my);

3. 添加事件监听器MyListener(自己命名)

 

private class MyListener implements ActionListener{

 

    @Override

    public void actionPerformed(ActionEvent e) {

      // TODO Auto-generated method stub

      //添加事件处理代码

            for(int i=0;i<9;i++){

              if(e.getSource()==amount[i]){

                if(num[i]<9)

                  num[i]++;

                else

                  num[i]=0;

                amount[i].setText(num[i]+"份");

              }

            }

            if(e.getSource()==btn_ok){

              total=0;

              str="";

              for(int i=0;i<9;i++){

                if(check[i].isSelected()==true){

                  total=total+a[i]*num[i];

                  str=str+check[i].getText()+"    "+amount[i].getText()+"\n";

                }

              }               

              text01.setText(""+total);

              list.setText("状态:已选餐:\n"+str+"\n");

            }

以上e.getSource()==btn_cancel代码完成清空功能。

 

【五、思考题1】

 

现在外卖系统商家因业务需求,每一订单需要配送费5元,在活动期间,购满30元免配送费,满100元立减10元,程序应如何修改?

 

1. 在成员变量添加以下代码。

 

private final int FEE=5;//配送费

private JLabel label03 = new JLabel("满30免费配送,满100立减10");

2. 在Takeout()类构造函数中if(e.getSource()==btn_ok)添加以下的代码。

 

if(total<30){

                label03.setText("还差"+(30-total)+"就免费配送,还差"+(100-total)+"就满100减10");

                total=total+FEE;

                str=str+"配送费   5元";

              }else if(total<100){//免费配送,不参与满100-10

                label03.setText("免费配送,还差"+(100-total)+"就满100减10");

              }else{

                label03.setText("免费配送,已参与满100减10,"+(total)+"-10");

                total=total-FEE-FEE;

              }

【六、思考题2】

 

实现“欢迎来到饶洋外卖系统!”文字滚动和颜色定时变化。程序应如何修改?

 

1. 在成员变量添加以下代码。

 

private Color color[]=new Color[]{Color.BLACK,Color.RED,

         Color.BLUE,Color.LIGHT_GRAY,

             Color.YELLOW,Color.GREEN,

             Color.MAGENTA    

     };

     private Timer timer;//定时器

     private int colorIndex=0;//当前颜色的序号

2. 在Takeout()类构造函数中if(e.getSource()==btn_ok)添加以下的代码。

 

Takeout(){

.....

添加timer=new Timer(500,new TimerListener());

    //定时的时间间隔(单位ms),定时器监听器(要做的事情)

    timer.start();//启动定时器

3. 实现这个TimerListener()函数。

 

class TimerListener implements ActionListener{//定时器监听器

 

  @Override

  public void actionPerformed(ActionEvent e) {

    // TODO Auto-generated method stub

    //定时时间到了,要做的事情:

    colorIndex++;// 0 1 2 3 4 5 6 7%7=0  8%7=1 9%7=2

    label01.setForeground(color[colorIndex/4 % color.length]);

     

      String temp=label01.getText();

      label01.setText( temp.substring(1,temp.length())+temp.substring(0,1));

      //substring(i,j)截取字符串从序号i(包含)到序号j(不包含) i ~ j-1

  }     

}

以上代码可以实现文字的滚动和颜色变化。

 

这个项目主要是用Java Swing图形界面开发,Swing包括图形用户界面器件,还有Java中为我们提供了Timer来实现定时任务,最主要涉及到了两个类:Timer和TimerTask。

 

【七、总结】

 

1. 主要介绍了JPanel、 JCheckBox、 JLabel、 JButton、 JTextField等组件的基本使用,背景颜色的添加,图片图标的设置,以及相应的事件处理。

 

2.事件处理函数的添加,难点是运用理解构造函数、内部类的创建。



关注“职坐标在线”(Zhizuobiao_Online)公众号,免费获取源码资料、技术就业咨询。

Java入门到精通之使用Java带你打造一款简单的外卖系统

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程