JPopupMenu
World Wind の表示に右クリックを追加する必要があります。World Windの表示は ですJPanel
。内部クラスのメンバ変数とメソッドをApplicationTemplate.AppPanel
World 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」のようなものはありません。ここで正しい軌道に乗っている場合、どのコンポーネントにメニューを追加する必要がありますか?また、そのコンポーネントにアクセスするにはどうすればよいですか?JPanel
MouseListener
JPopupMenu
JPanel
私の質問は非常に単純です。どうすればJPopupMenu
World 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;
}
}