Java WorldWind图层管理器面板为空
我正在开发一个WorldWind应用程序,我想在我自己的应用程序中重用LayerAndElevationManagerPanel示例类。我试图将其放入一个对话框中,用户可以根据需要打开该对话框,但是当显示该对话框时,面板的滚动窗格为空。这个例子可以重用吗 下面是WorldWind的示例代码Java WorldWind图层管理器面板为空,java,swing,worldwind,Java,Swing,Worldwind,我正在开发一个WorldWind应用程序,我想在我自己的应用程序中重用LayerAndElevationManagerPanel示例类。我试图将其放入一个对话框中,用户可以根据需要打开该对话框,但是当显示该对话框时,面板的滚动窗格为空。这个例子可以重用吗 下面是WorldWind的示例代码 /* * Copyright (C) 2013 United States Government as represented by the Administrator of the * National
/*
* Copyright (C) 2013 United States Government as represented by the Administrator of the
* National Aeronautics and Space Administration.
* All Rights Reserved.
*/
package gov.nasa.worldwindx.examples.layermanager;
import gov.nasa.worldwind.WorldWindow;
import javax.swing.*;
import java.awt.*;
/**
* Combines the layer manager and elevation model manager in a single frame.
*
* @author tag
* @version $Id$
*/
public class LayerAndElevationManagerPanel extends JPanel
{
protected LayerManagerPanel layerManagerPanel;
protected ElevationModelManagerPanel elevationModelManagerPanel;
public LayerAndElevationManagerPanel(WorldWindow wwd)
{
super(new BorderLayout(10, 10));
this.add(this.layerManagerPanel = new LayerManagerPanel(wwd), BorderLayout.CENTER);
this.add(this.elevationModelManagerPanel = new ElevationModelManagerPanel(wwd), BorderLayout.SOUTH);
}
public void updateLayers(WorldWindow wwd)
{
this.layerManagerPanel.update(wwd);
}
public void updateElevations(WorldWindow wwd)
{
this.elevationModelManagerPanel.update(wwd);
}
public void update(WorldWindow wwd)
{
this.updateLayers(wwd);
this.updateElevations(wwd);
}
}
这是我的密码
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import gov.nasa.worldwind.WorldWindow;
import gov.nasa.worldwindx.examples.layermanager.LayerAndElevationManagerPanel;
public class LayerDialog extends JDialog
{
private final JPanel contentPanel = new JPanel();
/**
* Create the dialog.
*/
public LayerDialog(WorldWindow wwd)
{
setTitle("Layer Manager");
setBounds(100, 100, 386, 360);
getContentPane().setLayout(new BorderLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportBorder(null);
scrollPane.add(new LayerAndElevationManagerPanel(wwd));
GroupLayout gl_contentPanel = new GroupLayout(contentPanel);
gl_contentPanel.setHorizontalGroup(
gl_contentPanel.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPanel.createSequentialGroup()
.addContainerGap()
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 344, GroupLayout.PREFERRED_SIZE)
.addContainerGap(6, Short.MAX_VALUE))
);
gl_contentPanel.setVerticalGroup(
gl_contentPanel.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPanel.createSequentialGroup()
.addContainerGap()
.addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 257, Short.MAX_VALUE)
.addContainerGap())
);
contentPanel.setLayout(gl_contentPanel);
{
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
JButton okButton = new JButton("OK");
okButton.setActionCommand("OK");
buttonPane.add(okButton);
getRootPane().setDefaultButton(okButton);
}
{
JButton cancelButton = new JButton("Cancel");
cancelButton.setActionCommand("Cancel");
buttonPane.add(cancelButton);
}
}
}
}
这里是一个摘录自主窗口
public MainWindow(App a)
{
WorldWindowGLCanvas wwd = new WorldWindowGLCanvas();
JMenuItem mntmLayers = new JMenuItem("Layers");
mntmLayers.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
try
{
LayerDialog dialog = new LayerDialog(wwd);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
});
}
由于这里没有
main
-方法,您如何显示对话框窗口?当您将其作为参数输入时,WorldWindow wwd
是否也可能为空?最后两个括号之前的6个括号既无用又容易混淆,应该删除them@hamena314添加了用于实例化的代码。用牙套道歉。这是从WindowBuilder生成的代码。没问题,Eclipse等会忽略括号。他们刚开始时很困惑。调用actionPerformed()
时,会出现一个新的LayerDialog=newlayerDialog(wwd)代码>被创建。可能是wwd
为空/空?您能否显示一下,您在哪里创建了WorldWindow wwd
?WorldWindow
是WorldWind使用的应用程序级对象。它保存了应用程序的大部分数据。可以说,如果WorldWind为空,我们将面临更大的问题。让我们假设wwd!=空
。创建一个WorldWindow
实例,启动我的应用程序,并将其传递给我的应用程序的MainWindow
,当被触发时,MainWindow将其传递给LayerDialog
。在这种情况下,LayerAndElevationManager使用wwd
显示所有全局图层,并允许用户选择要启用的图层。是的,但是由于LayerAndElevationManager面板
使用wwd
作为参数,并且您的对话框为空,因此不能假定wwd!=空
。你绝对应该检查一下,不要假设。。。查看LayerDialog=newlayerDialog(wwd)中的wwd
,仍然非常有帮助代码>已创建get。必须有一些行,如worldwindowWWD=newworldwindown代码>或者什么的。