2014-03-26 13 views
0

GUI에 문제가 있습니다. Arduino 마이크로 컨트롤러에 저장된 일부 아날로그 값을 표시하는 Gui를 만들려고합니다. 배열에 원하는 모든 데이터를 저장할 수 있습니다. 이제 SceneBuilder 및 JavaFx를 사용하여이 아날로그 신호의 배열을 플롯하고 실제 신호를 확인하지만 그래프는 자동 확대 및 산란입니다. 다음과 같은 것을 더 갖고 싶습니다 : JAVAFX의 Advanced Stock Line Chart 예제 JavaFX Example실시간 라인 차트 JavaFx

여기 내 코드입니다. updateGraph1 (...) 함수는 그래프를 업데이트 할 수있는 값을받을 때마다 호출됩니다.

package de.zft.degreen.view; 

import java.io.IOException; 
import java.net.URL; 
import java.util.ResourceBundle; 
import java.util.Set; 

import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Node; 
import javafx.scene.Scene; 
import javafx.scene.chart.LineChart; 
import javafx.scene.chart.NumberAxis; 
import javafx.scene.chart.ValueAxis; 
import javafx.scene.chart.XYChart; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.Pane; 
import javafx.stage.Stage; 

public class Gui extends Application implements Runnable, Initializable { 

@FXML 
private static LineChart<Number,Number> graph1; 

public static XYChart.Series<Number, Number> series; 

private ChangeListener changeListener; 
private static Scene scene; 

public Gui() { 
    series = new XYChart.Series<>(); 
    series.setName("bye"); 

} 

public ChangeListener getChangeListener() { 
    return changeListener; 
} 

public void setChangeListener(ChangeListener changeListener) { 
    this.changeListener = changeListener; 
} 



@Override 
public void start(Stage primaryStage) throws Exception { 
    System.out.println("Start start"); 
    primaryStage.setTitle("DEGREEN GUI"); 
    System.out.println("Before"); 
    Pane myPane = FXMLLoader.load(getClass().getResource("Gui2.fxml")); 
    System.out.println("After"); 
    System.out.println("Step1"); 
    scene = new Scene(myPane); 
    System.out.println("Step2"); 
    primaryStage.setScene(scene); 
    System.out.println("Step3"); 
    primaryStage.show(); 
    System.out.println("End start"); 
} 

private void init(Stage primaryStage){ 
    System.out.println("Start Init"); 
} 

@FXML 
public void updateGraph1(Long long1, int v){ 
    System.out.println("Start updateGraph1"+series.getName()); 
    final int q = v; 
    final long long2 = long1; 
    Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 
      add2Series(long2,q,100); 
     } 
    }); 
    System.out.println("End updateGraph1"); 

} 
@Override 
public void run() { 
    System.out.println("Gui Initialized"); 
    launch(); 
    System.out.println("Gui Ended"); 
} 

@FXML 
public void initialize(URL arg0, ResourceBundle arg1) { 
    System.out.println("Start Initialize"+series.getName()); 
    series = new XYChart.Series<Number,Number>(); 
    series.setName("Voltage DE1"); 
    graph1.getData().add(series); 
    graph1.setAnimated(false); 
    System.out.println("End Initialize"+series.getName()); 
} 
@FXML 
protected static void add2Series(Number x, Number y, int displayedSize) { 
    int seriesSize = series.getData().size(); 

    if (seriesSize >= displayedSize) { 
     series.getData().remove(0); 
    } 
    series.getData().add(new XYChart.Data<Number,Number>(x,y)); 


} 
} 

누군가 나를 도울 수 있습니까?

답변

0

이 부분을보세요. sample 표시되는 카테고리는 런타임에 관리되므로 마지막 10 개 항목 만 표시됩니다.