Вот

аюсь реализовать код, который читает с последовательного порта моей доски и на основе того, что он читает, перерисовывает круг. Конечная цель этого состоит в том, чтобы использовать класс Robot для достижения фактического управления курсором, но сначала я хочу узнать больше о Java, и поэтому сначала я пытаюсь достичь этого с помощью некоторой базовой графики.

Подводя итог моей проблеме, я не знаю, как использовать JFrame с постоянно меняющимся вводом от статического метода.

Последовательный порт для доступа к JAR можно найти по адресуhttp://fazecast.github.io/jSerialComm/

Arduino непрерывно записывает в сериал на основе системы FPGA-акселерометр в виде «UpLeft», «Up», «UpRight», «Left», «Center», «Right», «DownLeft», «Down», « Downright». Затем Java-программа должна взять это и перекрасить круг соответственно.

Я могу открыть COMM3 и распечатать правильное направление, полученное от моего оборудования, но всякий раз, когда я пытаюсь применить JFrame, я теряюсь. Я нашел много учебников по ActionListener, но эта реализация должна быть непрерывной и не зависеть от событий мыши или клавиатуры. Таким образом, я не знаю, как использовать методы paintComponent () и painter (), так как основной метод является статическим.

Большое спасибо за уделенное время!

import java.awt.Color;
import java.awt.Graphics;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import com.fazecast.jSerialComm.*;

public class Main extends JPanel{

    public void paintComponent(Graphics g, int x, int y) {
        super.paintComponent(g);
        g.setColor(Color.MAGENTA);
        g.fillOval(x, y, 20, 20);
    }
    public void painter(int x, int y, int velx, int vely){
        x = x + velx;
        y = y + vely;
        repaint();
    }

    public static void main(String[] args) {
        int x = 0, y = 0, velx = 0, vely = 0;
        SerialPort ports[] = SerialPort.getCommPorts();
        System.out.println("Select a Port:");
        SerialPort port = ports[1];
        Graphics g;

        if(port.openPort()){
            System.out.println("Successfully opened the port.");
        } else {
            System.out.println("Unable to open the port.");
        }
        port.setComPortTimeouts(SerialPort.TIMEOUT_SCANNER, 0, 0);
        JFrame jf = new JFrame();
        Main main = new Main();

        jf.setTitle("Window");
        jf.setSize(600, 400);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.add(main);

        Scanner data = new Scanner(port.getInputStream());
        while(data.hasNextLine()) {
            System.out.println(data.nextLine());
            try{String dir = data.nextLine();
                if(dir.equals("UpLeft")) {
                    velx = -1;
                    vely = -1;
                }
                if(dir.equals("Up")) {
                    velx = 0;
                    vely = -1;
                }
                if(dir.equals("UpRight")) {
                    velx = 1;
                    vely = -1;
                }
                if(dir.equals("Left")) {
                    velx = -1;
                    vely = 0;
                }
                if(dir.equals("Center")) {
                    velx = 0;
                    vely = 0;
                }
                if(dir.equals("Right")) {
                    velx = 1;
                    vely = 0;
                }
                if(dir.equals("DownLeft")) {
                    velx = -1;
                    vely = 1;
                }
                if(dir.equals("Down")) {
                    velx = 0;
                    vely = 1;
                }
                if(dir.equals("DownRight")) {
                    velx = 1;
                    vely = 1;
                }
                System.out.println(velx);
                System.out.println(vely);
            }           
            catch(Exception e) {};
        }
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос