作為測(cè)試仔,為了顏值,也開(kāi)始去寫(xiě)門(mén)面程序了!

寫(xiě)在前面
最近一直在做批量測(cè)試工具的開(kāi)發(fā),打包的exe,程序運(yùn)行也是一個(gè)黑乎乎的dos窗口。

個(gè)人感覺(jué)真的丑死了,總感覺(jué)沒(méi)個(gè)界面,體驗(yàn)不好,所以就想嘗試寫(xiě)桌面應(yīng)用程序。

在技術(shù)調(diào)研選型時(shí),本身后端邏輯就是用的Java,所以自然也想用Java的窗體程序?qū)崿F(xiàn)。

經(jīng)調(diào)研發(fā)現(xiàn)使用JavaFx、Swing可以實(shí)現(xiàn)桌面應(yīng)用程序開(kāi)發(fā),感覺(jué)都不太理想,為什么呢?

寫(xiě)好后,都是通過(guò) Application.launch 啟動(dòng),僅能運(yùn)行一次,不能多次調(diào)用(真的是硬傷呀?。?br>
作為一個(gè)測(cè)試仔,沒(méi)辦法只好找開(kāi)發(fā)了。

于是,我又去找強(qiáng)哥(之前北京同事),強(qiáng)哥給我推薦了electron,我一查,才發(fā)現(xiàn)真的太秀了,太好看了吧,結(jié)果我就被種草了,真的是太想學(xué)了......

需求
于是,開(kāi)啟了為期兩天的學(xué)習(xí),每天一小時(shí),真的感覺(jué)受益良多,真實(shí)感覺(jué)真的前端太難了(不善長(zhǎng)前端),但也是真的很有成就感。

故事講完了,開(kāi)始干活了,具體需求如下:

點(diǎn)擊按鈕可以打開(kāi)另一個(gè)界面
按鈕及界面都需要顏值
如何實(shí)現(xiàn)
1、引入樣式
安裝bootstrap命令如下:

npm install bootstrap --save
2、點(diǎn)擊按鈕可以打開(kāi)另一個(gè)界面
在根目錄下創(chuàng)建一個(gè)名為renderer的文件夾,并創(chuàng)建index.js,其作用就是向主進(jìn)程發(fā)出通信,具體代碼如下:

const { ipcRenderer } = require('electron')
document.getElementById('add-music').addEventListener("click",()=>{
    ipcRenderer.send("add-music-window")
})
再創(chuàng)建一個(gè)名為index.html,示例代碼如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">

    <link href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>

    <title>本地音樂(lè)播放器</title>
</head>
<body>
<div class="container m-4">
    <h1>我的播放器</h1>
    <button type="button" id="add-music" class="btn btn-primary btn-lg btn-block m-4">添加歌曲到曲庫(kù)</button>
    <!-- Content here -->
</div>
<script src="./index.js"></script>
</body>
</html>
再創(chuàng)建一個(gè)名為add.js,示例代碼如下:

const { ipcRenderer } = require('electron')
document.getElementById('add-music').addEventListener("click",()=>{
    ipcRenderer.send("add-music-window")
})
再創(chuàng)建一個(gè)名為add.html,示例代碼如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>添加音樂(lè)</title>
    <link rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-4">
    <h1>添加音樂(lè)到曲庫(kù)</h1>
    <div id="musicList" class="mb-2">您還未選擇任何音樂(lè)文件</div>
    <button type="button" id="select-music" class="btn btn-outline-primary btn-lg btn-block mt-4">
        選擇音樂(lè)
    </button>
    <button type="button" id="add-music" class="btn btn-primary btn-lg btn-block mt-4">
        導(dǎo)入音樂(lè)
    </button>
</div>
<script>
    require('./add.js')
</script>
</body>
</html>

接著再來(lái)修改main.js代碼,使用ipcMain來(lái)接收渲染進(jìn)程發(fā)起的點(diǎn)擊事件,示例代碼如下:

const { app, BrowserWindow,ipcMain } = require('electron')
const createWindow = () => {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
        }
    })
    win.loadFile('./renderer/index.html')
    ipcMain.on("add-music-window",()=>{
        const childWin = new BrowserWindow({
            width: 500,
            height: 300,
            webPreferences: {
                nodeIntegration: true,
                contextIsolation: false,
            },
            parent:win
        })
        childWin.loadFile('./renderer/add.html')
    })
}


app.whenReady().then(() => {
    createWindow()

    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) createWindow()
    })
})

app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit()
})

效果
npm start 運(yùn)行查看結(jié)果如下:

到此一個(gè)簡(jiǎn)單點(diǎn)擊交互完成,感興趣的同學(xué)可以自己動(dòng)手去嘗試。






作者:糖小幽

歡迎關(guān)注微信公眾號(hào) :軟件測(cè)試君