如果我不保留对它们的任何引用,有没有办法将情节列表添加到CombinedDomainXYPlot ?
我希望到达那里,与他们一起工作,并可能将他们从合成的情节中删除。
这是将图表添加到CombinedDomainXYPlot的示例代码:
// axis
DateAxis domainAxis = new DateAxis("Date");
// plot container
CombinedDomainXYPlot plotCombined = new CombinedDomainXYPlot(domainAxis);
// plot 1
XYPlot plot1 = new XYPlot();
plot1.setDomainAxis(domainAxis);
plotCombined.add(plot1);
// plot 2
XYPlot plot2 = new XYPlot();
plot2.setDomainAxis(domainAxis);
plotCombined.add(plot2);
更新1:
我刚试过这段代码,但它并没有返回所有的情节。它不可靠。
for (Object sp : plotCombined.getSubplots()) {
plotCombined.remove((XYPlot)sp);
}
这种删除图表的方法是否正确?
完整的示例代码:
import javax.swing.JFrame;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.XYPlot;
public class sample27 extends JFrame {
public sample27() {
super("sample27");
// axis
DateAxis domainAxis = new DateAxis("Date");
// plot container
CombinedDomainXYPlot plotCombined = new CombinedDomainXYPlot(domainAxis);
// plot 1
XYPlot plot1 = new XYPlot();
plot1.setDomainAxis(domainAxis);
plotCombined.add(plot1);
// plot 2
XYPlot plot2 = new XYPlot();
plot2.setDomainAxis(domainAxis);
plotCombined.add(plot2);
System.out.println("plot count before: " + plotCombined.getSubplots().size());
for (Object sp : plotCombined.getSubplots()) {
System.out.println("removing subplot: " + sp);
plotCombined.remove((XYPlot)sp);
}
System.out.println("plot count after: " + plotCombined.getSubplots().size());
}
public static void main(String[] args) {
new sample27();
}
}
输出:
plot count before: 2
removing subplot: org.jfree.chart.plot.XYPlot@15615099
plot count after: 1
答案 0 :(得分:2)
getSubplots
返回包含所有项目的List
- 此List
是 copy 从使用Collections.unmodifiableList
的角度来看,它返回一个由原始版本支持的新List
。当您遍历List
时,项目实际上已从基础List
中删除,从而影响Collection
上的迭代。
不是依赖迭代(例如for (Object sp : plotCombined.getSubplots())
),而是向后循环数组并使用索引删除项目。
for ( int i = plotCombined.getSubplots().size() - 1; i >= 0; i-- ){
plotCombined.remove((XYPlot)plotCombined.getSubplots().get(i));
}
答案 1 :(得分:1)
作为here所示方法的替代方法,迭代从getSubplots()
返回的不可修改列表构造的可修改列表。
代码:
List<XYPlot> list = new ArrayList<>(plotCombined.getSubplots());
for (XYPlot plot : list) {
plotCombined.remove(plot);
}
控制台:
plot count before: 2 plot count after: 0