1

WorldWindowGLJPanel のインスタンスを JFrame に追加し、それを削除して再度追加すると、パネルの GL ビューポートが再計算され、使用可能なスペースよりもはるかに小さい Rectangle になります。寸法は一貫して 116x26 のようです。これは、フレームがほとんど空白になり、フレームの左下隅に WorldWind パネルの小さな部分が表示されるだけであることを意味します。フレームのサイズを変更するとビューポートがリセットされるように見えますが、プログラムでビューポートをリセットする方法はありますか?

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import gov.nasa.worldwind.Model;
import gov.nasa.worldwind.WorldWind;
import gov.nasa.worldwind.avlist.AVKey;
import gov.nasa.worldwind.awt.WorldWindowGLJPanel;

public class WorldWindTest {

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final WorldWindowGLJPanel wwPanel = new WorldWindowGLJPanel();
        Model wwModel = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
        wwPanel.setModel(wwModel);
        JPanel buttons = new JPanel(new FlowLayout());
        buttons.add(new JButton(new AbstractAction("Re-add WorldWind panel") {
            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                frame.getContentPane().remove(wwPanel);
                frame.getContentPane().add(wwPanel);
                frame.getContentPane().repaint();
            }
        }));
        frame.getContentPane().add(buttons, BorderLayout.NORTH);
        frame.getContentPane().add(wwPanel);
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                frame.setVisible(true);
            }
        });
    }

}
4

1 に答える 1