swing开发一个修改项目数据库连接参数配置文件

我们在开发web项目中,经常有properties配置文件配置数据库连接参数,每次修改的时候还要去找到配置文件,感觉有点麻烦,就用swing做了个小工具修改参数,运行界面如下:

==============================================================

一、项目结构:

二、相关代码:

  1、ConfigTools.java  

package com.xie.main;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.TitledBorder;

import com.xie.util.PropertiesUtils;
import javax.swing.JTabbedPane;
import java.awt.Dimension;

import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JPasswordField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

@SuppressWarnings("serial")
public class ConfigTools extends JFrame {

    private static Properties properties;
    // 配置文件路径
    private static String CONFIG_PATH = "resource/config-path.properties";

    private static String TITLE_IMG;        //图片
    private static String DB_CONFIG;        //数据库
    private static Map<String, String> dataconf;

    private JPanel contentPane;
    private JTabbedPane tabbedPane;
    private JPanel panel_data;
    private JComboBox<String> datatypeValue;
    private JTextField dataurlValue;
    private JTextField usernameValue;
    private JPasswordField passwordValue;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    getAllConfPath();
                    getDbConf();
                    ConfigTools frame = new ConfigTools();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * 读取配置文件路径
     * 配置文件:config-path.properties
     */
    private static void getAllConfPath() {
        properties = PropertiesUtils.getProperty(CONFIG_PATH);
        TITLE_IMG = properties.getProperty("img.path");
        DB_CONFIG = properties.getProperty("db.path");
    }

    /**
     * 读取数据源
     * 数据源配置文件:config.properties
     */
    public static void getDbConf(){
        dataconf = new HashMap<String, String>();
        Properties properties= PropertiesUtils.getProperty(DB_CONFIG);
        dataconf.put("db_type", properties.getProperty("db.db_type"));
        dataconf.put("db_url", properties.getProperty("db.url"));
        dataconf.put("db_username", properties.getProperty("db.username"));
        dataconf.put("db_password", properties.getProperty("db.password"));
    }

    /**
     * Create the frame.
     */
    public ConfigTools() {
        setTitle("\u914D\u7F6E\u6587\u4EF6\u4FEE\u6539\u5DE5\u5177");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 775, 550);
        // 设置窗体最小值
        setMinimumSize(new Dimension(775, 550));
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new BorderLayout(0, 0));

        // 居中显示
        Toolkit kit = Toolkit.getDefaultToolkit(); // 定义工具包
        Dimension screenSize = kit.getScreenSize(); // 获取屏幕的尺寸
        int screenWidth = screenSize.width/2; // 获取屏幕的宽
        int screenHeight = screenSize.height/2; // 获取屏幕的高
        int height = this.getHeight();
        int width = this.getWidth();
        setLocation(screenWidth-width/2, screenHeight-height/2);

        /**
         * 头部
         */
        //==================================开始======================================//
        String path = TITLE_IMG;
        ImageIcon image = new ImageIcon(path);
        JLabel labImage = new JLabel(image);

        JPanel panel_title = new JPanel();
        panel_title.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
        contentPane.add(panel_title, BorderLayout.NORTH);

        panel_title.add(labImage);

        //==================================结束======================================//

        /**
         * 左边菜单
         */
        //==================================开始======================================//
        JPanel panel_left = new JPanel();
        panel_left.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
        contentPane.add(panel_left, BorderLayout.WEST);

        JButton db_button = new JButton("\u6570 \u636E \u914D \u7F6E");
        db_button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tabbedPane.setSelectedIndex(0);
            }
        });
        JButton finish_button = new JButton("\u5B8C \u6210 \u914D \u7F6E");
        finish_button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tabbedPane.setSelectedIndex(1);
            }
        });

        GroupLayout gl_panel_left = new GroupLayout(panel_left);
        gl_panel_left.setHorizontalGroup(
            gl_panel_left.createParallelGroup(Alignment.TRAILING)
                .addGroup(Alignment.LEADING, gl_panel_left.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(db_button)
                    .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGroup(gl_panel_left.createSequentialGroup()
                    .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(finish_button, GroupLayout.PREFERRED_SIZE, 99, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap())
        );
        gl_panel_left.setVerticalGroup(
            gl_panel_left.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_panel_left.createSequentialGroup()
                    .addGap(54)
                    .addComponent(db_button)
                    .addGap(18)
                    .addComponent(finish_button)
                    .addContainerGap(364, Short.MAX_VALUE))
        );
        panel_left.setLayout(gl_panel_left);

        JPanel panel_centre = new JPanel();
        panel_centre.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
        contentPane.add(panel_centre, BorderLayout.CENTER);
        //==================================结束======================================//

        /**
         * 中间内容
         */
        //==================================开始======================================//
        tabbedPane = new JTabbedPane(JTabbedPane.TOP);
        GroupLayout gl_panel_centre = new GroupLayout(panel_centre);
        gl_panel_centre.setHorizontalGroup(
            gl_panel_centre.createParallelGroup(Alignment.LEADING)
                .addGroup(Alignment.TRAILING, gl_panel_centre.createSequentialGroup()
                .addContainerGap()
                .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 589, Short.MAX_VALUE)
                .addContainerGap())
        );
        gl_panel_centre.setVerticalGroup(
            gl_panel_centre.createParallelGroup(Alignment.LEADING)
                .addGroup(Alignment.TRAILING, gl_panel_centre.createSequentialGroup()
                .addContainerGap()
                .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 374, Short.MAX_VALUE)
                .addContainerGap())
        );
        /**
         * 数据库配置
         */
        //==================================开始======================================//
        panel_data = new JPanel();
        panel_data.setToolTipText("");
        tabbedPane.addTab("\u6570\u636E\u914D\u7F6E", null, panel_data, null);

        JPanel panel_data_parameter = new JPanel();
        panel_data_parameter.setBorder(new TitledBorder(null, "\u8FDE\u63A5\u53C2\u6570\u914D\u7F6E", TitledBorder.LEADING, TitledBorder.TOP, null, null));

        JLabel datatype = new JLabel("\u6570\u636E\u5E93\u7C7B\u578B\uFF1A");
        JLabel dataurl = new JLabel("\u8FDE\u63A5\u5730\u5740\uFF1A");
        JLabel username = new JLabel("\u7528 \u6237 \u540D\uFF1A");
        JLabel password = new JLabel("\u5BC6    \u7801\uFF1A");        

        datatypeValue = new JComboBox<String>();
        datatypeValue.setEnabled(false);
        // 读取当前配置写入输入框(数据库类型)
        datatypeValue.addItem(dataconf.get("db_type"));

        dataurlValue = new JTextField();
        dataurlValue.setEnabled(false);
        dataurlValue.setColumns(10);
        // 读取当前配置写入输入框(URL)
        dataurlValue.setText(dataconf.get("db_url"));        

        usernameValue = new JTextField();
        usernameValue.setEnabled(false);
        usernameValue.setColumns(10);
        // 读取当前配置写入输入框(用户名)
        usernameValue.setText(dataconf.get("db_username"));

        passwordValue = new JPasswordField();
        passwordValue.setEnabled(false);
        // 读取当前配置写入输入框(密码)
        passwordValue.setText(dataconf.get("db_password"));

        GroupLayout gl_panel_data_parameter = new GroupLayout(panel_data_parameter);
        gl_panel_data_parameter.setHorizontalGroup(
            gl_panel_data_parameter.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_panel_data_parameter.createSequentialGroup()
                .addGap(20)
                .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.LEADING)
                .addComponent(datatype)
                .addComponent(password)
                .addComponent(dataurl)
                .addComponent(username))
                .addGap(41)
                .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.TRAILING)
                .addComponent(passwordValue, GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
                .addComponent(usernameValue, GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
                .addComponent(dataurlValue, GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
                .addComponent(datatypeValue, Alignment.LEADING, 0, 361, Short.MAX_VALUE))
                .addGap(71))
        );
        gl_panel_data_parameter.setVerticalGroup(
            gl_panel_data_parameter.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_panel_data_parameter.createSequentialGroup()
                .addContainerGap()
                .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.BASELINE)
                .addComponent(datatype)
                .addComponent(datatypeValue, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                .addGap(18)
                .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.BASELINE)
                .addComponent(dataurlValue, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addComponent(dataurl))
                .addGap(21)
                .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.BASELINE)
                .addComponent(usernameValue, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addComponent(username))
                .addGap(18)
                .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.BASELINE)
                .addComponent(password)
                .addComponent(passwordValue, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                .addContainerGap(88, Short.MAX_VALUE))
        );

        //==============================================================//
        /**
         * 点击编辑按钮,输入框可以编辑
         */
        JButton database_edit = new JButton("\u7F16 \u8F91");
        JButton database_save = new JButton("\u4FDD \u5B58");
        database_save.setEnabled(false);

        database_edit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                datatypeValue.setEnabled(true);
                datatypeValue.removeAllItems();
                datatypeValue.addItem("oracle");      //oracle数据库
                datatypeValue.addItem("mysql");       //mysql数据库
                datatypeValue.addItem("mssql");        //mssql数据库
                dataurlValue.setEnabled(true);
                usernameValue.setEnabled(true);
                passwordValue.setEnabled(true);
                database_save.setEnabled(true);
            }
        });

        /**
         * 点击保存后,将数据写入配置文件
         */
        database_save.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Map<String, String> data = new HashMap<String, String>();
                String datatype = datatypeValue.getSelectedItem().toString();
                String dataurl = dataurlValue.getText().toString();
                String username = usernameValue.getText().toString();
                String password = new String(passwordValue.getPassword());
                if("".equals(datatype)){
                    Toolkit.getDefaultToolkit().beep();
                    JOptionPane.showMessageDialog(null, "数据库类型不能为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
                }else if("".equals(dataurl)){
                    Toolkit.getDefaultToolkit().beep();
                    JOptionPane.showMessageDialog(null, "连接地址不能为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
                }else if("".equals(username)){
                    Toolkit.getDefaultToolkit().beep();
                    JOptionPane.showMessageDialog(null, "用户名不能为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
                }else if("".equals(password)){
                    Toolkit.getDefaultToolkit().beep();
                    JOptionPane.showMessageDialog(null, "密码不能为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
                }else{
                    data.put("db.db_type", datatype);
                    data.put("db.url", dataurl);
                    data.put("db.username", username);
                    data.put("db.password", new String(password));
                    String msg = PropertiesUtils.setProperty(DB_CONFIG, data);
                    if("true".equals(msg)){
                        Toolkit.getDefaultToolkit().beep();
                        JOptionPane.showMessageDialog(null, "保存成功!", "提示", JOptionPane.PLAIN_MESSAGE);
                    }else{
                        Toolkit.getDefaultToolkit().beep();
                        JOptionPane.showMessageDialog(null, "保存异常!", "提示", JOptionPane.ERROR_MESSAGE);
                    }
                }

            }
        });
        //==============================================================//

        GroupLayout gl_panel_data = new GroupLayout(panel_data);
        gl_panel_data.setHorizontalGroup(
            gl_panel_data.createParallelGroup(Alignment.TRAILING)
                .addGroup(gl_panel_data.createSequentialGroup()
                .addGap(133)
                .addComponent(database_edit, GroupLayout.PREFERRED_SIZE, 95, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(ComponentPlacement.RELATED, 142, Short.MAX_VALUE)
                .addComponent(database_save, GroupLayout.PREFERRED_SIZE, 95, GroupLayout.PREFERRED_SIZE)
                .addGap(132))
                .addGroup(gl_panel_data.createSequentialGroup()
                .addGap(20)
                .addComponent(panel_data_parameter, GroupLayout.DEFAULT_SIZE, 577, Short.MAX_VALUE))
        );
        gl_panel_data.setVerticalGroup(
            gl_panel_data.createParallelGroup(Alignment.TRAILING)
                .addGroup(gl_panel_data.createSequentialGroup()
                .addContainerGap()
                .addComponent(panel_data_parameter, GroupLayout.PREFERRED_SIZE, 209, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(ComponentPlacement.RELATED, 159, Short.MAX_VALUE)
                .addGroup(gl_panel_data.createParallelGroup(Alignment.BASELINE)
                .addComponent(database_save)
                .addComponent(database_edit))
                .addGap(32))
        );
        panel_data_parameter.setLayout(gl_panel_data_parameter);
        panel_data.setLayout(gl_panel_data);
        //==================================结束======================================//

        /**
         * 完成配置
         */
        //==================================开始======================================//
        JPanel panel_finish = new JPanel();
        tabbedPane.addTab("\u5B8C\u6210\u914D\u7F6E", null, panel_finish, null);

        JButton start = new JButton("\u542F \u52A8");

        JPanel panel_finish_parameter = new JPanel();
        panel_finish_parameter.setBorder(new TitledBorder(null, "\u8FD0\u884C\u4FE1\u606F", TitledBorder.LEADING, TitledBorder.TOP, null, null));
        GroupLayout gl_panel_finish = new GroupLayout(panel_finish);
        gl_panel_finish.setHorizontalGroup(
            gl_panel_finish.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_panel_finish.createSequentialGroup()
                .addContainerGap()
                .addGroup(gl_panel_finish.createParallelGroup(Alignment.LEADING)
                .addComponent(panel_finish_parameter, GroupLayout.DEFAULT_SIZE, 577, Short.MAX_VALUE)
                .addComponent(start))
                .addContainerGap())
        );
        gl_panel_finish.setVerticalGroup(
            gl_panel_finish.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_panel_finish.createSequentialGroup()
                .addContainerGap()
                .addComponent(start)
                .addPreferredGap(ComponentPlacement.UNRELATED)
                .addComponent(panel_finish_parameter, GroupLayout.DEFAULT_SIZE, 308, Short.MAX_VALUE)
                .addContainerGap())
        );

        JScrollPane scrollPane = new JScrollPane();
        GroupLayout gl_panel_finish_parameter = new GroupLayout(panel_finish_parameter);
        gl_panel_finish_parameter.setHorizontalGroup(
            gl_panel_finish_parameter.createParallelGroup(Alignment.LEADING)
                .addComponent(scrollPane, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 565, Short.MAX_VALUE)
        );
        gl_panel_finish_parameter.setVerticalGroup(
            gl_panel_finish_parameter.createParallelGroup(Alignment.LEADING)
                .addComponent(scrollPane, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 356, Short.MAX_VALUE)
        );

        JTextArea textArea = new JTextArea();
        scrollPane.setViewportView(textArea);
        panel_finish_parameter.setLayout(gl_panel_finish_parameter);
        panel_finish.setLayout(gl_panel_finish);
        panel_centre.setLayout(gl_panel_centre);

        //==================================结束======================================//

    }
}

  2、PropertiesUtils.java

package com.xie.util;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;

public class PropertiesUtils {

    /**
     * 通过配置文件名获取配置信息
     * @param fileName
     * @return
     */
    public static Properties getProps(String fileName){
        Properties props = new Properties();
        try {
            // 只需要文件名 dbconfig.properties与resource/dbconfig.properties的区别
            props.load(new InputStreamReader(PropertiesUtils.class.getClassLoader().getResourceAsStream(fileName), "UTF-8"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return props;
    }

    /**
     * 通过配置文件路径获取配置信息
     * @param fileName
     * @return
     */
    public static Properties getProperty(String fileName) {
        //第一步是取得一个Properties对象
        Properties props = new Properties();
        //第二步是取得配置文件的输入流
        //InputStream is = PropertiesUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");//在非WEB环境下用这种方式比较方便
        try {
            InputStream input = new FileInputStream(fileName);
            // 第三步是把配置文件的输入流load到Properties对象中,
            props.load(input);
            // 注意两种的区别
            //props.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName), "UTF-8"));
        } catch (IOException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        return props;
    }

    /**
     * properties获取key值
     * @param fileName
     * @param key
     * @return
     */
    public static String getProperty(String fileName, String key) {
        String value = "";
        //第一步是取得一个Properties对象
        Properties props = new Properties();
        //第二步是取得配置文件的输入流
        //InputStream is = PropertiesUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");//在非WEB环境下用这种方式比较方便
        try {
            //InputStream input = new FileInputStream("dbconfig.properties");//在WEB环境下用这种方式比较方便,不过当配置文件是放在非Classpath目录下的时候也需要用这种方式
            //第三步讲配置文件的输入流load到Properties对象中,这样在后面就可以直接取来用了
            props.load(new InputStreamReader(PropertiesUtils.class.getClassLoader().getResourceAsStream(fileName), "UTF-8"));
            value = props.getProperty(key);
            //is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return value;
    }

    /**
     * properties写入key值
     * @param fileName
     * @param data
     */
    public static String setProperty(String fileName, Map<String, String> data) {
        String message = "true";

        // 第一步也是取得一个Properties对象
        Properties props = new Properties();
        // 第二步也是取得该配置文件的输入流
        // InputStream is = PropUtil.class.getClassLoader().getResourceAsStream("dbconfig.properties");
        try {
            InputStream input = new FileInputStream(fileName);
            // 第三步是把配置文件的输入流load到Properties对象中,
            // props.load(new InputStreamReader(PropertiesUtils.class.getClassLoader().getResourceAsStream(fileName), "UTF-8"));
            props.load(input);
            // 接下来就可以随便往配置文件里面添加内容了
            // props.setProperty(key, value);
            if (data != null) {
                Iterator<Entry<String, String>> iter = data.entrySet().iterator();
                while (iter.hasNext()) {
                    Entry<String, String> entry = iter.next();
                    props.setProperty(entry.getKey().toString(), entry.getValue().toString());
                }
            }
            // 在保存配置文件之前还需要取得该配置文件的输出流,切记,如果该项目是需要导出的且是一个非WEB项目,
            // 则该配置文件应当放在根目录下,否则会提示找不到配置文件
            OutputStream out = new FileOutputStream(fileName);
            // 最后就是利用Properties对象保存配置文件的输出流到文件中;
            props.store(out, null);
            input.close();
            out.flush();
            out.close();
        } catch (IOException e) {
            message = "false";
            e.printStackTrace();
        }

        return message;
    }

    public static void main(String[] args) {
        System.out.println(PropertiesUtils.getProps("dbconfig.properties"));
//        System.out.println(PropertiesUtils.getProperty("resource/dbconfig.properties"));
//        Map<String, String> data = new HashMap<String, String>();
//        data.put("db.db_type", "oracle1");
//        data.put("db.username", "root1");
//        data.put("db.password", "root1");
//        PropertiesUtils.setProperty("resource/dbconfig.properties", data);
    }

}

  3、config-path.properties

img.path=resource/image/title.png
db.path=resource/dbconfig.properties

  4、dbconfig.properties

#Oracle
db.db_type=oracle
db.driver=oracle.jdbc.driver.OracleDriver
db.dialect=org.hibernate.dialect.Oracle10gDialect
db.url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:tsm1
db.username=root
db.password=root
时间: 2024-08-14 01:58:00

swing开发一个修改项目数据库连接参数配置文件的相关文章

开发一个app项目需要多少钱?

开发一个app项目需要多少钱? .客户经常问“开发一个APP需要多少钱?”“做个app需要多少预算?”“开发个APP的价钱?”等等有关app开发价格方面.为此上海储君科技公司针对这一系列的问题做个整理: 现在的市面上有两种APP开发模式,一种是模板APP,一种是定制型开发的APP,两个分类价格也千差万别. 第一种,模板APP,它的市场价格几千到几万不等,相比APP定制开发价格是相当便宜的.但是也存在着一定的缺点.APP模板的源代码版权是APP 开发公司所有的,而且企业用户每年需要 交付一定的管理

【Vue 入门】使用 Vue2 开发一个展示项目列表的应用

前言 一直没有找到一个合适的展示个人项目的模板,所以自己动手使用 Vue 写了一个.该模板基于 Markdown 文件进行配置,只需要按一定规则编写 Markdown 文件,然后使用一个 在线工具 转为 JSON 文件即可.下面是该项目的在线地址和源码.本文主要记录一下项目中用到的相关知识. 在线演示    源码 效果 程序最终的效果如下图所示: 整个项目只包含两个组件:项目介绍 和 侧边导航,逻辑比较简单,十分适合入门. 环境配置 这里我们使用 Gulp 和 Webpack 用作项目构建工具.

【转载】【Vue 入门】使用 Vue2 开发一个展示项目列表的应用

目录 前言 效果 环境配置 Gulp 和 Webpack 集成 Gulp 配置 Webpack 配置 Vue HelloWorld 基础 组件 ES6 let for of 循环 Set 和 Map 参考文章 前言 一直没有找到一个合适的展示个人项目的模板,所以自己动手使用 Vue 写了一个.该模板基于 Markdown 文件进行配置,只需要按一定规则编写 Markdown 文件,然后使用一个 在线工具 转为 JSON 文件即可.下面是该项目的在线地址和源码.本文主要记录一下项目中用到的相关知识

Python开发入门与实战2-第一个Django项目

2.第一个Django项目 上一章节我们完成了python,django和数据库等运行环境的安装,现在我们来创建第一个django project吧,迈出使用django开发应用的第一步. 2.1.创建第一个Django项目 我们创建一个我们存放Django的工作目录,示例:C:\My Files\Python Projects 在命令提示符窗口进入到刚才创建的目录,运行运行命令: django-admin.py startproject mysite 这样会在你的当前目录下创建一个目录mysi

Cocos2dx 3.0开发环境搭建--Eclipse上构建一个Android项目

一.前言: 本篇主要介绍Cocos2d-x 3.0的一些基础内容,以及在Eclipse上上编译我们的Cocos2d-x项目,成功把Helloworld运行起来了.看完本篇博客之后,你就会知道Cocos2d-x 3.0竟然发生了如此大的变化,变得如此简单,环境搭建.项目创建.编译的方式更加人性化了. 二.环境准备: 1.下载ADT Bundle(Eclipse捆绑了SDK和ADT),或者是Eclipse安装了ADT插件. 2.安装JDK.NDK.Ant .Python,然后配置环境. 3.Coco

(转)一个JavaWeb项目开发总结

原文地址:http://www.cnblogs.com/lzb1096101803/p/4907775.html 一.学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml->mvc->db->spring ioc->log->代码 先了解项目数据库的表结构,这个方面是最容易忘记的,有时候我们只顾着看每一个方法是怎么进行的,却没有去了解数据库之间的主外键关联.其实如果先了解数据库表结构,再去看一个方法的实现会更加容易. 然后需要过一遍web.xml,知道

windows系统下跨平台开发环境的搭建(cordova)+创建一个android项目

目的:在windows系统下,搭建跨平台的开发环境(cordova)创建一个安卓项目 前提:安装有java Jdk 1.8以上 Android SDK 23以上 1.安装node.js ,选择对应的版本下载安装,没什么好说的 官方网址:http://nodejs.cn/ 2.测试安装是否成功 win+r 键,打开运行窗口,输入cmd,然后确定,打开命令行窗口 输入node  -v 输出版本号,说明node.js安装成功,否则请查找原因,或者重新安装 输入npm -v 输出版本号说明npm可以使用

Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)

一.搭建Android开发环境 准备工作:下载Eclipse.JDK.Android SDK.ADT插件 下载地址:Eclipse:http://www.eclipse.org/downloads/ JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html Android SDK:http://developer.android.com/sdk/index.html ADT:

GitHub之多人开发一个项目

首先我们要简单知道github跟Git的区别.git是版本控制工具, github是一个面向开源及私有软件项目的托管平台,也是程序员交流的地方. 接下来就开始讲怎么多人一起开发. 首先我们先拥有github账号https://github.com/ 在这里面注册一个账号. 当我们注册完就登录进去.进去之后就会看到这个界面 github的使用我就不讲了,现在只是教你怎么共同开发一个项目 然后下载git,下载地址,下载完就安装. https://git-scm.com/downloads/ 然后打开