0

JPopupMenuWorld Wind の表示に右クリックを追加する必要があります。World Windの表示は ですJPanel。内部クラスのメンバ変数とメソッドをApplicationTemplate.AppPanelWorld Wind のサンプルApplicationTemplateクラスからコピーし、WW 表示が必要な GUI に貼り付け、this.add(component)参照をコピーしたコードから に変更しましたmyJPanel.add(component)

ポップアップメニューがないことを除けば、うまく機能しました。World Wind ディスプレイをアプリケーションに組み込み、アプリケーションのダイアログから制御しています。

JPopupMenu世界の風表示のにを追加しJPanelたら、まったく表示されないようです。右クリックしても何も表示されません。BorderLayoutこれは、World Wind ディスプレイの上のコンポーネントにメニューをアタッチできるため (WWD は中央にあり、他のコンポーネントはその北にあります)、代わりにメニューを非表示にするヘビーウェイトと軽量の Java コンポーネントの問題ではないと思います。 World Wind ディスプレイのスペースに隠れることなく喜んで入ります。安全のために、私が行ったメインクラスの静的イニシャライザトップに と を設定しJPopupMenuましsetLightWeightPopupEnabled(false)JPopupMenu.setDefaultLightWeightPopupEnabled(false)

World Wind ディスプレイを含む にMouseListener接続してテストを行いましたが、どのイベントもトリガーされません。したがって、 を に追加するのではなく、 wwd オブジェクトの特定のサブコンポーネントに追加する必要があると考えられます。wwd オブジェクト自体には、ポップアップ メニューを追加するためのメソッドがないようです。また、wwd のメソッドに「getGLCanvas」のようなものはありません。ここで正しい軌道に乗っている場合、どのコンポーネントにメニューを追加する必要がありますか?また、そのコンポーネントにアクセスするにはどうすればよいですか?JPanelMouseListenerJPopupMenuJPanel

私の質問は非常に単純です。どうすればJPopupMenuWorld Wind ディスプレイに入ることができますか?

第二に、この質問は、ディスプレイに を表示することについても同じことを求めてMouseListenerいますが、それに対する答えは、ディスプレイに を表示することの答えから外れると思いJPopupMenuます。

以下は、私が挿入した World Wind テンプレート コードとそれに加えた変更です。他の場所で別のクラスが を使用して、World Wind 表示を含む をアプリケーションのユーザー インターフェイスgetComponent()に追加します。JPanelなんらかの意味がある場合に備えて、コメントアウトしたデフォルトの World Wind のものを残しました。レイヤー名の String[] のループは、マップと単位スケールのみを簡単に表示するための方法にすぎませんでした。JPopupMenuコードはコンストラクターの途中にあります。乱雑なコードで申し訳ありませんが、最良の支援のために、そのままの状態で表示する必要があると思いました。

class MyClass
{

protected JComponent component;
public JComponent getComponent() { return component; }

protected WorldWindow wwd;
protected StatusBar statusBar;
protected ToolTipController toolTipController;
protected HighlightController highlightController;

MyClass()
{
    boolean includeStatusBar = false;
    component = new JPanel(new BorderLayout());

    this.wwd = this.createWorldWindow();
    ((Component) this.wwd).setPreferredSize(new Dimension(200,200));//canvasSize);

    // Create the default model as described in the current worldwind properties.
    Model m = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
    this.wwd.setModel(m);

    // Setup a select listener for the worldmap click-and-go feature
//            this.wwd.addSelectListener(new ClickAndGoSelectListener(this.getWwd(), WorldMapLayer.class));

    component.add((Component) this.wwd, BorderLayout.CENTER);
    if (includeStatusBar)
    {
        this.statusBar = new StatusBar();
        component.add(statusBar, BorderLayout.PAGE_END);
        this.statusBar.setEventSource(wwd);
    }

    // Add controllers to manage highlighting and tool tips.
//            this.toolTipController = new ToolTipController(this.getWwd(), AVKey.DISPLAY_NAME, null);
//            this.highlightController = new HighlightController(this.getWwd(), SelectEvent.ROLLOVER);

    java.util.List<String> desiredLayers = Arrays.asList(
        new String[] { "Blue Marble May 2004", /*"i-cubed Landsat",*/ "Scale bar"
        });
    for(Layer layer : getWwd().getModel().getLayers())
    {
        if(desiredLayers.contains( layer.getName() ))
        {
            System.out.println("INCLUDE " + layer.getName());
            layer.setEnabled(true);
        }
        else
        {
            System.out.println("EXCLUDE " + layer.getName());
            layer.setEnabled(false);
        }
    }


    JMenu menuZoom = new JMenu("Zoom");
    JMenuItem menuZoom_1028 = new JMenuItem("1028");
    menuZoom.add(menuZoom_1028);
    JMenuItem menuZoom_512 = new JMenuItem("512");
    menuZoom.add(menuZoom_512);
    JMenuItem menuZoom_256 = new JMenuItem("256");
    menuZoom.add(menuZoom_256);
    JMenuItem menuZoom_128 = new JMenuItem("128");
    menuZoom.add(menuZoom_128);
    JMenuItem menuZoom_64 = new JMenuItem("64");
    menuZoom.add(menuZoom_64);
    JMenuItem menuZoom_32 = new JMenuItem("32");
    menuZoom.add(menuZoom_32);
    JPopupMenu rclickMenu = new JPopupMenu();
    rclickMenu.add(menuZoom);
    component.setComponentPopupMenu(rclickMenu);

    menuZoom.getPopupMenu().setLightWeightPopupEnabled(false);

    component.addMouseListener(new MouseListener()
    {
        @Override
        public void mouseClicked(MouseEvent e)
        {
            System.out.println("mouseClicked");
        }

        @Override
        public void mousePressed(MouseEvent e)
        {
            System.out.println("mousePressed");
        }

        @Override
        public void mouseReleased(MouseEvent e)
        {
            System.out.println("mouseReleased");
        }

        @Override
        public void mouseEntered(MouseEvent e)
        {
            System.out.println("mouseEntered");
        }

        @Override
        public void mouseExited(MouseEvent e)
        {
            System.out.println("mouseExited");
        }
    });
}

protected WorldWindow createWorldWindow()
{
    return new WorldWindowGLCanvas();
}

public WorldWindow getWwd()
{
    return wwd;
}

public StatusBar getStatusBar()
{
    return statusBar;
}
}
4

1 に答える 1