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