Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx 我想在单击按钮时使饼图可见,折线图不可见_Javafx - Fatal编程技术网

Javafx 我想在单击按钮时使饼图可见,折线图不可见

Javafx 我想在单击按钮时使饼图可见,折线图不可见,javafx,Javafx,我正在尝试制作图表,但我现在被卡住了。我有一份文件,在那里我可以接受挑战。我是JavaFX新手,当我点击一个按钮时,我正试图让两个图表工作。我有一张折线图和一张饼图。图表不起作用,因为我没有数据。我想要的是单击“饼图”,饼图将显示,消息显示“绘制饼图”。饼图不会显示,因为没有数据,但这不是现在的重点。当我单击其中一个图表时,我使图表不可见,一个将可见,另一个不可见。这是我尝试过的一切,但都不起作用。如果您不明白,请发表评论,我会尽力帮助您 控制器 package ala.javafxchart;

我正在尝试制作图表,但我现在被卡住了。我有一份文件,在那里我可以接受挑战。我是JavaFX新手,当我点击一个按钮时,我正试图让两个图表工作。我有一张折线图和一张饼图。图表不起作用,因为我没有数据。我想要的是单击“饼图”,饼图将显示,消息显示“绘制饼图”。饼图不会显示,因为没有数据,但这不是现在的重点。当我单击其中一个图表时,我使图表不可见,一个将可见,另一个不可见。这是我尝试过的一切,但都不起作用。如果您不明白,请发表评论,我会尽力帮助您

控制器

package ala.javafxchart;



import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Label;

public class MainSceneController implements Initializable {

    @FXML
    private Label label;

    @FXML
    private PieChart pieChart;

    @FXML
    private LineChart lineChart;

    @FXML
    private void handlePieChartAction(ActionEvent event) {
        System.out.println("You clicked the Pie Chart!");
        label.setText("Drawing a pie chart!!"); 

        pieChart.setVisible(true);
    }


    @FXML
    private void handleLineChartAction(ActionEvent event) {
        System.out.println("You clicked the Pie Chart!");
        label.setText("Drawing a line chart!!");

        lineChart.setVisible(false);
    }



    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }
}





    @FXML
    private void handleLineChartAction(ActionEvent event) {
        System.out.println("You clicked the Pie Chart!");
        label.setText("Drawing a line chart!!");

        setVisible(lineChart);
    }

    private void setVisible(PieChart chart){

    }

    private void setVisible(LineChart chart){

    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    
}
FXML


试试这个,我对您的fxml做了一些更改,使其更具可读性

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

import java.net.URL;
import java.util.ResourceBundle;

public class MainSceneController implements Initializable {

    public Button lineChartButton;
    public Button pieChartButton;
    public LineChart lineChart;
    public PieChart pieChart;
    public Label label;


    @FXML
    private void handlePieChartAction() {
        System.out.println("You clicked the Pie Chart!");
        label.setText("Drawing a pie chart!!");

        if(pieChart.isVisible())
            pieChart.setVisible(false);
        else
            pieChart.setVisible(true);
    }


    @FXML
    private void handleLineChartAction() {
        System.out.println("You clicked the Line Chart!");
        label.setText("Drawing a line chart!!");


        if(lineChart.isVisible())
            lineChart.setVisible(false);
        else
            lineChart.setVisible(true);
    }



    @Override
    public void initialize(URL location, ResourceBundle resources) {
        // TODO
        lineChartButton.setOnAction(new EventHandler<ActionEvent>() {
            @Override public void handle(ActionEvent e) {
                handleLineChartAction();
            }
        });
        pieChartButton.setOnAction(new EventHandler<ActionEvent>() {
            @Override public void handle(ActionEvent e){
                handlePieChartAction();
            }
        });
    }
}
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.chart.LineChart;
导入javafx.scene.chart.PieChart;
导入javafx.scene.control.Button;
导入javafx.scene.control.Label;
导入java.net.URL;
导入java.util.ResourceBundle;
公共类MainSceneControl实现可初始化{
公共按钮LineChart按钮;
公共按钮;
公共线形图;
公共柱状图;
公共标签;
@FXML
私有无效handlePieChartAction(){
System.out.println(“你点击了饼图!”);
label.setText(“绘制饼图!!”);
if(pieChart.isVisible())
pieChart.setVisible(假);
其他的
pieChart.setVisible(true);
}
@FXML
私有无效handleLineChartAction(){
System.out.println(“你点击了折线图!”);
label.setText(“绘制折线图!!”);
if(lineChart.isVisible())
线形图。设置为可见(假);
其他的
线形图。设置为可见(真);
}
@凌驾
公共void初始化(URL位置、ResourceBundle资源){
//待办事项
lineChartButton.setOnAction(新的EventHandler(){
@重写公共无效句柄(ActionEvent e){
handleLineChartAction();
}
});
setOnAction(新的EventHandler(){
@重写公共无效句柄(ActionEvent e){
HandlePichartAction();
}
});
}
}
这是FXML

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.LineChart?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.chart.PieChart?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="768.0" prefWidth="1366.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MainSceneController">
    <children>
        <BorderPane prefHeight="768.0" prefWidth="1498.0">
            <top>
                <Label text="Chart Demo" BorderPane.alignment="CENTER">
                    <font>
                        <Font size="35.0" />
                    </font>
                </Label>
            </top>
            <left>
                <VBox prefHeight="692.0" prefWidth="241.0" BorderPane.alignment="CENTER">
                    <children>
                        <Button fx:id="lineChartButton" mnemonicParsing="false" prefHeight="45.0" prefWidth="245.0" text="Line Chart" />
                        <Button fx:id="pieChartButton" mnemonicParsing="false" prefHeight="45.0" prefWidth="245.0" text="Pie Chart" />
                    </children>
                </VBox>
            </left>
            <bottom>
                <Label fx:id="label" text="status message" BorderPane.alignment="CENTER">
                    <padding>
                        <Insets right="1400.0" />
                    </padding>
                </Label>
            </bottom>
            <center>
                <StackPane prefHeight="150.0" prefWidth="200.0" BorderPane.alignment="CENTER">
                    <children>
                        <LineChart fx:id="lineChart" title="Lost Luggage 2016" visible="false">
                            <xAxis>
                                <CategoryAxis side="BOTTOM" />
                            </xAxis>
                            <yAxis>
                                <NumberAxis side="LEFT" />
                            </yAxis>
                        </LineChart>
                        <PieChart fx:id="pieChart" title="Lost Luggage 2016" visible="false" />
                    </children>
                </StackPane>
            </center>
        </BorderPane>
    </children>
</AnchorPane>


我将您的按钮重命名为lineChartButton和pieChartButton,而不是lineChart和pieChart,因为这非常混乱,并且为pieChart和lineChart提供了ID。我已更改了控制器,但它仍然不起作用。我真的不知道该怎么办。谢谢你的帮助。我甚至不能运行这个程序。我现在要检查一下我是busylambda表达式在源代码1.7中不受支持如果我已经解决了你的问题,我会让你做剩下的事情这是你的项目不是我的想你如何使用if语句来解决你的问题如果这个答案解决了你的问题,请接受答案,所以其他人不认为这仍然是一个悬而未决的问题提示,请尝试设置第一次单击的另一个图表。setVisible(false);
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.LineChart?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.chart.PieChart?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="768.0" prefWidth="1366.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MainSceneController">
    <children>
        <BorderPane prefHeight="768.0" prefWidth="1498.0">
            <top>
                <Label text="Chart Demo" BorderPane.alignment="CENTER">
                    <font>
                        <Font size="35.0" />
                    </font>
                </Label>
            </top>
            <left>
                <VBox prefHeight="692.0" prefWidth="241.0" BorderPane.alignment="CENTER">
                    <children>
                        <Button fx:id="lineChartButton" mnemonicParsing="false" prefHeight="45.0" prefWidth="245.0" text="Line Chart" />
                        <Button fx:id="pieChartButton" mnemonicParsing="false" prefHeight="45.0" prefWidth="245.0" text="Pie Chart" />
                    </children>
                </VBox>
            </left>
            <bottom>
                <Label fx:id="label" text="status message" BorderPane.alignment="CENTER">
                    <padding>
                        <Insets right="1400.0" />
                    </padding>
                </Label>
            </bottom>
            <center>
                <StackPane prefHeight="150.0" prefWidth="200.0" BorderPane.alignment="CENTER">
                    <children>
                        <LineChart fx:id="lineChart" title="Lost Luggage 2016" visible="false">
                            <xAxis>
                                <CategoryAxis side="BOTTOM" />
                            </xAxis>
                            <yAxis>
                                <NumberAxis side="LEFT" />
                            </yAxis>
                        </LineChart>
                        <PieChart fx:id="pieChart" title="Lost Luggage 2016" visible="false" />
                    </children>
                </StackPane>
            </center>
        </BorderPane>
    </children>
</AnchorPane>