Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将swing GUI更改为处理GUI_Java_Swing_Processing - Fatal编程技术网

Java 将swing GUI更改为处理GUI

Java 将swing GUI更改为处理GUI,java,swing,processing,Java,Swing,Processing,我正在尝试运行处理。 java不兼容,因为它使用swing的GUI。 如何更改它以使其调用处理的GUI? 我已经试过几次了 但我做不好 import javax.swing.*; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashSet; import java.awt.*;

我正在尝试运行处理。 java不兼容,因为它使用swing的GUI。 如何更改它以使其调用处理的GUI? 我已经试过几次了 但我做不好

import javax.swing.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;



public class GUI extends JFrame {


    GUI() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        try {
            BufferedImage myPicture = ImageIO.read(new File("piet.jpg"));
             Graphics2D g2d = myPicture.createGraphics();
            int x = myPicture.getWidth();
            int y = myPicture.getHeight();

            HashSet<Line> lines = new HashSet<Line>();


            double [] arr = myPicture.getData().getPixels(0,0,x,y,new double[x*y*3]);

            double [] arr2 = new double[x*y];

            System.out.println(arr.length);
            int c=0;
            for(int i = 0; i < arr.length-3; i+=3) {
                double B = arr[i];
                double G = arr[i+1];
                double R = arr[i+2];
                double level = R * 0.2126 + G * 0.7152 + B * 0.0722;
                arr2[c++] = level;
            }

            LSD lsd = new LSD();

            double [] out = lsd.lsd(arr2,x,y);

            for(int i = 0; i < lsd.n_out; i++) {
                for (int j = 0; j < 7; j++)

                lines.add(new Line(out[7 * i + 0], out[7 * i + 1],
                        out[7 * i + 2], out[7 * i + 3]));

            }

            for ( Line l : lines) {
                g2d.drawLine((int)l.x1,(int)l.y1,(int)l.x2,(int)l.y2);
            }

            JLabel picLabel = new JLabel(new ImageIcon(myPicture));
            add(picLabel);


        } catch (IOException e) {

        }

        setSize(800,800);
            setVisible(true);
    }


    public static void main(String [] args){
        new GUI();

    }


}

您不能仅仅更改几件事,然后让这些代码在处理过程中工作。Swing和Processing是完全不同的

您必须后退一步,了解代码的功能。用英语描述它的功能。然后使用英语,实现在处理过程中完成相同任务的代码

为了让事情顺利进行,这里有几个区别:

处理使用PApplet而不是JFrame。 处理使用PImage而不是BuffereImage。 处理使用PVector类而不是Point。 处理没有像JLabel这样的组件。 但正如我所说的,这并不是简单地替换几个关键字并让它工作。你必须接受程序所做的,然后在处理过程中这样做


更多信息可在中找到。请尝试一下,如果你卡住了,请发一封邮件。祝你好运

好的,谢谢你的提示。即使是上面的内容也很有帮助。因此,如果我添加import processing.core.PApplet;然后公共类GUI扩展了PApplet{,GUI中会发生什么变化{setDefaultCloseOperationPApplet.EXIT_ON_CLOSE;?这是我不知道的部分get@daddydean翻译代码不是一行一行地修改。翻译代码的方法是用目标语言从头开始,朝着第一个程序实现的目标努力。你能用英语描述一下第一个程序的功能吗如果你有这个描述,拿着它,用这个描述作为指导,重新开始处理。我想我会试试。基本上代码应该做的是从图像中提取线段,就像一个非常简化的轮廓/边缘检测。结果如下:@daddydydean很酷。你能看懂代码并理解它吗它在做什么?你能用英语写下代码执行的步骤列表吗?避免使用特定于语言的关键字:比如显示窗口而不是显示JFrame。当你写下这些步骤列表后,你就能在处理过程中实现它们。代码翻译就是这样工作的。