Java 更新数据时更新图表

Java 更新数据时更新图表,java,javafx,event-handling,pie-chart,Java,Javafx,Event Handling,Pie Chart,我在我的程序中制作了一个PieChart,我想让PieChart生效,所以当我更新任何字段时,我想与PieChart进行通信。我试图通过获取数据的值或创建eventhandler使其工作。现在真的卡住了。对于pie1,我得到的输出是0,它从不更新 (现在我只想让pie1起作用,其余的稍后会继续 面板的代码为: class CenterPaneel extends JPanel{ private static final long serialVersionUID = -8355269879559

我在我的程序中制作了一个PieChart,我想让PieChart生效,所以当我更新任何字段时,我想与PieChart进行通信。我试图通过获取数据的值或创建eventhandler使其工作。现在真的卡住了。对于pie1,我得到的输出是0,它从不更新

(现在我只想让pie1起作用,其余的稍后会继续

面板的代码为:

class CenterPaneel extends JPanel{
private static final long serialVersionUID = -835526987955952967L;
private final ObservableList<PieChart.Data> details = FXCollections.observableArrayList();
private PieChart pieChart;

public CenterPaneel(){
setLayout( new GridLayout(2,3,1,1));
setBackground(Color.DARK_GRAY);

double pie1 = SamenvattingPaneel.cst1;
double pie2 = 25;
double pie3 = 25;
double pie4 = 25;

JFXPanel jfxPanel = new JFXPanel();
final JFXPanel dataPaneel = jfxPanel;

ScrollPane sp = new ScrollPane();

details.addAll(new PieChart.Data("Catagorie 1", pie1),
        new PieChart.Data("Catagorie 2", pie2),
        new PieChart.Data("Catagorie 3", pie3),
        new PieChart.Data("Catagorie 4", pie4)
    );
pieChart = new PieChart();
pieChart.setData(details);
pieChart.setTitle("Kosten samenvatting");
pieChart.setLegendSide(Side.BOTTOM);
pieChart.setLabelsVisible(true);
sp.setContent(pieChart);

Scene scene = new Scene(sp, 600, 500);
dataPaneel.setScene(scene);

add( new Catagorie1Paneel() );                add( new Catagorie3Paneel() );           add( new SamenvattingPaneel() );
add( new Catagorie2Paneel() );                add( new Catagorie4Paneel() );           add( dataPaneel);
}
我尝试了几种方法,但都没有成功。我想可能是一个eventhandler,所以当我按下按钮时,它会更新(仍在尝试,所以处理程序还没有完成,但我卡住了)

提前谢谢

public class SamenvattingPaneel extends JPanel{
private static final long serialVersionUID = 3366301906602088093L;
private JLabel verwachting, huidigeMaand, bespaard;
private JTextField verwachtingText, huidigeMaandText, bespaardText;
private JButton collectAll,updatePieChart;
public static double cst1;

public SamenvattingPaneel (){
    setLayout(new GridLayout(7,4,10,10));
    Border border = BorderFactory.createEmptyBorder(5,5,5,5);
    setBorder(border);
    setBackground(Color.LIGHT_GRAY);

    verwachting = new JLabel("verwacht inkomen ; ");
    verwachting.setHorizontalAlignment(JLabel.RIGHT);
    huidigeMaand = new JLabel("werkelijke uitgave ; ");
    huidigeMaand.setHorizontalAlignment(JLabel.RIGHT);
    bespaard = new JLabel("geld tekort/over : ");
    bespaard.setHorizontalAlignment(JLabel.RIGHT);

    verwachtingText = new JTextField(10);
    verwachtingText.addActionListener(new VerschilHandler());
    verwachtingText.setHorizontalAlignment(JTextField.CENTER);
    huidigeMaandText = new JTextField(10);
    huidigeMaandText.setEditable(false);
    huidigeMaandText.setBackground(Color.GRAY);
    huidigeMaandText.setHorizontalAlignment(JTextField.CENTER);
    bespaardText = new JTextField(10);
    bespaardText.setHorizontalAlignment(JTextField.CENTER);


    collectAll = new JButton("haal alle gegevens op");
    collectAll.addActionListener(new CollectAllHandler());

    updatePieChart = new JButton("update grafiek");
    updatePieChart.addActionListener(new UpdateHandler());


    add(collectAll);                    add(new JLabel(" "));                       add(new JLabel(" "));   
    add(new JLabel(" "));               add(verwachting);                           add(verwachtingText);   
    add(new JLabel(" "));               add(huidigeMaand);                          add(huidigeMaandText);  
    add(new JLabel(" "));               add(new JLabel(" "));                       add(new JLabel(" "));   
    add(new JLabel(" "));               add(bespaard);                              add(bespaardText);  
    add(new JLabel(" "));               add(new JLabel(" "));                       add(new JLabel(" "));   
    add(updatePieChart);                add(new JLabel(" "));                       add(new JLabel(" "));           

}
public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawLine(0, 60, 5000, 60);
}
class CollectAllHandler implements ActionListener{
    public void actionPerformed(ActionEvent e){
        double totaal = 0;
        String temps1 = Catagorie1Paneel.subTotText1.getText();
        double tempd1 = Double.parseDouble(temps1); 
        String temps2 = Catagorie2Paneel.subTotText2.getText();
        double tempd2 = Double.parseDouble(temps2);
        String temps3 = Catagorie3Paneel.subTotText3.getText();
        double tempd3 = Double.parseDouble(temps3);
        String temps4 = Catagorie4Paneel.subTotText4.getText();
        double tempd4 = Double.parseDouble(temps4);

        totaal = tempd1+tempd2+tempd3+tempd4;
        huidigeMaandText.setText(String.format(Locale.US, "%.2f", totaal));
    }   
}
class VerschilHandler implements ActionListener{
    public void actionPerformed(ActionEvent e){
        double verschil = 0;
        String temps5 = verwachtingText.getText();
        double tempd5 = Double.parseDouble(temps5);
        String temps6 = huidigeMaandText.getText();
        double tempd6 = Double.parseDouble(temps6);
        verschil = tempd5 - tempd6;         
        bespaardText.setText(String.format(Locale.US,"%.2f",verschil));

        if(verschil >= 0){
            bespaardText.setBackground(Color.GREEN);
        }
        else{
            bespaardText.setBackground(Color.RED);
        }
    }
}
class UpdateHandler implements ActionListener{
    public void actionPerformed(ActionEvent e){
        String temp1 = Catagorie1Paneel.s v ubTotText1.getText();
        cst1 = Double.parseDouble(temp1);
    }
}