将 jzy3d.canvas 转换为 awt.component

2024-02-08

我需要将 jzy3d 画布转换为 java.awt.component,我想使用 JCombobox 和按钮在框架中显示图表,但是当我想将画布转换为组件时,程序被删除。谢谢您的回答。我已经尝试过this https://stackoverflow.com/questions/12948842/how-to-add-jzy3d-chart-to-jframe-without-making-a-new-one别帮我。

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: 
org.jzy3d.plot3d.rendering.canvas.VoidCanvas cannot be cast to 
java.awt.Component
    at cz.bia.Launcher.lambda$setComponents$0(Launcher.java:63)
    at java.awt.Button.processActionEvent(Button.java:409)
    at java.awt.Button.processEvent(Button.java:377)

启动器.java:

package cz.bia;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import cz.bia.model.IFunction;
import cz.bia.Yao.*;

import java.awt.*;

public class Launcher extends JFrame {
    IFunction[] funs = {new FirstYao(), new SecondYao(), new ThirdYao(), new FourthYao(), new FifthYao(), new SixthYao(), new SeventhYao(), new EighthYao(), new NinthYao(), new TenthYao(),
            new EleventhYao(), new TwelfthYao(), new ThirteenthYao(), new FourthteenthYao(), new FifteenthYao(), new SixteenthYao(), new SeventeenthYao(), new EighteenthYao(),
            new NineteenthYao(), new TwentiethYao(), new TwentyFirstYao()};

    String[] funsToMenu = {"1 Yao", "2 Yao", "3 Yao", "4 Yao", "5 Yao", "6 Yao", "7 Yao", "8 Yao", "9 Yao", "10 Yao", "11 Yao", "12 Yao", "13 Yao", "14 Yao NI",
            "15 Yao NI", "16 Yao", "17 Yao", "18 Yao", "19 Yao NI", "20 Yao NI", "21 Yao NI" };


    private JPanel contentPane;;
    JPanel southPanel;
    JPanel leftPanel;
    private ChartModel chart;

    public static void main(String[] args) throws Exception {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    new Launcher().setVisible(true);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Launcher() throws Exception {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,600);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 50, 5));
        leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));
        setComponents();
        setContentPane(contentPane);
        setContentPane(southPanel);
        setContentPane(leftPanel);

    }

    private void setComponents() {
        Button drawIt = new Button("Draw it");
        JComboBox functions = new JComboBox(funsToMenu);
        functions.setForeground(Color.gray);
        functions.setFont(new Font("Arial", Font.PLAIN, 14));
        functions.setMaximumRowCount(21);
        leftPanel.add(functions);
        drawIt.setVisible(true);
        chart = new ChartModel(funs[functions.getSelectedIndex()]);
        leftPanel.add(drawIt);
        drawIt.addActionListener( e -> {
            add( (Component) chart.getChart().getCanvas());
        });

    }
}

ChartMode.java:

package cz.bia;

import java.awt.Component;
import cz.bia.model.IFunction;
import org.jzy3d.chart.Chart;
import org.jzy3d.colors.Color;
import org.jzy3d.colors.ColorMapper;
import org.jzy3d.colors.colormaps.ColorMapRainbow;
import org.jzy3d.maths.Range;
import org.jzy3d.plot3d.builder.Builder;
import org.jzy3d.plot3d.builder.Mapper;
import org.jzy3d.plot3d.builder.concrete.OrthonormalGrid;
import org.jzy3d.plot3d.primitives.Shape;
import org.jzy3d.plot3d.rendering.canvas.Quality;
/**
 * Created by Jakub on 11.10.2016.
 */
public class ChartModel extends Component {


    private IFunction function;
    private Chart chart;
    private Mapper mapper;
    public  Shape surface;

    public ChartModel(IFunction function){
        this.function = function;
        init();
    }

    public void init(){
        Range range = new Range(-100,300);
        int steps = 50;

        surface = Builder.buildOrthonormal(new OrthonormalGrid(range, steps, range, steps), this.getMapper(this.function));
        surface.setColorMapper(new ColorMapper(new ColorMapRainbow(), surface.getBounds().getZmin(), surface.getBounds().getZmax(), new Color(1, 1, 1, .5f)));
        surface.setFaceDisplayed(true);
        surface.setWireframeDisplayed(true);
        surface.setWireframeColor(Color.BLACK);
        this.chart = new Chart(Quality.Advanced, "swing");
        chart.getScene().getGraph().add(surface);
    }

    private Mapper getMapper(IFunction function){
        Mapper mapper = new Mapper() {
            public double f(double x, double y) {
                double [] param = {x,y};
                return function.calculate(param);
            }
        };
        this.mapper = mapper;
        return mapper;
    }

    public Chart getChart() {
        return chart;
    }
    public void setChart(Chart chart) {
        this.chart = chart;
    }

}

这对我有用。简单的解决方案,当我将 jzy3d 画布添加到我的画布并将其放入面板中时。

Chart chart = AWTChartComponentFactory.chart(Quality.Advanced, IChartComponentFactory.Toolkit.swing);   
ChartScene scene = chart.getScene();
AWTCameraMouseController controller = new AWTCameraMouseController(chart);
Component canvas = (Component) chart.getCanvas();
canvas.addMouseListener(controller);
canvas.addMouseMotionListener(controller);
canvas.addMouseWheelListener(controller);
centerPanel.add(canvas, BorderLayout.CENTER);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 jzy3d.canvas 转换为 awt.component 的相关文章

随机推荐

  • 如何为 Elastic Beanstalk 上的特定容器设置文件夹权限

    我在为 Elastic Beanstalk 上的 Web 文件夹设置权限时遇到问题 我在一个实例中使用自定义 docker 映像运行多个容器 apache php mysql memcached 等 对于容器 apache php 我将包含
  • 是否可以在 UIScrollView 内部放大和缩小 UIImageView,但使用自动布局保持居中?

    长话短说 我正在尝试构建类似于 Photos app 的功能 我有一个 UIScrollView 其中有一个 UIImageView 设置在 Storyboard 中 缩放可以工作 但我无法使其保持居中 在我所有基于框架的滚动视图实现中 我
  • .NET Core 捕获中间件中的 Json 反序列化错误

    我确信我错过了一些明显的东西 是否可以在 NET Core的默认中间件 反序列化器中处理JSON反序列化错误 我需要确保特定值是 JSON 原语而不是对象 数组 如果它不是原语 我想在请求到达控制器之前终止请求并返回适当的状态代码 控制器
  • Django CharField 没有空字符串

    有没有办法制作一个不接受空字符串的 CharField 或 TextField 我正在尝试使用blank False但它不工作 class Foo models Model title models CharField max length
  • iOS VoiceOver 在更改到下一个元素之前等待元素完成阅读

    我有一个按钮可以切换显示的标签 class ViewController UIViewController IBOutlet weak var label UILabel IBOutlet weak var button UIButton
  • Metal 内核在新款 MacBook Pro(2016 年末)GPU 上运行不正常

    我正在开发 macOS 项目 该项目使用 Swift 和 Metal 在 GPU 上进行图像处理 上周 我收到了新的 15 英寸 MacBook Pro 2016 年末 并注意到我的代码有一些奇怪的地方 应该写入纹理的内核似乎没有这样做 经
  • iOS 10.0 语音识别错误 kAFAssistantErrorDomain

    我尝试使用语音识别如下 let urlpath Bundle main pathForResource myvoice2 ofType m4a let url URL URL init fileURLWithPath urlpath let
  • .NET 多线程、易失性和内存模型

    假设我们有以下代码 class Program static volatile bool flag1 static volatile bool flag2 static volatile int val static void Main s
  • 关于全局/范围的 Ruby 方法查找

    我试图完全理解 Ruby 如何定位方法 符号 但当它涉及多个级别时 尤其是全局 文件范围 我感到很困难 当在类上显式调用方法时 有很多关于搜索类及其包含的模块的顺序的说明 因此确切地说是什么super每种情况下都会调用 但是当没有显式调用方
  • 如何在循环中命名和创建文件

    在 C 中 我想创建并打开文本文件以写入数据 但问题是我想即时命名文件 例如 FILE ptr for i 0 i lt 1000 i fopen s ptr i txt w operations to fill data into fil
  • JSHint 选项默认值的完整列表?

    我在哪里可以获得 JSHint 默认选项的完整列表 我尝试在网上搜索但找不到任何东西 编辑 我的意思是默认列表values for all选项 以防不清楚 你可以看看boolOptions valOptions and invertedOp
  • HQL 错误:连接所需的路径

    我一直在尝试这个查询的变体 但似乎无法实现这一点 我还参考了这篇文章 预计加入路径 休眠错误 https stackoverflow com questions 5759707 path expected for join nhiberna
  • C# 发送带有附件的电子邮件(图片)

    我的方法使用 SMTP 中继服务器发送电子邮件 一切正常 电子邮件已发送 除了附件 图像 以某种方式压缩 不存在并且无法从电子邮件中检索之外 该方法如下所示 public static bool SendEmail HttpPostedFi
  • GitHub API - 如何确定文件是否实际上是符号链接?

    通过 GitHub API 查询符号链接时 如果符号链接指向文件而不是目录 我会得到不同的结果 后者表现得更好 因为它会返回 type symlink 作为其 JSON 的一部分 而前者返回 type file 例子文件符号链接 https
  • 动态插入 3 个图像到水平滚动视图或 Viewpager

    下面显示了我正在寻找的图像 目前我正在使用视图寻呼机和圆圈指示器 在视图页面中 它仅显示单个图像 我想要在一个viewpager中显示三张图像 如图所示 当我滑动该页面时 再次从服务器加载三个不同的图像 并在下面显示文本 这个怎么做 对此有
  • 使用已知和未知字段反序列化 json

    给出以下 json 结果 默认的 json 结果有一组已知的字段 id 7908 name product name 但可以使用其他字段进行扩展 在本例中 unknown field name 1 and unknown field nam
  • jQuery - 选择具有特定样式的子项

    我不知道如何在以下示例中选择第一个跨度 div class sp span abc span span xyz span div 我尝试过使用这个 但没有成功 div sp span visibility hidden not work t
  • 使用 XCode 4.5 运行 iOS 5.1 模拟器时出现问题

    我最近将 XCode 升级到了 4 5 版本 现在当我尝试开发 iOS 5 0 5 1 的应用程序时遇到了问题 我开发了一个简单的 iPad 游戏 用户需要将图像与相应的单词进行匹配 所有这些项目都存储在 UIImageView 中 如果相
  • 适用于 iOS 8 和 iOS 9 的自定义 Unwind Segue

    我的问题是 如何让以下自定义展开转场在 iOS 9 之前版本的设备以及运行 iOS 9 的设备上工作 我有一个显示视图控制器的自定义 Segue 然后有一个相应的自定义展开 Segue 这段代码在 iOS 8 中运行良好 是通过创建 UIS
  • 将 jzy3d.canvas 转换为 awt.component

    我需要将 jzy3d 画布转换为 java awt component 我想使用 JCombobox 和按钮在框架中显示图表 但是当我想将画布转换为组件时 程序被删除 谢谢您的回答 我已经尝试过this https stackoverflo