2011-11-07 19 views
4

我正在編寫一個Scala程序來管理數據庫,並將所有數據繪製到二維ArrayBuffer中,其中第0行是列名稱,後續行包含表中每個條目的信息。 當試圖把它放到表中時,ho = w是否會分配Column標題?如何配置Scala表中的列名?

語法建議將不勝感激。

僞代碼:

Data=ArrayBuffer() 
Data(0)={"Name","Birthday","ID"} 
Data(1)={"Bob", "07/19/1986", "2354"} 
Data(2)={"Sue", "05/07/1980", "2355"} 
Data(3)={"Joe", "08/12/1992", "2356"} 
Data(4)={"Jim", "11/20/1983", "2357"} 

我希望把這個變成一個表,其中的數據(0)描述了列標題,以及後續行描述表中的行,但我無法弄清楚如何設置行標題。

+0

您可能需要爲此問題添加其他信息。我認爲即使你想要做的僞代碼也可能有幫助。 – huynhjl

回答

0

假設您正在討論swing,如果您將表放在滾動窗格中並根據顯示的數組緩衝區創建表模型,則默認情況下,第一行將作爲列名稱。

+0

不知道如何去建立一個表模型。我這樣做的一些微弱的嘗試導致了很多代碼未運行綜合徵。這在2.8中的語法是什麼? \ n現在,我只是更新for循環中的單元格,因爲我無法找到更新表格中數據的更簡單的方法,但這仍然給我留下了「A」,「B」 ,「C」,「D」等我列標題 – Museless

+0

你可以參考[此代碼](https://github.com/asinghal/SlateIDE/blob/master/src/net/slate/gui/ResultsTabbedPane。斯卡拉)的一些例子。 – aishwarya

3

把表中的數據,最簡單的方法是使用它的構造:

new Table (rowData: Array[Array[Any]], columnNames: Seq[_]) 

這裏稍微棘手的事情是數組不是協變(見Why doesn't the example compile, aka how does (co-, contra-, and in-) variance work?),這意味着Array[String]Array[Any]的子類型。所以你需要一種將其中一種變爲另一種的方式:map完成這項工作。

另外,要顯示列名,您需要將表放入ScrollPane。

import swing._ 
import collection.mutable.ArrayBuffer 

object Demo extends SimpleSwingApplication { 

    val data = ArrayBuffer(
    Array("Name","Birthday","ID"), 
    Array("Bob", "07/19/1986", "2354"), 
    Array("Sue", "05/07/1980", "2355") 
) 

    def top = new MainFrame { 
    contents = new ScrollPane { 
     contents = new Table(
     data.tail.toArray map (_.toArray[Any]), 
     data.head 
    ) 
    } 
    } 
} 

會給你一個表:

table

編輯:你也可以使用一個投:data.tail.toArray.asInstanceOf[Array[Array[Any]]],這比映射更有效。

+0

所以,這聽起來像我想要的,但我使用ArrayBuffers而不是陣列陣列...我不知道如果這是問題,但是當我輸入代碼來顯示我的緩衝區時,我得到了一個ArrayIndexOutOfBounds錯誤,我無法理解,但我不確定如何從該代碼中繪製。這是我使用ArrayBuffers,還是我缺少其他東西? – Museless

+0

@Museless上面的代碼與ArrayBuffers一樣可以工作,儘管ArrayBuffers的重點在於它們是可擴展的,所以沒有必要將它們用於固定數量的列。上面的代碼沒有辦法給你一個越界的錯誤。異常應該告訴你它正在發生哪一行。 –