2012-12-20 146 views
0

這個問題不一定是特定於JTabbedPane,但這是我碰到它的地方。這個想法是,你有一個優先級列表Priority[]根據你想看到輸出製表符被渲染。每個選項卡可以有多個與給定優先級關聯的對象,並且我希望在爲其檢測到對象的第一個時生成選項卡。這些對象是由外部服務生成的,它們可以以任何順序出現。所以,假設您有JTabbedPane - 保持標籤順序

[Low, Medium, Warning, Alert, Crash] 

作爲您的優先級列表。現在,這是我想要生成的

[] -> [] 
[Alert] -> [Alert] 
[Alert, Alert] -> [Alert] 
[Alert, Alert, Low] -> [Low, Alert] 
[Alert, Alert, Low, Medium] -> [Low, Medium, Alert] 

RHS是製表符的順序,LHS是未來的優先事項。任何想法如何我可以動態地實現這一點?

回答

1

事情是這樣的:

List<String> priorities = Arrays.asList("Low", "Medium", "Warning", "Alert", "Crash"); 
Map<List<String>> data = new LinkedHashMap<List<String>>(); 
for (String priority : priorities) 
    data.put(priority, new ArrayList<String>()); 

... 

傳入數據:

String priority = ...; 

List<String> list = data.get(priority); 
list.add("my new data"); 

if (list.size() == 1) { 
    //insert tab 
    int index = 0; 
    int priorityIndex = priorities.indexOf(priority); 
    while (priorityIndex > priorities.indexOf(tabbedPaned.getTitleAt(index))) { 
    index++; 
    } 
    tabbedPane.insertTab(priority, ... , index); //includes index where to insert the tab 
} 

//update tabs 
... 
+0

是的,我明白了,我如何找到放置它的索引?這是我失蹤的整個招數 – Bober02

+0

我認爲你應該優化你的問題,然後索要索引。有幾種方法,一種簡單的方法是使用標籤的標題。只是將該信息存儲在單獨的數據結構中。更新我的回答 –

+0

現在索引@ Bober02 –

2

您可以調用JTabbedPane上的insertTab方法將新選項卡插入指定的位置。

insertTab(title, icon, panel, title, index); 

因此,您可以遍歷每個選項卡並根據優先級將其插入到指定索引處。

+0

什麼叫 「循環通過標籤」 是什麼意思? – Bober02

+0

不確定您的要求是什麼,但是可以隨時添加標籤或將它們全部一次性添加,例如當頁面加載? – maloney