首页 > 解决方案 > ChartPanel 未在 GUI 中注册为组件

问题描述

我有以下输出。

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");
}



}

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

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

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

标签: javaswingcomponentsjfreechart

解决方案


如源代码所示org.jfree.chart.ChartPanel, aChartPanel 是 a JPanel,但它不包含 的嵌套实例Component。导入了一些Swing 组件来处理上下文菜单、工具提示等,但其JFreeChart本身是纯Java2D的。

看起来您想在禁用图表时更改图表的视觉表示。您仍然可以调用自身setEnabled()ChartPanel利用JPanelUI 委托。您还可以根据需要修改图表的内部;此示例setBackgroundPaint()使用或使背景变暗setBackgroundImageAlpha()


推荐阅读