Вот
аюсь реализовать код, который читает с последовательного порта моей доски и на основе того, что он читает, перерисовывает круг. Конечная цель этого состоит в том, чтобы использовать класс 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) {};
}
}
}