Java: 在指定的 (x,y) 坐标处绘制单个点?

Java: Drawing single dots at specified (x,y) coordinates?

我正在从事科学研究,并且从我的代码中得到了奇怪的结果,作为一个视觉学习者,我认为在分析数据时将我的数据打印到屏幕上以尝试查看代码哪里出了问题是有效的。作为参考,我正在分析一个非线性波形。

下面是分析代码:

    public void getMachineCode(int trial, int wave){
    double[] tempwave = new double[5000];
    int index = 0;
    for(int x = 0; x < 5000; x++){
        tempwave[x] = waves[trial][wave][x];
    }
    for(int repeat = 5; repeat > 0; repeat--){
        int tempstart = index;
        if(tempwave[index] > 0){
            while(tempwave[index] > 0){
                index++;
            }
        }else{
            while(tempwave[index] < 0){
                index++;
            }
        }
        int midwave = index - tempstart;
        if(tempwave[midwave] > 0){
            System.out.println(0);
        }else{
            System.out.println(1);
        }
    }
}

在这里,我想要的只是随着索引的增加将我的试验的 (x,y) 坐标打印到屏幕上,因此它是一个不断变化的图形,类似于:

 if(tempwave[index] > 0){
            while(tempwave[index] > 0){
                index++;
                printpixel(index,y);  //something to show where the code is scanning
            }
        }else{
            while(tempwave[index] < 0){
                index++;
                printpixel(index,y);
            }

我对 java 图形不太熟悉,正在考虑使用 JFrame,但我很难实施。将有大约 4000 个数据点要绘制,所以我可能还必须每隔几个点打印一次,或者有没有办法制作更好的视觉效果?有任何想法吗?谢谢!

这应该给你基本的想法。

  • 通常使用 Swing 图形,您覆盖 paintComponent() 方法并从一些共享状态绘制
  • 相反,您可以只绘制一个大图像,然后使用 paintComponent()
  • 绘制该图像
  • 我已经将它压缩成一个独立的示例,它可以在更大的应用程序中分离出来

例子

public static void main(String[] args) throws Exception {

    final BufferedImage image = new BufferedImage(1280, 768,
            BufferedImage.TYPE_INT_RGB);
    JPanel canvas = new JPanel() {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, this);
        }
    };

    JFrame frame = new JFrame();
    frame.setLayout(new BorderLayout());   // <== make panel fill frame
    frame.add(canvas, BorderLayout.CENTER);
    frame.setSize(500, 500);
    frame.setVisible(true);

    // do you drawing somewhere else, maybe a different thread
    Graphics g = image.getGraphics();
    g.setColor(Color.red);
    for (int x = 0; x < 100; x += 5) {
        for (int y = 0; y < 100; y += 5) {
            g.drawRect(x, y, 1, 1);
        }
    }
    g.dispose();
    canvas.repaint();
}