ChartPanel 未在 GUI 中注册为组件

Posted

技术标签:

【中文标题】ChartPanel 未在 GUI 中注册为组件【英文标题】:ChartPanel not registering as a component in a GUI 【发布时间】:2019-05-11 17:45:50 【问题描述】:

我有以下输出。

Recursive call for org.jfree.chart.ChartPanel[chartpanelBoa
Component count 0 for org.jfree.chart.ChartPanel[chartpanelBoa

我运行以获得此输出的代码是

public void enableEverything(Container c)
Component [] p = c.getComponents();
System.out.println("Component count " + c.getComponentCount() + " for " +   
                                c.toString().substring(0,40)  );
for(Component pp : p)
pp.setEnabled(true);
if(pp instanceof Container)
System.out.println("Recursive call for " + pp.toString().substring(0,40));
enableEverything((Container) pp);

else System.out.println("No recursive call");





可以在我的 JPanel 中看到 ChartPanel,但它不会计算图表面板。我期待输出

org.jfree.chart.ChartPanel[chartpanelBoa] 的组件计数 1

在幕后计算组件的因素是什么?

【问题讨论】:

【参考方案1】:

org.jfree.chart.ChartPanel 的源代码所示,ChartPanel 是一个 JPanel,但它不包含Component 的嵌套实例。一个handful的Swing组件被导入来处理一个context menu,tooltips等,但是封闭的JFreeChart本身就是纯Java2D。

您似乎想在禁用图表时更改图表的视觉表示。您仍然可以在 ChartPanel 本身上调用 setEnabled() 以利用 JPanel UI 委托。您还可以根据需要修改图表的内部;这个example 使用setBackgroundPaint()setBackgroundImageAlpha() 使背景变暗。

【讨论】:

是的,我希望首先获得图表面板的计数,然后更改视觉表示。我会将 enabled() 设置为 true。 听起来不错;为了比较,您可以“查看活动 Swing 容器层次结构的转储”,如 here 所示。

以上是关于ChartPanel 未在 GUI 中注册为组件的主要内容,如果未能解决你的问题,请参考以下文章

未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0

在订阅方法 ANGULAR 中执行 GUI 方法操作

win7(64)未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序

COM 组件的 windows 安装程序

我可以为未在 PayPal 中注册的用户创建 PayPal 链式付款作为接收方吗?

从Excel中导入数据时,提示“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决办法