private void add_pie_chart(JPanel panel)
{
JFXPanel dataPanel = new JFXPanel();
PieChart pieChart = new PieChart();
ObservableList<PieChart.Data> data= FXCollections.observableArrayList(
new PieChart.Data("test1", 25),
new PieChart.Data("test 2", 25),
new PieChart.Data("test 3", 25),
new PieChart.Data("test 4", 25)
);
pieChart.setData(data);
pieChart.setTitle("test");
pieChart.setLabelsVisible(true);
Group root = new Group();
root.getChildren().add(pieChart);
Scene scene = new Scene(root);
dataPanel.setScene(scene); //line X
//not getting executing
panel.add(dataPanel, BorderLayout.CENTER);
panel.setVisible(true);
}
我不知道为什么会发生这种情况。Plz帮助..
任何帮助都很感激。提前谢谢...
Swing和JavaFX都是单线程UI工具包,每个工具包都有自己的线程用于呈现UI和处理用户事件。修改Swing组件和创建Swing窗口(例如JFrame
s)必须在AWT事件调度线程上完成。修改JavaFX组件必须在FX应用程序线程上完成。
因此,当您同时使用这两个工具包时,必须小心地将适当的操作委托给适当的线程。Javadocs forJFXPanel
有更多细节。
下面是一个完整的示例,其中包括对代码的轻微修改,并展示了如何将代码的不同部分移动到适当的线程中:
package org.jamesd.examples.piechartswing;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
public class App {
public void startUI() {
JFrame frame = new JFrame();
JFXPanel fxPanel = new JFXPanel();
Platform.runLater(() -> createChart(fxPanel));
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(fxPanel, BorderLayout.CENTER);
frame.add(panel);
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private void createChart(JFXPanel dataPanel) {
PieChart pieChart = new PieChart();
ObservableList<PieChart.Data> data= FXCollections.observableArrayList(
new PieChart.Data("test1", 25),
new PieChart.Data("test 2", 25),
new PieChart.Data("test 3", 25),
new PieChart.Data("test 4", 25)
);
pieChart.setData(data);
pieChart.setTitle("test");
pieChart.setLabelsVisible(true);
Group root = new Group();
root.getChildren().add(pieChart);
Scene scene = new Scene(root);
dataPanel.setScene(scene);
}
public static void main(String[] args) {
App app = new App();
SwingUtilities.invokeLater(app::startUI);
}
}
module org.jamesd.examples.piechartswing {
requires javafx.controls;
requires java.desktop ;
requires javafx.swing ;
exports org.jamesd.examples.piechartswing;
}
我想在FlowLayout和GridBagLayout之间进行权衡。简而言之,我有一些组件要添加到我的JPanel中(我不知道有多少,这是在运行时创建的),我希望这些组件垂直居中。FlowLayout非常适合我的目标,但它在JPanel的顶部添加了组件。所以,我决定使用GridBagConstraints,正如有人在这里建议的那样(Java layout manager垂直中心),但这个解决方案的
问题内容: 如果我有我的Jpanel和我的JFreeChart。如何将此图表添加到JPanel中? 现在,如何在JPanle中添加图表? 问题答案: 从旧的Java论坛线程
问题内容: 如何在jpanel中动态添加组件?当我单击按钮时,我应该有添加按钮,组件应该添加到JPanel。 我的问题是,当我单击添加按钮时,将文本字段和按钮添加到jpanel时,用户可以根据需要将它们添加到jpanel中的任意次数单击添加按钮。我已将scrollerpane添加到我的jpanel,并且jpanel布局管理器设置为null。 问题答案: 像往常一样,除了必须调用: 完成后,因为容器
我是java swing的新手,现在我使用NetBeant使用NetBeans中内置的拖放设计器构建GUI。我现在面临的问题是,我有下面发布的代码,它是在Eclipse中编写的,正如您所看到的,我有一个扩展JPanel的类,我将从WEB_CAM捕获的图像添加到该JPanel中。现在,自从我切换到NetBeans,我使用设计器创建了JFrame、JPanel和JButtons,在我用NetBeans
这段代码来自试图创建JPanel子类的对象的JFrame子类(JPanel子类称为WalkAndJump3)。 我试图通过重写paintComponent来做我在JPanel子类中所做的事情,但它不起作用,我确实将WalkAndJump3 wj声明为实例变量,所以第一行应该没有问题。怎么了?同样,问题是绘制的矩形太小,位置不合适。
我创建了一个JPanel,上面有我需要的所有JRadioButtons(称为PortSettings)。我还有一个按钮,叫做端口设置,当用户单击该按钮时,我需要JPanel上来显示单选按钮。我尝试将JPanel添加到actionlistener中,但没有效果。我的代码在下面。除了portsettings按钮之外,我已经从其他按钮中删除了所有其他ActionListener。如果这个问题让人困惑,我