Java 在TopComponent中动态添加组件赢得';不显示
在使用Netbean平台7.3编程时,我遇到了一个非常奇怪的问题,这是基于Geertjan关于如何通过actions()添加小部件的博客示例: 我创建了一个TopComponent,希望它显示一个自定义滚动窗格,在自定义窗格中呈现图像。我的自定义滚动窗格在基本Java Swing应用程序中运行良好 我试图在TopComponent的构造函数中显示滚动窗格,只是为了测试:Java 在TopComponent中动态添加组件赢得';不显示,java,swing,refresh,netbeans-platform,Java,Swing,Refresh,Netbeans Platform,在使用Netbean平台7.3编程时,我遇到了一个非常奇怪的问题,这是基于Geertjan关于如何通过actions()添加小部件的博客示例: 我创建了一个TopComponent,希望它显示一个自定义滚动窗格,在自定义窗格中呈现图像。我的自定义滚动窗格在基本Java Swing应用程序中运行良好 我试图在TopComponent的构造函数中显示滚动窗格,只是为了测试: public TopComponent() { super(); setBackg
public TopComponent()
{
super();
setBackground( Color.BLUE );
initComponents();
setName( Bundle.CTL_Scanmage2TopComponent() );
setToolTipText( Bundle.HINT_Scanmage2TopComponent() );
setImage( ImageHandlerFactory.getImageHandler( new File( ... ) ));
}
还有setImage方法ImageHandler
是我的一个类,用于描述图像:
public void setImage( ImageHandler handler ) throws Exception
{
pane = new Scrollpane(); // pane is a class field of type : Scrollpane
pane.setImage( handler ); // thats OK, the tiled image is loaded, etc.
setLayout( new BorderLayout() );
add( pane , BorderLayout.CENTER , 0 );
pane.revalidate(); // does not work
pane.repaint(); // does not work
}
一切正常,netbeans应用程序启动,只有当从构造函数或ComponentOpen调用setImage时,映像才会在应用程序中显示良好
现在,我将通过一个菜单加载图像,我实现了一个接口,一个服务提供商,一切正常
从菜单操作中,我使用查找来查找所有具有通过该操作生成的ImageHandler加载图像的方法的对象
然后,通过查找调用setImage(…)
什么都不做,我的TopComponent绝对拒绝显示任何内容
我尝试使用流程布局
,因此在TopComponent的顶部显示了一个小东西(大约3x3像素)
问题是:如何强制TopComponent绘制我放入其中的Scrollpane(扩展JScrollpane)
我试图重新验证/验证/失效/重新绘制/。。。TopComponent,滚动窗格,但不可能
有什么想法吗
谢谢
--编辑1/重新编辑:删除无用部分--
Geertjan的应用程序仍然可以正常工作,但是从按钮的操作调用setImage方法却没有任何作用
以下是此按钮的代码:
public void actionPerformed( ActionEvent e )
{
Lookup.Result<MyInterface > controllers = Lookup.getDefault().lookupResult( MyInterface .class );
Collection<? extends MyInterface > controllersColl = controllers.allInstances();
for( MyInterface c : controllersColl )
{
c.setImage( imgH ); // debug shows it passes heres and expected internal job is done
}
}
public void actionPerformed(ActionEvent e)
{
Lookup.Result controllers=Lookup.getDefault().lookupResult(MyInterface.class);
Collection我认为您无法通过@ServiceProvider获得打开的TopComponent。我认为您将获得TopComponent的另一个实例
为了测试,我在OpenFileActionWhichContext.actionPerformed中添加了这一行((ImageDisplayerCapability)MyModuleTopComponent.getRegistry().getActivated()).setImage(imgH);
,它显示了一些东西(但我不确定它是否正确)。为了更快地获得更好的帮助,发布一条消息。出于某些原因(代码卷和代码某些部分的保密性),我无法发布完整的SSCCE,这让我非常担心。因此,如果您告诉我要查找的方向,我可以发布部分代码。另外,感谢您的编辑。只需显示问题所需的部分。但请将它们制作成SSCCE。我将尝试尽快完成。感谢您关注问题。@AndrewThompson我添加了一些代码来显示问题,Geertjan的例子和我的小模型与这个问题密切相关。