Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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 WorldWind图层管理器面板为空_Java_Swing_Worldwind - Fatal编程技术网

Java 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

我正在开发一个WorldWind应用程序,我想在我自己的应用程序中重用LayerAndElevationManagerPanel示例类。我试图将其放入一个对话框中,用户可以根据需要打开该对话框,但是当显示该对话框时,面板的滚动窗格为空。这个例子可以重用吗

下面是WorldWind的示例代码

/*
 * 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或者什么的。