JTabbedPane - 保持标签的顺序

时间:2012-12-20 16:48:37

标签: java arrays collections jtabbedpane

这个问题不一定特定于JTabbedPane,但这是我遇到它的地方。我们的想法是,您有一个优先级列表Priority[],根据这些优先级,您希望看到要呈现的输出选项卡。每个选项卡可以包含许多与给定优先级相关联的对象,并且我希望在检测到第一个对象时生成该选项卡。对象由外部服务生成,它们可以按任何顺序排列。所以,假设你有

[Low, Medium, Warning, Alert, Crash]

作为您的优先事项列表。现在,这就是我想要生成的内容

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

RHS是标签的顺序,LHS是即将到来的优先事项。我有什么想法可以动态地实现这个目标吗?

2 个答案:

答案 0 :(得分:2)

您可以在JTabbedPane上调用insertTab方法,将新选项卡插入指定位置。

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

因此,您可以遍历每个选项卡并根据优先级将其插入指定的索引。

答案 1 :(得分: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
...