Java Swing 中的图形绘制仅绘制点

2024-02-24

我目前正在开发一个程序,其中随着时间的推移而演变的某些数值变量在每次迭代中显示它们的值。这已经足够好了,但现在我想绘制一个图表来显示它们随时间的演变。 因此,我研究了在 Swing 中绘制图表的代码示例。我的最终代码如下所示:

public class Populus3 extends JPanel
{
    public static void main(String[] args) throws IOException {

        final Populus3 pop = new Populus3();

        JFrame f = new JFrame(); //where I want to plot the graph
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new GraphingData());
        f.setSize(400,400);
        f.setLocation(200,200);
        f.setVisible(true);


        frame = new JFrame("Animation Frame"); //where I'm running animation for another element of the program
        frame.add(pop, BorderLayout.CENTER);
        frame.setSize(graphSize, graphSize);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //insert all sort of things

    }


    public void paint(Graphics g) 
    {
        super.paint(g);
        paintCell(g, 1);
        Toolkit.getDefaultToolkit().sync(); // necessary for linux users to draw  and animate image correctly
        g.dispose();
    }


      public void actionPerformed(ActionEvent e) {
        repaint();
    }



    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        for(int i = 0; i < particleType.length; i++)
            paintCell(g, i);  //a method that draws a small circle for the animation panel
    }



    public static class GraphingData extends JPanel {
        int[] data = {
            21, 14, 18, 03, 86, 88, 74, 87, 54, 77,
            61, 55, 48, 60, 49, 36, 38, 27, 20, 18
        };
        final int PAD = 20;

        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                RenderingHints.VALUE_ANTIALIAS_ON);
            int w = getWidth();
            int h = getHeight();
            // Draw ordinate.
            g2.draw(new Line2D.Double(PAD, PAD, PAD, h-PAD));

            // Draw abcissa.
            g2.draw(new Line2D.Double(PAD, h-PAD, w-PAD, h-PAD));
            double xInc = (double)(w - 2*PAD)/(data.length-1);
            double scale = (double)(h - 2*PAD)/getMax();
            // Mark data points.
            g2.setPaint(Color.red);
            for(int i = 0; i < data.length; i++) {
                double x = PAD + i*xInc;
                double y = h - PAD - scale*data[i];
                g2.fill(new Ellipse2D.Double(x-2, y-2, 4, 4));
            }
        }

        private int getMax() {
            int max = -Integer.MAX_VALUE;
            for(int i = 0; i < data.length; i++) {
                if(data[i] > max)
                    max = data[i];
            }
            return max;
        }
    }
}

现在,动画面板工作得很好。另一方面,图形面板......当我运行程序时,它显示一堆红点,没有线连接它们。我究竟做错了什么?


除了@Hovercraft 的有用建议之外,还可以考虑以下其他方法:

  • 将积分累积到一个GeneralPath可以根据需要呈现,对于example https://stackoverflow.com/a/6697773/230513.
  • 使用重复调用连接点drawLine()使用合适的坐标系,概述here https://stackoverflow.com/a/9373195/230513.
  • Look at JFreeChart https://stackoverflow.com/tags/jfreechart/info.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Swing 中的图形绘制仅绘制点 的相关文章

随机推荐

  • 如何处理移动设备发送的图像?

    我的一位同事正在开发一款 iPhone 应用程序 该应用程序将允许用户通过我的 API 在我的网站上发布图像 我正在构建 API 的一部分 用于接受和处理图像 移动开发人员发送的标头如下 Content Disposition form d
  • Simplecursoradaptor 内的自定义文本字体

    我制作了一个使用 SimpleCursoradapter 的应用程序 String from new String title notes image int to new int R id esodaTextView R id amoun
  • Psycopg2 单引号异常

    我在我的应用程序中使用 psycopg2 一切都很好 但是 当我插入数据时包含单引号 然后 python 抛出下面的异常
  • WebDriverException:消息:握手中缺少“marionette Protocol”字段

    我目前正在尝试在本地运行 robotsframework 测试脚本 Ubuntu 12 04 LTS 64 位 我遇到的问题是无法在 Open Browser 中启动 FF 浏览器 以下是我所拥有的设置的详细信息 规格 火狐浏览器 v26
  • 使用 Cookie 的购物车

    我正在尝试使用 cookie 会话制作一个简单的购物车 根据此代码片段 它仅包含 4 个项目
  • Django - 如何将多个参数传递给 url 模板标签

    在我的 urls py 中我有 r P
  • Rstudio 中的 R 找不到 rmarkdown 包

    我第一次尝试在 PC 上的 Rstudio 0 98 953 中使用 rmarkdown 我已升级到最新版本的 R 3 1 1 和 R studio 本问题末尾提供了 sessionInfo 的输出 据我了解 rmarkdown 应该包含在
  • 使用变量访问对象的属性

    如果我有一个对象 具有名称 电话号码等属性 我如何使用变量在 Javascript 中访问这些属性 我想通过执行以下操作来访问 javascript 中的属性名称 object name bob phone number 911 prope
  • powershell 运行 pip

    我想通过 powershell 脚本运行 python 模块升级 第一行有效 但我不知道如何正确读入文件 第二条点线 我收到此错误 Could not find a version that satisfies the requiremen
  • NFCTagReaderSession“缺少所需的权利”

    我正在深入研究 iOS 13 的新 CoreNFC 功能 并且正在努力让 NFCTagReaderSession 正常工作 设置我的权利并实例化 NFCTagReaderSession 和委托后 我尝试通过调用来启动会话nfcTagRead
  • Swift:如何从 UIImage 数组中提取图像文件名

    如果我有一个像这样的 UIImage 数组 newImageArray UIImage named Red png UIImage named Green png UIImage named Blue png UIImage named Y
  • 如何使用 DotNetZip 从 zip 中提取 XML 文件

    我使用的是最新版本的 DotNetZip 并且有一个包含 5 个 XML 的 zip 文件 我想打开 zip 读取 XML 文件并使用 XML 的值设置一个字符串 我怎样才能做到这一点 Code thats my old way of do
  • 使用 Selenium 的模态对话框窗口

    因此 我尝试使用 Selenium 导航到 IE9 中的页面 该页面在加载页面时显示存在证书错误 使用 AutoIT 我可以让它在浏览器中单击 然后按 TAB 两次 然后按 Enter 键 没有问题 然而 当它继续时 它会抛出 模态对话框存
  • 如何避免未使用的 setState 函数? React useState 可以在没有 setter 的情况下创建吗?

    我目前正在减少 删除 React 站点上的 npm 警告 大量警告是由 setState 函数 未使用 引起的 如下所示 const state setState useState some state 以下哪项是消除这些警告的更好方法 或
  • 基本高性能数据真实性

    我不是母语人士 术语可能不正确 对此感到抱歉 我正在 AVR 微控制器之间通过无线电传输数据供个人使用 并希望客户能够证明传输数据的真实性 因为它来自授权客户之一 这意味着我不需要不可否认性并且能够预先定义共享密钥 我对不同的方法进行了一些
  • Xcode 8:以 NSException 类型的未捕获异常终止

    我是新手 我遇到了这个错误 我到处查找 但找不到解决方案 任何帮助将非常感激 0 CoreFoundation 0x00000001102bb34b exceptionPreprocess 171 1 libobjc A dylib 0x0
  • 为什么 UINavigationBar 会窃取触摸事件?

    我有一个自定义 UIButton 其中 UILabel 添加为子视图 仅当我触摸顶部边界下方约 15 个点时 按钮才会执行给定的选择器 当我点击该区域上方时 什么也没有发生 我发现这并不是由错误创建按钮和标签引起的 因为在我将按钮向下移动约
  • EditText TextChangeListener问题

    我有一个用于搜索目的的编辑文本 我已经添加了 searchET addTextChangedListener new TextWatcher Override public void onTextChanged CharSequence s
  • 如何使用 bash 命令创建 CPU 峰值

    我想在 Linux 机器上创建接近 100 的负载 它是四核系统 我希望所有核心都全速运行 理想情况下 CPU 负载将持续指定的时间 然后停止 我希望 bash 有一些技巧 我在想某种无限循环 I use stress http linux
  • Java Swing 中的图形绘制仅绘制点

    我目前正在开发一个程序 其中随着时间的推移而演变的某些数值变量在每次迭代中显示它们的值 这已经足够好了 但现在我想绘制一个图表来显示它们随时间的演变 因此 我研究了在 Swing 中绘制图表的代码示例 我的最终代码如下所示 public c