Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在TopComponent中动态添加组件赢得';不显示_Java_Swing_Refresh_Netbeans Platform - Fatal编程技术网

Java 在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

在使用Netbean平台7.3编程时,我遇到了一个非常奇怪的问题,这是基于Geertjan关于如何通过actions()添加小部件的博客示例:

我创建了一个TopComponent,希望它显示一个自定义滚动窗格,在自定义窗格中呈现图像。我的自定义滚动窗格在基本Java Swing应用程序中运行良好

我试图在TopComponent的构造函数中显示滚动窗格,只是为了测试:

  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的例子和我的小模型与这个问题密切相关。