JavaFx 2.x:如何删除和添加绘图数据?

时间:2013-01-17 09:48:33

标签: javafx-2 linechart

在我的下面的代码中,我想添加两个按钮,通过单击一个按钮(“删除”),它将逐个删除绘制的数据,并通过单击按钮(“添加”)将其绘制回来,如例子:

通过运行类

绘制完整数据

enter image description here

现在只需单击“删除”按钮,最后一个数据点就会消失

enter image description here

再次点击,最后一个数据点消失,依此类推

enter image description here

通过单击“添加”按钮执行逆操作:每次单击将添加一个数据点

import javafx.application.Application; 
import javafx.beans.property.SimpleDoubleProperty; 
import javafx.event.EventHandler;  
import javafx.scene.chart.NumberAxis; 
import javafx.scene.chart.XYChart; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.chart.LineChart; 
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.BorderPane; 

public class XYMove extends Application {

BorderPane pane; 
XYChart.Series series1 = new XYChart.Series(); 

SimpleDoubleProperty rectinitX = new SimpleDoubleProperty(); 
SimpleDoubleProperty rectX = new SimpleDoubleProperty(); 
SimpleDoubleProperty rectY = new SimpleDoubleProperty(); 

Button button1 = new Button("Remove");
Button button2 = new Button("Add");

@Override 
public void start(Stage stage) { 

final NumberAxis xAxis = new NumberAxis(12, 20, 1);

double max = 12;
double min = 3;

max *= (1+((double)3/100));
min *= (1-((double)3/100));

final NumberAxis yAxis = new NumberAxis(min, max, 1); 

xAxis.setAnimated(false);
yAxis.setAnimated(false);

yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis) { 

@Override 
public String toString(Number object) { 
    return String.format("%2.0f", object); 
} 
}); 

final LineChart<Number, Number> lineChart = new LineChart<Number, Number>(xAxis, yAxis); 

lineChart.setCreateSymbols(false); 
lineChart.setAlternativeRowFillVisible(false); 
lineChart.setAnimated(false); 
lineChart.setLegendVisible(false);

series1.getData().add(new XYChart.Data(1, 3)); 
series1.getData().add(new XYChart.Data(2, 8)); 
series1.getData().add(new XYChart.Data(3, 6)); 
series1.getData().add(new XYChart.Data(4, 7)); 
series1.getData().add(new XYChart.Data(5, 5)); 
series1.getData().add(new XYChart.Data(6, 6)); 
series1.getData().add(new XYChart.Data(7, 4)); 
series1.getData().add(new XYChart.Data(8, 7)); 
series1.getData().add(new XYChart.Data(9, 6)); 
series1.getData().add(new XYChart.Data(10, 7));
series1.getData().add(new XYChart.Data(11, 6)); 
series1.getData().add(new XYChart.Data(12, 7));
series1.getData().add(new XYChart.Data(13, 6));
series1.getData().add(new XYChart.Data(14, 12)); 
series1.getData().add(new XYChart.Data(15, 10)); 
series1.getData().add(new XYChart.Data(16, 11)); 
series1.getData().add(new XYChart.Data(17, 9)); 
series1.getData().add(new XYChart.Data(18, 10));

pane = new BorderPane(); 
pane.setCenter(lineChart); 
Scene scene = new Scene(pane, 800, 600); 
lineChart.getData().addAll(series1); 

stage.setScene(scene);         

scene.setOnMouseClicked(mouseHandler); 
scene.setOnMouseDragged(mouseHandler); 
scene.setOnMouseEntered(mouseHandler); 
scene.setOnMouseExited(mouseHandler); 
scene.setOnMouseMoved(mouseHandler); 
scene.setOnMousePressed(mouseHandler); 
scene.setOnMouseReleased(mouseHandler); 
stage.show();
} 

EventHandler<MouseEvent> mouseHandler = new EventHandler<MouseEvent>() { 

@Override 
public void handle(MouseEvent mouseEvent) { 

if (mouseEvent.getEventType() == MouseEvent.MOUSE_PRESSED) {             
    rectinitX.set(mouseEvent.getX()); 
} 
else if (mouseEvent.getEventType() == MouseEvent.MOUSE_DRAGGED ||  mouseEvent.getEventType() == MouseEvent.MOUSE_MOVED) { 
    LineChart<Number, Number> lineChart = (LineChart<Number, Number>) pane.getCenter(); 
    NumberAxis xAxis = (NumberAxis) lineChart.getXAxis(); 

    double Tgap = xAxis.getWidth()/(xAxis.getUpperBound() - xAxis.getLowerBound()); 
    double newXlower=xAxis.getLowerBound(), newXupper=xAxis.getUpperBound();             
    double Delta=0.3;

    if(mouseEvent.getEventType() == MouseEvent.MOUSE_DRAGGED){
    if(rectinitX.get() < mouseEvent.getX()&& newXlower >= 0){    
        newXlower=xAxis.getLowerBound()-Delta;
        newXupper=xAxis.getUpperBound()-Delta;
    }
else if(rectinitX.get() > mouseEvent.getX()&& newXupper <= 22){    
        newXlower=xAxis.getLowerBound()+Delta;
        newXupper=xAxis.getUpperBound()+Delta;
    }    
    xAxis.setLowerBound( newXlower ); 
    xAxis.setUpperBound( newXupper );                        
    }                                        
    rectinitX.set(mouseEvent.getX());                                 
 } 
 } 
 }; 
 public static void main(String[] args) {
    launch(args);
}
}

谢谢大家。

编辑:我已经能够解决这个问题了,谢谢所有

0 个答案:

没有答案