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

时间:2015-03-06 21:53:59

标签: java graphics drawing

我正在从事科学研究并从我的代码中得到奇怪的结果,作为一个视觉学习者,我认为将数据打印到屏幕是有效的,因为它被分析以试图查看代码出错的地方。作为参考,我正在分析非线性波形。

以下是分析代码:

    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个数据点来绘制,所以我可能还必须只打印每几个点或者有没有办法使视觉更好?有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

这应该给你基本的想法。

  • 通常使用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();
}

Example image