2013-05-12 83 views
1

我正在構建一個類似Java的SingStar應用程序,因爲儘管掌握了關於佈局等的基本知識,但我仍然不熟悉Java Swing。高效的動態生成的Java GUI

我的意圖有以下幾種:

  1. 打開一個MIDI文件。
  2. 閱讀筆記。
  3. 生成顯示此數據的GUI。
  4. 在播放時不斷移動GUI。

我想到的(並且確實是)創建了一個表示Midi數據的BufferedImage。因此,例如,我有一個MidiLength x ScreenHeight BufferedImage(通常爲1024 x> 10.000),我可以動態讀取MIDI數據。然後顯示BufferedImage的第一個ScreenWidth x ScreenHeight部分,並且當用戶開始播放時,我每5ms更新一次BufferedImage子圖像x起始座標。這樣我就成功地實現了我在找的東西。

我發佈了GUI的圖像,以便您可以更好地瞭解我所談論的內容。

http://img844.imageshack.us/img844/3324/javagui.png

的問題是,這種內部的BufferedImage可以是相當巨大的,根據MIDI長度,所以也拍了很多的RAM,但我不能這樣做想別的辦法。

任何想法將非常讚賞。

預先感謝您!

+0

難道你不能「流」緩衝的圖像,所以它只是使用內存中的內容ram? – 2013-05-12 21:06:51

+0

問題在於,我需要生成「即時」圖像,並且它非常動態(每隔幾毫秒更改一次)。我可以生成固定大小的圖像窗口(例如1024x4000),並生成下一個「即時」的圖像窗口。但是我想考慮其他解決方案,如果它存在的話,因爲我不想用GUI來強調CPU,因爲我會使用很好的執行不同的計算。無論如何,非常感謝你的回答,如果沒有其他解決方案,我會實現這一點。 – alexdemartos 2013-05-12 21:20:36

+1

不能讓你自己的JPanel動態繪製它嗎?這是最簡單的方法...從你的截圖中,我會說這將是非常簡單的,並且快速和高效的內存...... – tilpner 2013-05-12 21:23:06

回答

0

您應該只寫一個自定義Swing組件,並執行 paintComponent(Graphics)方法中的所有繪圖,而不是生成圖像。

檢查this tutorial加速過程。

+0

感謝Hakan,我將嘗試實現這個「即時計算GUI」解決方案。但是我預計會有一些不必要的CPU使用率,因爲我必須每次讀取「midi」位置,讓我們再說5ms,然後意識到需要在屏幕上顯示並繪製它。無論如何,無論我得到什麼結果,我都會在這裏發帖! – alexdemartos 2013-05-14 09:58:25

+0

讓我們拭目以待,然後看看結果:) – 2013-05-15 19:11:52