成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

基于Java Swing的儀表盤(pán)實(shí)現(xiàn)

littleGrow / 1186人閱讀

摘要:指針對(duì)于表示我們的當(dāng)前值的大小,我們需要一個(gè)指針來(lái)指向我們的當(dāng)前值,這個(gè)時(shí)候我們需要根據(jù)提供的數(shù)值的大小,繪制一個(gè)指針來(lái)表示當(dāng)前的值,指向刻度盤(pán)上的當(dāng)前位置。實(shí)現(xiàn)效果線性刻度盤(pán)弧形刻度盤(pán)半圓中心刻度盤(pán)圓形刻度盤(pán)開(kāi)源實(shí)現(xiàn)地址

序言

夠幾個(gè)月沒(méi)有更新了,博客還透露著春招焦慮的氣息。最近c(diǎn)ode確實(shí)不多,而且缺乏原創(chuàng)性的內(nèi)容,當(dāng)然,關(guān)鍵點(diǎn)還是在于,對(duì)于最近看的東西,看的比較雜,沒(méi)能夠有一個(gè)非常透徹的理解,input后沒(méi)有進(jìn)行很好的內(nèi)化,導(dǎo)致output如難產(chǎn)的嬰兒,遲遲無(wú)法落地。轉(zhuǎn)到正題,這次寫(xiě)的儀表盤(pán),繼承JComponent實(shí)現(xiàn)一個(gè)儀表空間。支持直線性,弧形,圓形。同時(shí)支持對(duì)于表盤(pán)的顏色,大小的一些自定義操作。難點(diǎn)在于對(duì)于表盤(pán)刻度的繪制。涉及到數(shù)學(xué)公式的轉(zhuǎn)化,將我們的刻度線進(jìn)行繪制。

實(shí)現(xiàn)思路

初次想到實(shí)現(xiàn)一個(gè)儀表盤(pán),有點(diǎn)畏懼心理,但是想到了之前創(chuàng)業(yè)公司實(shí)現(xiàn)的一個(gè)扇形的RecyclerView控件,感覺(jué)有很多可以參考的算法在里面,所以決定來(lái)嘗試下。逐層剖析,同時(shí)在網(wǎng)上看到了一個(gè)實(shí)現(xiàn),大體上看了下其實(shí)現(xiàn),代碼寫(xiě)的非常爛,閱讀難度非常大,對(duì)于后期想在其寄出上造個(gè)輪子來(lái)說(shuō)是比較困難的。平時(shí)開(kāi)發(fā)中,很多輪都不能完全match我們的需求,因此需要我們具備自身拆輪能力,而作為一個(gè)造輪者,除了完成需求,應(yīng)該盡可能的使輪具備更好的泛化能力。

對(duì)于刻度盤(pán)的繪制,首先要知道的是,一個(gè)刻度盤(pán)包含哪些東西,哪些需要我們?nèi)ダL制的,對(duì)刻度盤(pán)進(jìn)行了一個(gè)拆分之后,然后逐個(gè)去繪制,此時(shí)就沒(méi)有這么難了。

刻度:刻度盤(pán),首先要有的必然是刻度,如下圖中的所示,對(duì)于刻度,我們需要有長(zhǎng)刻度和短刻度,長(zhǎng)刻度也就是我們的大的單位。然后是其中的最小單位,也就是一個(gè)個(gè)的小刻度。

文字標(biāo)量:刻度盤(pán)中的文字標(biāo)量,對(duì)于刻度盤(pán),我們需要文字來(lái)準(zhǔn)確直觀的描述,每一個(gè)刻度所度量的大小,因此,我們需要在刻度上,對(duì)于大小進(jìn)行一個(gè)標(biāo)注。

指針:對(duì)于表示我們的當(dāng)前值的大小,我們需要一個(gè)指針來(lái)指向我們的當(dāng)前值,這個(gè)時(shí)候我們需要根據(jù)提供的數(shù)值的大小,繪制一個(gè)指針來(lái)表示當(dāng)前的值,指向刻度盤(pán)上的當(dāng)前位置。

因此,我們可以得出,對(duì)于一個(gè)刻度盤(pán)的繪制,需要對(duì)于三個(gè)部分的繪制綜合得到。以繪制弧形的舉例。

繪制弧形,首先是對(duì)于刻度的繪制,我們需要根據(jù)提供整個(gè)圓弧的角度和數(shù)值的范圍來(lái)將刻度盤(pán)進(jìn)行分割,分割完成之后,對(duì)其進(jìn)行繪制,這個(gè)時(shí)候,如何繪制呢?從什么地方開(kāi)始繪制,畫(huà)刻度,無(wú)非是提供線的兩端,然后畫(huà)一條線,那么問(wèn)題就是在于如何如何找到這條線的兩端的坐標(biāo),這個(gè)時(shí)候,需要我們運(yùn)用一些數(shù)學(xué)知識(shí),來(lái)進(jìn)行計(jì)算,根據(jù)角度來(lái)計(jì)算。這個(gè)時(shí)候需要我們計(jì)算出起始角度,然后根據(jù)每當(dāng)我們畫(huà)出一個(gè)刻度,就加上相應(yīng)的角度值,最后得到每一個(gè)刻度所處的角度,然后根據(jù)余弦公式,表示當(dāng)前的角度。

  double x1 = Math.cos(startAngle - num * major * dunit) * r + width / 2;
  double y1 = height - yOffset - Math.sin(startAngle - num * major * dunit) * r;
  double x2 = Math.cos(startAngle - num * major * dunit) * r * 0.75 + width / 2;
  double y2 = height - yOffset - Math.sin(startAngle - num * major * dunit) * r * 0.75;

具體代碼的實(shí)現(xiàn)可以參考本人github開(kāi)源代碼。

實(shí)現(xiàn)效果

線性刻度盤(pán)

弧形刻度盤(pán)


半圓中心刻度盤(pán)


圓形刻度盤(pán)

開(kāi)源實(shí)現(xiàn)

Github地址

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66300.html

相關(guān)文章

  • Java Platform SE 8(Java概念圖描述)中文文檔

    摘要:包括以下級(jí)別部署用戶(hù)界面工具包集成庫(kù)其他基礎(chǔ)庫(kù)和基礎(chǔ)庫(kù)虛擬機(jī)由以下級(jí)別組成除了的用戶(hù)界面工具包集成庫(kù)其他基礎(chǔ)庫(kù)和基礎(chǔ)庫(kù)配置文件由以下級(jí)別組成集成庫(kù)其他基礎(chǔ)庫(kù)和基礎(chǔ)庫(kù) Java概念圖將Java組件技術(shù)分類(lèi),下面列出了這些層次,從上到下,以及每個(gè)層次都包含的技術(shù),屬于較低水平的技術(shù)可以作為更高水平的一部分的基礎(chǔ)。 Java語(yǔ)言 Tools & Tool APIs java javac...

    mudiyouyou 評(píng)論0 收藏0
  • 使用XML構(gòu)建Swing應(yīng)用

    摘要:而與其他工具相比比如可使用來(lái)進(jìn)行頁(yè)面繪制。對(duì)于參數(shù)可以使用基本類(lèi)型來(lái)表示。如下所示實(shí)際上其原理就是使用中的來(lái)實(shí)現(xiàn)類(lèi)似的還有。當(dāng)然對(duì)于復(fù)雜的情況建議還是使用之類(lèi)或其他商業(yè)工具完成。 原文地址: http://blog.52sox.com/Java-us... 不得不說(shuō)Swing是Java中GUI編程中1個(gè)不錯(cuò)的包,但是手動(dòng)編寫(xiě)Swing是1個(gè)很繁瑣的事情。而與其他GUI工具相比,比如Q...

    tomato 評(píng)論0 收藏0
  • 界面開(kāi)發(fā)步驟

    摘要:事件對(duì)象攜帶了動(dòng)作發(fā)生時(shí)的相關(guān)信息,比如通過(guò)事件對(duì)象獲取按鈕的字符串,通過(guò)字符串判斷后執(zhí)行不同的代碼。使用監(jiān)聽(tīng)器的步驟自己創(chuàng)建一個(gè)類(lèi)使用這個(gè)類(lèi)創(chuàng)建一個(gè)對(duì)象,用按鈕對(duì)象的添加監(jiān)聽(tīng)器方法添加這個(gè)對(duì)象。 ...

    MangoGoing 評(píng)論0 收藏0
  • Swing系列之JTextField(單行文本框)

    摘要:介紹是一個(gè)輕量級(jí)組件,它允許編輯單行文本。把字段文本用作針對(duì)的命令字符串。右對(duì)齊尾部對(duì)齊在所需的字段文本尺寸小于為它分配的尺寸時(shí)使用。這是由和方法確定的。如果具有操作偵聽(tīng)器,則導(dǎo)致偵聽(tīng)器獲取一個(gè),并使用事件。 介紹 JTextField是一個(gè)輕量級(jí)組件,它允許編輯單行文本。 JTextField 具有建立字符串的方法,此字符串用作針對(duì)被激發(fā)的操作事件的命令字符串。java.awt.T...

    DevTalking 評(píng)論0 收藏0
  • 掃描槍自帶回車(chē)Java模擬

    摘要:掃描槍讀取的數(shù)據(jù),通常自帶回車(chē)。開(kāi)發(fā)相關(guān)系統(tǒng)時(shí),需要編寫(xiě)一個(gè)模擬掃描槍的。將作為按鈕的事件監(jiān)聽(tīng)器。設(shè)計(jì)時(shí),就有兩個(gè)選項(xiàng)在后是否自帶回車(chē)。推薦一款適合二次開(kāi)發(fā)的掃描槍迷你條碼掃描槍 掃描槍讀取的數(shù)據(jù),通常自帶回車(chē)。開(kāi)發(fā)相關(guān)系統(tǒng)時(shí),需要編寫(xiě)一個(gè)模擬掃描槍的QRReaderDialog。java.awt.RobotJTextField作為數(shù)據(jù)接受控件,在它上面按下Enter鍵,可以監(jiān)聽(tīng)Act...

    qc1iu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<