Как добавить диаграмму jzy3d в JFrame, не создавая новую?

Существует следующий код для создания диаграммы jzy3d в JFrame:

public class SurfaceViewerFrame extends IconFrame {

    public SurfaceViewerFrame() {
        setResizable(false);
        //System.loadLibrary("lib/jogl2-rc10/gluegen-rt.jar");
        Settings.getInstance().setHardwareAccelerated(true);
        FormLayout layout=new FormLayout("10px, 300px, 10px", "30px, 10px, 20px, 300px, 10px");
        CellConstraints сс=new CellConstraints();

        JLabel title=new JLabel("Выходная поверхность");


        Mapper mapper = new Mapper() {
            public double f(double x, double y) {
                return x * Math.sin(x * y);
            }
        };
        // Define range and precision for the function to plot
        Range range = new Range(-300, 300);
        int steps = 80;

        // Create the object to represent the function over the given range.
        final Shape surface = Builder.buildOrthonormal(new OrthonormalGrid(range, steps, range, steps), mapper);
        surface.setColorMapper(new ColorMapper(new ColorMapRainbow(), surface.getBounds().getZmin(), surface.getBounds().getZmax(), new Color(1, 1, 1, .5f)));
        surface.setFaceDisplayed(true);
        surface.setWireframeDisplayed(false);

        // Create a chart
        Chart chart = new Chart(Quality.Advanced, "awt");
        chart.getScene().getGraph().add(surface);
        chart.addController(new CameraKeyController());

//      ChartLauncher.openChart(chart, new Rectangle(0, 0, 100, 100), "122");

        JPanel panel=new JPanel();
        panel.add(title, сс.xy(1, 1));
        panel.add((Component)chart.getCanvas(), CC.xy(1, 3));
        add(panel);
        setSize(320, 370);
        setVisible(true);
    }
}

Но я ничего не вижу, если не рекомендую метод openChart(). Если я это сделаю, в моем JFrame будет Chart и новый пустой JFrame; Я не хочу его использовать. Пожалуйста, подскажите, как мне это исправить? Мне нужно показать графику в моем JFrame, не создавая новую.

ОБНОВЛЕНИЕ: Извините, jzy3d — это библиотека для создания 3D-поверхностей. И этот код работает, мне не нужен другой LayoutManager, пожалуйста, прочитайте мой вопрос еще раз.


person malcoauri    schedule 18.10.2012    source источник
comment
Что такое jzy3d? Когда для него нет тега, это хороший намек на ссылку на ссылку на домашнюю страницу.   -  person Andrew Thompson    schedule 18.10.2012


Ответы (1)


Для этого хорошо подходит CardLayout. . Дополнительные сведения и рабочие примеры см. в разделе Как использовать CardLayout.

Другие стратегии объединения данных можно увидеть в/связать с этот ответ на Использование нескольких JFrames, хорошая/плохая практика?.

Обновлять

Чтобы конкретизировать эту идею.

  • Не расширяйте рамку, просто сохраните ссылку на панель.
  • Сделайте панель GridLayout или BorderLayout (любой отдельный компонент, добавленный к любой из них без ограничения, будет растянут до доступной ширины и высоты).
  • Заполните эту панель так же, как в приведенном выше фрагменте кода.
  • Добавьте эту панель на карту CardLayout в основном (и единственном) кадре.
  • (При необходимости) переверните эту карту.
person Andrew Thompson    schedule 18.10.2012
comment
.. и теперь, когда я снова прочитал ваш вопрос, я пришел к тому же основному выводу. Смотрите редактирование. - person Andrew Thompson; 18.10.2012
comment
Вы меня не понимаете; Метод ChartLauncher.openChart(chart, new Rectangle(0, 0, 100, 100), 122) показывает трехмерную поверхность в MY JFrame, но (я не понимаю почему) открывает НОВОЕ ПУСТОЕ окно. - person malcoauri; 18.10.2012
comment
1) Что такое IconFrame? 2) Чтобы быстрее получить помощь, опубликуйте SSCCE. (Обратите внимание, что SSCCE ответит на мой вопрос в пункте 1.) - person Andrew Thompson; 18.10.2012
comment
Извините, IconFrame — это просто JFrame, не волнуйтесь. - person malcoauri; 18.10.2012
comment
Привет, у меня такая же проблема (дисплей пуст). Удалось ли вам запустить его в конце концов? Я использовал BorderLayout без улучшений. Вы пытались использовать свинг вместо awt для Chart()? В моем случае он отображает крошечную часть поверхности, но большая часть панели пуста... - person Matthieu; 11.06.2013
comment
Задайте свой вопрос. Человек, задавший этот вопрос, исчез с ноября и, вероятно, сейчас активно работает в индустрии быстрого питания. - person Andrew Thompson; 11.06.2013