월드 윈드 디스플레이에 마우스 오른쪽 버튼 JPopupMenu
을 추가해야합니다. 월드 윈드 디스플레이는 JPanel
입니다. 꽤 많이 방금 월드 변수의 예제 인 ApplicationTemplate
클래스의 내부 변수 인 ApplicationTemplate.AppPanel
의 멤버 변수와 메서드를 복사하여 GUI에 붙여 넣었고 this.add(component)
참조를 복사 된 코드에서 myJPanel.add(component)
으로 변경했습니다.월드 윈 도우에서 JPopupMenu 가져 오기
팝업 메뉴가 부족한 것 외에는 큰 효과가있었습니다. 내 응용 프로그램에 월드 윈드 (World Wind) 디스플레이가 임베드되어 있으며 응용 프로그램의 대화 상자에서이를 제어하고 있습니다.
세계 풍력 디스플레이의 JPanel
에 JPopupMenu
을 추가 한 후 전혀 표시되지 않는 것 같습니다. 마우스 오른쪽 버튼을 클릭하면 아무 것도 나타나지 않습니다. 이 메뉴는 World Wind 디스플레이 (WWD는CENTER, 다른 구성 요소는 북쪽에 있음) 위의 구성 요소에 메뉴를 첨부 할 수 있기 때문에 메뉴를 숨기는 가벼운 Java 구성 요소 문제와는 달리 중량급이라고 생각하지 않습니다. 메뉴가 행복하게 월드 윈드 디스플레이의 공간에 들어간다. 그냥 안전을 위해, 내가 설정 한 JPopupMenu
의 setLightWeightPopupEnabled(false)
와 정적 초기화 나는 세계 풍력 디스플레이를 포함하는 JPanel
에 부착 된 MouseListener
와 테스트를했다
JPopupMenu.setDefaultLightWeightPopupEnabled(false)
했다 메인 클래스의 상단, 그리고 아무도에서 MouseListener
이벤트가 트리거됩니다. 따라서 내 생각에 JPanel
에 JPopupMenu
을 추가하지 말고 wwd 개체의 특정 하위 구성 요소에 추가해야합니다. wwd 객체 자체에는 팝업 메뉴를 추가하는 메소드가 없으므로 wwd 메소드에서 "getGLCanvas"와 같은 것을 보지 못합니다. 여기서 올바른 길을 가고 있다면 메뉴를 추가 할 구성 요소는 무엇이며 해당 구성 요소에 액세스하려면 어떻게해야합니까?
제 질문은 매우 간단합니다. 또는 어떻게 보일지 : 을 월드 윈드 디스플레이에 가져 오려면 어떻게해야합니까?
이 질문은 디스플레이에 MouseListener
을 가져 오는 것과 동일하게 시작되지만 그 대답은 디스플레이에서 JPopupMenu
이되는 대답에서 제외된다고 가정합니다.
다음은 내가 삽입 한 월드 윈드 템플릿 코드와 그에 대한 수정 내용입니다. 다른 클래스에서는 getComponent()
을 사용하여 응용 프로그램의 사용자 인터페이스에 World Wind 디스플레이가 포함 된 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;
}
}