背景信息:我们正在设计一个基于Netbeans平台RCP的Lua IDE。我们已经实现了一个构建系统,允许用户轻松启用/禁用文件并添加别名以在构建时重命名文件。我们认为在UI观点中有必要在项目逻辑选项卡中的自定义节点旁边有复选框,以简化启用和禁用文件
问题:我们希望用Outline视图替换默认的BeanTreeView,因为默认视图不支持查找中的CheckableNode。我们不确定最好的方法,但我们设计的解决方案似乎是错误的方法。该组件未正确调整大小,并且节点在启动时不会像在本机BeanTreeView中那样自动扩展。
实现细节:我们创建了一个代理DataObject节点委托的FilterNode。我们还将自己的属性集添加到查找中,并添加了一个实现CheckableNode的类(因此大纲视图左侧的复选框)。
现在看来,这正是我们想要它的样子:
以下是我们用来安装它的代码:
final String PROJECT_LOGICAL_TAB_ID = "projectTabLogical_tc";
WindowManager.getDefault().invokeWhenUIReady(new Runnable() {
@Override
public void run() {
TopComponent findTopComponent = WindowManager.getDefault().findTopComponent(PROJECT_LOGICAL_TAB_ID);
if (findTopComponent != null) {
Component[] components = findTopComponent.getComponents();
for (Component component : components) {
component.setVisible(false);
}
OutlineView myView2 = new OutlineView("Filename");
Outline outline2 = myView2.getOutline();
outline2.setRootVisible(false);
outline2.setTableHeader(null);
findTopComponent.add(myView2, BorderLayout.CENTER);
findTopComponent.revalidate();
findTopComponent.validate();
findTopComponent.repaint();
}
}
});
提前致谢。
答案 0 :(得分:1)
它对我有用:(win7,Java 7 x64,NB dev(20121214))
public void jbuttonActionPerformance(ActionEvent ev){
TopComponent findTopComponent = WindowManager.getDefault().findTopComponent("OutlineTopComponent"); // TODO add your handling code here:
findTopComponent.setVisible(false);
findTopComponent.removeAll();
findTopComponent.setLayout(new BorderLayout());
OutlineView myView2 = new OutlineView("Filename");
Outline outline2 = myView2.getOutline();
findTopComponent.add(myView2, BorderLayout.CENTER);
findTopComponent.setVisible(true);
findTopComponent.open();findTopComponent.requestActive();
}
日尔卡
答案 1 :(得分:1)
解决方案在于invokeWhenUIReady和转换之间的延迟。
WindowManager.getDefault().invokeWhenUIReady(new Runnable() {
@Override
public void run() {
RequestProcessor.getDefault().post(new Runnable() {
@Override
public void run() {
//We must do this in the awt thread
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TopComponent findTopComponent = WindowManager.getDefault().findTopComponent(PROJECT_LOGICAL_TAB_ID); // TODO add your handling code here:
findTopComponent.setVisible(false);
findTopComponent.removeAll();
findTopComponent.setLayout(new BorderLayout());
OutlineView myView2 = new OutlineView("Filename");
Outline outline2 = myView2.getOutline();
outline2.setRootVisible(false);
outline2.setTableHeader(null);
findTopComponent.add(myView2, BorderLayout.CENTER);
findTopComponent.setVisible(true);
findTopComponent.open();
findTopComponent.requestActive();
}
});
}
//This delay is important!
}, 1000);
}
});