gpt4 book ai didi

JAVA jslider 的 setValue

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:02 25 4
gpt4 key购买 nike

我写了一个小java应用程序。有一个带有 3 个 slider 的 GUI。它们显示了 arduino 传感器的 3 个加速度值。但一切也应该离线工作(使用文件中的值)。

File is looking like this:
10 10 10
11 12 12
15 11 11
...

如果我使用菜单并决定“从文件读取”, Action 监听器将启动 ReadFromFile...我选择的文件将被逐行读取。系统输出工作正常。 slider 应该像 3 个 Activity 光束一样移动,但事实并非如此。

public void ReadFromFile(File file) {

System.out.print("\n Datei= " + file);

if(file.exists()){
try {
Scanner scn = new Scanner(file);
while(scn.hasNextLine()){

try {

System.out.print("\n x= " + Integer.parseInt(scn.next()));
System.out.print("\n y= " + Integer.parseInt(scn.next()));
System.out.print("\n z= " + Integer.parseInt(scn.next()));


x_slider.setValue(Integer.parseInt(scn.next()));
y_slider.setValue(Integer.parseInt(scn.next()));
z_slider.setValue(Integer.parseInt(scn.next()));

Thread.sleep(500);

} catch (InterruptedException e) {}


}
scn.close();
}
catch (FileNotFoundException e) {e.printStackTrace();}
}
}

该类的完整代码

    import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JSlider;
import com.fazecast.jSerialComm.*;

public class AccelerometerGUI extends Frame implements ActionListener{

private static final long serialVersionUID = 1L;

PortInitial portselect;
Kalibrieren cali;
static SerialPort chosenport = null;

static int[] werte = {0, 0, 0}; // format x_wert, y_wert, z_wert
static int[] minmax = {0, 0, 0, 1024, 1024, 1024}; // format x_min, y_min, z_min, x_max, y_max, z_max

Scanner s = new Scanner(System.in);

Component aComponent;

JSlider x_slider = new JSlider();
JSlider y_slider = new JSlider();
JSlider z_slider = new JSlider();

public static void main (String[] args)
{
@SuppressWarnings("unused")

AccelerometerGUI GUI = new AccelerometerGUI();
}

public AccelerometerGUI () {

JFrame window = new JFrame("Accelerometer GUI"); // Fenster mit Namen erstellen
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

MenuBar DasMenu = new MenuBar(); // Menü erstellen
window.setMenuBar(DasMenu);

Menu File = new Menu("Datei"); // Menüpunkt Datei
DasMenu.add(File);

Menu Settings = new Menu("Einstellungen"); // Menüpunkt Einstellungen
DasMenu.add(Settings);

MenuItem Start = new MenuItem("Start"); // Unter-Menüpunkt Start
Start.addActionListener(this);
File.add(Start);

MenuItem WriteFile = new MenuItem("In Datei schreiben"); // Unter-Menüpunkt In Datei schreiben
WriteFile.addActionListener(this);
File.add(WriteFile);

MenuItem ReadFile = new MenuItem("Aus Datei lesen"); // Unter-Menüpunkt Aus Datei lesen
ReadFile.addActionListener(this);
File.add(ReadFile);

MenuItem Exit = new MenuItem("Beenden"); // Unter-Menüpunkt Beenden
Exit.addActionListener(this);
File.add(Exit);

MenuItem Sensorkali = new MenuItem("Sensor kalibrieren"); // Unter-Menüpunkt Sensor kalibrieren
Sensorkali.addActionListener(this);
Settings.add(Sensorkali);

Panel sliderpanel = new Panel(); // Panel für Slider erstellen
sliderpanel.setLayout(new GridLayout(3,1));

x_slider.setEnabled(true);
x_slider.setMajorTickSpacing(100);
x_slider.setMinorTickSpacing(10);
x_slider.setPaintTicks(true);
x_slider.setPaintLabels(true);

y_slider.setEnabled(true);
y_slider.setMajorTickSpacing(100);
y_slider.setMinorTickSpacing(10);
y_slider.setPaintTicks(true);
y_slider.setPaintLabels(true);

z_slider.setEnabled(true);
z_slider.setMajorTickSpacing(100);
z_slider.setMinorTickSpacing(10);
z_slider.setPaintTicks(true);
z_slider.setPaintLabels(true);

// Sliderpanel bestücken

sliderpanel.add(x_slider);
sliderpanel.add(y_slider);
sliderpanel.add(z_slider);

sliderpanel.setPreferredSize(new Dimension(500, 200));

window.setLayout(new GridLayout(1,1)); // Fenster-Layout erstellen
window.add(sliderpanel);

window.pack();
window.setVisible(true);

SetSliderMinMax();

//SelectPort();

//ReadData();
}

public void actionPerformed(ActionEvent e) {

String Befehl = e.getActionCommand();

/* MenüPunkt-Start */

if(Befehl.equals("Start")){
if(chosenport != null){ // Prüfung ob Port bereits ausgewählt
System.out.println("Startet");
SetSliderMinMax();
ReadData();
}
else{
NoPortSelected(); // Aufforderung Port auswählen
}
}

/* MenüPunkt-In Datei schreiben */

if(Befehl.equals("In Datei schreiben")){

if(chosenport != null){ // Prüfung ob Port bereits ausgewählt
System.out.println("In Datei schreiben");

//Create a file chooser
final JFileChooser fc = new JFileChooser();
//In response to a button click:
int returnVal = fc.showOpenDialog(aComponent);

System.out.println(aComponent);
System.out.println(returnVal);

if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would open the file.
System.out.println("Opening: " + file.getName());

WriteToFile(file);

} else {
System.out.println("Open command cancelled by user.");
}
}
else{
NoPortSelected(); // Aufforderung Port auswählen
}
}

/* MenüPunkt-Aus Datei lesen */

if(Befehl.equals("Aus Datei lesen")){

System.out.println("Aus Datei lesen");

//Create a file chooser
final JFileChooser fc = new JFileChooser();
//In response to a button click:
int returnVal = fc.showOpenDialog(aComponent);

System.out.println(aComponent);
System.out.println(returnVal);

if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would open the file.
System.out.println("Opening: " + file.getName());

ReadFromFile(file);

} else {
System.out.println("Open command cancelled by user.");
}
}

/* MenüPunkt-Beenden */

if(Befehl.equals("Beenden")){
System.out.println("Anwendung beendet");
System.exit(0);
}

/* MenüPunkt-Sensor kalibrieren */

if(Befehl.equals("Sensor kalibrieren")){

System.out.println("Sensor kalibrieren");

if(portselect != null) // Prüfung ob Port bereits ausgewählt wurde
{
if (cali == null){
cali = new Kalibrieren(this, "Sensor kalibrieren");
}
cali.setVisible(true);

System.out.println("Kalibrierte Werte: " + minmax[0] + " " + minmax[1] + " " + minmax[2] + " " + minmax[3] + " " + minmax[4] + " " + minmax[5]);

SetSliderMinMax(); // Slider MinMAx auf kalibrierte Werte aktualisieren
}
else{ // Es wurde noch kein Port ausgewählt - Warnung
NoPortSelected();
}
}
}


void SelectPort(){ portselect = new PortInitial(this, "Port wählen");
portselect.setVisible(true);
if (portselect.getResult())
{
chosenport = portselect.getThePort();

System.out.println("Ausgewählter Port: "+ chosenport.getSystemPortName());
}
else {
System.out.println("Port auswählen abgebrochen");
}
}


/* Methode: SetSliderMinMax() setzt das Minimum und Maximum der Slider */

void SetSliderMinMax() {

x_slider.setMinimum(minmax[0]);
y_slider.setMinimum(minmax[1]);
z_slider.setMinimum(minmax[2]);
x_slider.setMaximum(minmax[3]);
y_slider.setMaximum(minmax[4]);
z_slider.setMaximum(minmax[5]);
}

/* Methode: WriteToFile() Legt Werte in Datei ab */

public void WriteToFile(File file) {
if(file.exists()){
try {
Scanner scn = new Scanner(file);
while(scn.hasNextLine()){

try {
werte[0] = Integer.parseInt(scn.next());
werte[1] = Integer.parseInt(scn.next());
werte[2] = Integer.parseInt(scn.next());
Thread.sleep(500); // Wartezeit 500 Millisekunden

} catch (InterruptedException e) {}

Showdata();

}
scn.close();
}
catch (FileNotFoundException e) {e.printStackTrace();}
}
}

/* Methode: ReadFromFile() legt Werte-Input auf Datei */

public void ReadFromFile(File file) {

System.out.print("\n Datei= " + file);

if(file.exists()){
try {
Scanner scn = new Scanner(file);
while(scn.hasNextLine()){

try {

String x = scn.next();
String y = scn.next();
String z = scn.next();
System.out.print("\n x= " + Integer.parseInt(x));
System.out.print("\t y= " + Integer.parseInt(y));
System.out.print("\t z= " + Integer.parseInt(z));


x_slider.setValue(Integer.parseInt(x));
y_slider.setValue(Integer.parseInt(y));
z_slider.setValue(Integer.parseInt(z));

System.out.print("\n X= " + x_slider.getValue());
System.out.print("\t Y= " + y_slider.getValue());
System.out.print("\t Z= " + z_slider.getValue());

Thread.sleep(500); // Wartezeit 500 Millisekunden

} catch (InterruptedException e) {}
/*
System.out.print("\n x= " + werte[0]);
System.out.print("\t y= " + werte[1]);
System.out.print("\t z= " + werte[2]);

x_slider.setValue(werte[0]);
y_slider.setValue(werte[1]);
z_slider.setValue(werte[2]);


*/
//Showdata();

}
scn.close();
}
catch (FileNotFoundException e) {e.printStackTrace();}
}
}

/* Methode: ReadData() öffnet Port und liest Werte ein und stellt diese dar */

public void ReadData() {

chosenport = portselect.getThePort();

if(chosenport.openPort()){
System.out.println("Port erfolgreich geöffnet");
chosenport.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);

Scanner data = new Scanner(chosenport.getInputStream());

while(data.hasNextLine()){
try {
werte[0] = Integer.parseInt(data.next());
werte[1] = Integer.parseInt(data.next());
werte[2] = Integer.parseInt(data.next());

} catch(Exception ee){}

Showdata();
}
s.close();
data.close();
}
else {
PortSelectFail();
}
}

/* Methode: NoPortSelected() zeigt Popup mit Aufforderung Port zu wählen */

void NoPortSelected() {
JFrame alert = new JFrame();
JOptionPane.showMessageDialog(alert,"Es ist kein Port ausgewählt\n\nTipp: Settings > Port einstellen\n", "Warnung", JOptionPane.WARNING_MESSAGE);
}

/* Methode: PortSelectFail() zeigt Popup mit erneuten Aufforderung Port zu wählen */

static void PortSelectFail() {
JFrame alert = new JFrame();
JOptionPane.showMessageDialog(alert,"Port öffnen fehlgeschlagen\n\nTipp: Überprüfen Sie den Port und versuchen Sie es erneut\n", "Warnung", JOptionPane.WARNING_MESSAGE);
}

/* Methode: Showdata() Werte werden auf Slider und Konsole dargestellt */

public void Showdata() {

x_slider.setValue(werte[0]);
y_slider.setValue(werte[1]);
z_slider.setValue(werte[2]);
}

最佳答案

好的,在你的 JSliders 下放置这个计时器和这些数组列表,就像这样

JSlider x_slider = new JSlider();
JSlider y_slider = new JSlider();
JSlider z_slider = new JSlider();

Timer timer;
ArrayList<String> xs = new ArrayList<String>();
ArrayList<String> ys = new ArrayList<String>();
ArrayList<String> zs = new ArrayList<String>();

那么对于你的方法来说,它是这样的,原因是因为你使用了 Thread.sleep(500) 并且这搞乱了 swing Jframe,你必须使用计时器

public void ReadFromFile(File file) {

System.out.print("\n Datei= " + file);

if(file.exists()){
try {
final Scanner scn = new Scanner(file);
while(scn.hasNextLine()){
String x = scn.next();
String y = scn.next();
String z = scn.next();
xs.add(x);
ys.add(y);
zs.add(z);

}
scn.close();
}
catch (FileNotFoundException e) {e.printStackTrace();}
}
timer = new Timer(500, new ActionListener(){
int c = 0;
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
//System.out.print("\n x= " + Integer.parseInt(x));
// System.out.print("\t y= " + Integer.parseInt(y));
// System.out.print("\t z= " + Integer.parseInt(z));


x_slider.setValue(Integer.parseInt(xs.get(c)));
y_slider.setValue(Integer.parseInt(ys.get(c)));
z_slider.setValue(Integer.parseInt(zs.get(c)));
c++;
if(c == xs.size()){
timer.stop();
}
}

});
timer.start();
}

关于JAVA jslider 的 setValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com