美文网首页
马斯克说狗币牛逼,我说idea插件助你盯盘摸鱼

马斯克说狗币牛逼,我说idea插件助你盯盘摸鱼

作者: a49f87ef5d4f | 来源:发表于2021-02-10 10:26 被阅读0次

老马和老马


前几天,马斯克不仅发推文表示自己最喜欢的加密货币可能是狗狗币,其还把自己的Twitter账户简介改为了“狗狗币前CEO ”。


image

一代“带货达人”,“硅谷钢铁侠”,好像当了首富之后有点任性啊,这和马老板有的一拼啊,两个老马都这么让人眼前一亮,这让我想起了宋丹丹小品中的一句话:“他们名人都这样”,有钱之后就任性,这玩意好像写在人们的基因里了。


image

马斯克为币圈的一阵摇旗呐喊,直接带起了一波上涨行情,有人欢喜有人愁,真是太热闹了。当然,小弟作为一个不炒币的小屌丝,别人的热闹,与我无关,毕竟又穷又胆小,但是,作为一个上班的IT男,如何在老板眼皮子低下对数字货币盯盘,这个还是可以考虑考虑的,毕竟这是个分分钟几百万上下的生意,为韭菜服务是一个很重要的使命。

怎样躲老板


作为一个android开发者,你的工作就是在android studio上写代码,离开了android studio页面,基本上就可以认为你摸鱼了,而android studio又是基于idea开发的,如何摸鱼盯盘又不被发现,idea插件无疑就是一个最好的选择了。

开发


效果

image

由效果可以看出,这里在idea中创建了一个ToolWindow,在ToolWindow中展示货币信息,每隔30秒进行一次刷新。

API的获取

行情信息的api通过非小号公共api获取的,文档见:** https://github.com/xiaohao2019/API-docs/blob/master/PublicApi_CN.md **

数据的获取

通过上面的api,定时获取加密货币的行情数据,然后通过EventBus将数据用事件包装发出去,然后在BitCoinWindow中接收数据并展示。

object TickerNetDataApi {

    private var isStart = false

    private var lastTickerDataList: List<TickerData>? = null

    fun scheduleGetTickerData() {
        if (!isStart) {
            val scheduledExecutorService = Executors.newSingleThreadScheduledExecutor()
            scheduledExecutorService.scheduleAtFixedRate(Runnable {
                getTickerData()
            }, 0, 30, TimeUnit.SECONDS)
            isStart = true
        }
    }

    fun getTickerData() {
        val uri = "https://fxhapi.feixiaohao.com/public/v1/ticker"
        val paratmers: MutableList<NameValuePair> =
            ArrayList()
        paratmers.add(BasicNameValuePair("start", "0"))
        paratmers.add(BasicNameValuePair("limit", "100"))
        try {
            val tickerDataList = makeAPICall(uri, paratmers)
            tickerDataList?.let {
                val lastData = lastTickerDataList
                if (lastData == null || lastData[0].last_updated > it[0].last_updated) {
                    org.greenrobot.eventbus.EventBus.getDefault().post(TickerDataEvent(tickerDataList))
                }
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }

    }

    @Throws(URISyntaxException::class, IOException::class)
    fun makeAPICall(uri: String, parameters: List<NameValuePair?>?): List<TickerData>? {
        var responseContent: String? = ""
        val query = URIBuilder(uri)
        query.addParameters(parameters)
        val client = HttpClients.createDefault()
        val request = HttpGet(query.build())
        request.setHeader(HttpHeaders.ACCEPT, "application/json")
        val response = client.execute(request)
        response.use { response ->
            println(response.statusLine)
            val entity = response.entity
            responseContent = EntityUtils.toString(entity)
            EntityUtils.consume(entity)
        }
        return responseContent?.let {
            GsonUtil.fromJson(it, object : TypeToken<List<TickerData>>() {
            }.type)
        }
    }


}

创建ToolWindow

ToolWindow是ide的子window,通常用来展示一些信息,比较常见的就是android开发过程中的项目结构目录


image

创建ToolWindow的方法还是很简单的,首先要创建BitCoinToolWindowFactory继承自ToolWindowFactory

class BitCoinToolWindowFactory : ToolWindowFactory {

    override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
        val bitCoinWindow = BitCoinWindow()
        val contentFactory = ContentFactory.SERVICE.getInstance()
        val content =
            contentFactory.createContent(bitCoinWindow.getContent(), "", false)
        toolWindow.contentManager.addContent(content)
        TickerNetDataApi.scheduleGetTickerData()
    }

}

其中BitCoinWindow就是用来展示信息的UI,idea插件一般是使用swing来构建UI的,这里用JTableLayout进行UI表格的展示

package com.skateboard.coinsplugin.ui

import com.skateboard.coinsplugin.data.TickerDataEvent
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.util.*
import javax.swing.JPanel
import javax.swing.JScrollPane
import javax.swing.JTable
import javax.swing.table.DefaultTableModel
import javax.swing.table.TableColumn

class BitCoinWindow {

    private lateinit var contentPanel: JPanel

    private lateinit var contentScrollPane: JScrollPane

    private lateinit var coinsTable: JTable

    private val columnList =
        listOf("排名", "名称", "最新价格", "24h的成交额", "流通市值", "流通数量", "总发行量", "最大发行量", "1小时涨跌幅", "24小时涨跌幅", "7天涨跌幅", "更新时间")

    init {
        EventBus.getDefault().register(this)
        val tableModel = coinsTable.model as DefaultTableModel
        for (index in columnList.indices) {
            val column = columnList[index]
            tableModel.addColumn(column)
        }
        coinsTable.autoResizeMode = JTable.AUTO_RESIZE_OFF
    }

    fun getContent(): JPanel = contentPanel

   //更新数据
    @Subscribe(threadMode = ThreadMode.MAIN)
    fun onTickerDataEvent(event: TickerDataEvent) {
        if (coinsTable.rowCount <= 0) {
            for (tickerData in event.tickerDataList) {
                val tableModel = coinsTable.model as DefaultTableModel
                tableModel.addRow(tickerData.toArray())
            }
        } else {
            val tableModel = coinsTable.model as DefaultTableModel
            val rowVector = Vector<Vector<String>>()
            for (tickerData in event.tickerDataList) {
                rowVector.add(tickerData.toVector())
            }
            tableModel.setDataVector(rowVector, Vector(columnList))
            coinsTable.repaint()
        }
        fitTableColumns(coinsTable)
    }

   //适配表格宽度
    private fun fitTableColumns(myTable: JTable) {
        val header = myTable.tableHeader
        val rowCount = myTable.rowCount
        val columns = myTable.columnModel.columns
        while (columns.hasMoreElements()) {
            val column = columns.nextElement() as TableColumn
            val col = header.columnModel.getColumnIndex(column.identifier);
            var width = (myTable.tableHeader.defaultRenderer.getTableCellRendererComponent(
                myTable, column.identifier
                , false, false, -1, col
            ).preferredSize.getWidth()).toInt()
            for (row in 0 until rowCount) {
                val preferedWidth = (myTable.getCellRenderer(row, col).getTableCellRendererComponent(
                    myTable,
                    myTable.getValueAt(row, col), false, false, row, col
                ).preferredSize.getWidth()).toInt()
                width = width.coerceAtLeast(preferedWidth)
            }
            header.resizingColumn = column
            column.width = width + myTable.intercellSpacing.width;
        }
    }
}

在配置文件中注册

在plugin.xml中注册刚才创建的BitCoinToolWindowFactory

<idea-plugin>
    <id>org.example.bitcoinplugin</id>
    <name>比特币行情插件</name>
    <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>

    <description><![CDATA[
    Enter short description for your plugin here.<br>
    <em>most HTML tags may be used</em>
    ]]></description>

    <!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
         on how to target different products -->
    <depends>com.intellij.modules.platform</depends>

    <extensions defaultExtensionNs="com.intellij">
        <toolWindow id="绿油油" secondary="true" icon="AllIcons.General.Modified" anchor="right"
                    factoryClass="com.skateboard.coinsplugin.ui.BitCoinToolWindowFactory"/>
    </extensions>

    <actions>
        <!-- Add your actions here -->
    </actions>
</idea-plugin>

这里ToolWindow的名称叫做绿油油,这个名称感觉和这个插件的气质比较符合。

最后


当然,这个插件不可能作为真正的盯盘工具的,因为这个接口有些不稳定,而且不够及时,只是作为idea插件编写的一个小demo,各位大佬不要太较真,另外附上项目地址
** https://github.com/skateboard1991/Chives **

相关文章

  • 马斯克说狗币牛逼,我说idea插件助你盯盘摸鱼

    老马和老马 前几天,马斯克不仅发推文表示自己最喜欢的加密货币可能是狗狗币,其还把自己的Twitter账户简介改为了...

  • idea牛逼插件

    转自:http://www.cnblogs.com/huaxingtianxia/p/6703315.htmlid...

  • 牛逼说

    狂风肆虐大雨滂沱,路俩边的樟树倔强的迎风而立,枝叶散乱不堪,狼狈之极。台风一手遮天下城市显得安分守己,就像做了错事...

  • {云评车}聊聊马斯克

    对于之前跟风黑过马斯克的事情,我确实有所反思。 如果说马斯克是PPT之神,这一点依然是对的。马斯克比起很多人牛逼的...

  • 2020-06-27

    牛哥论币:比特币支撑四次试探支撑不破谨防变盘6.27行情走势解析 牛哥说币30 分钟前83 牛哥论币:比特币支撑四...

  • 明人不说暗话,今晚我们尽情开车!

    Su插件牛逼,直接弯曲。 先从processing 入手,java 之类的 ide 部署有点费劲。 上海这个地方说...

  • 吃了激素的极特币是什么鬼?

    今天给大家说个牛逼的币,极特币dgb,它牛逼在什么地方呢,是什么让它在17年涨了上千倍,18年还能续写辉煌吗? 1...

  • 儿子说牛逼

    又是这个场景,儿子洗脚,先把拖鞋扔进了盆里,然后再把袜子扔进盆里,然后再坐在小椅子上把脚放进去,这是他的旧戏重演,...

  • IntelliJ IDEA 牛逼的插件推荐

    今天介绍一下IDEA的一些炫酷的插件,IDEA强大的插件库,不仅能给我们带来一些开发的便捷,还能体现我们的与众不同...

  • Idea牛逼插件,拿走不谢

    1、grep console java 开发的过程中,日志都会输出到console,输出的内容是非常多的,所以需要...

网友评论

      本文标题:马斯克说狗币牛逼,我说idea插件助你盯盘摸鱼

      本文链接:https://www.haomeiwen.com/subject/mbghxltx.html