如何更改3dPieChart(JFreeChart API)的背景/透明度? [英] How do I change the background / transparency of a 3dPieChart (JFreeChart API)?
问题描述
我已经声明了3DPieChart,并且我想更改其背景/透明度.在这种情况下,背景"是指空白.
I have declared an 3DPieChart, and I want to change its background / transparency. In this case, by 'background' I mean that white space.
如果有帮助的话,这里是实现此图表的功能.
Here's the function that implements this chart, if it's helpful somehow.
//customize panel for visualising the statistics
public void customizeStatisticsPanelWhenButtoninIsPressed()
{
transactionsCenterFinalPanel.setLayout(new BorderLayout());
//center side of then main panel
JPanel statisticsPanelCenter = new JPanel();
statisticsPanelCenter.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
//create a dataset
DefaultPieDataset pieDataSet = new DefaultPieDataset();
//add values to dataset
pieDataSet.setValue("Deposit:", depositCount);
pieDataSet.setValue("Withdraw:", withdrawCount);
pieDataSet.setValue("Transfer:", transferCount);
//create a 3D chart with the given title that appears above the chart
JFreeChart chart = ChartFactory.createPieChart3D(" ", pieDataSet, true, false, true);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(315, 195));
chartPanel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
//declare a pieplot so we can customize the chart
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setInsets(new RectangleInsets(-6.0, 5.0, 5.0, 5.0));
plot.setDirection(Rotation.CLOCKWISE);
plot.setIgnoreZeroValues(true);
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} {1} ({2})"));
plot.setDepthFactor(0.1);
plot.setCircular(true);
plot.setDarkerSides(true);
//create a timer for animation
rotate3DPieChart = new Timer(150, new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
//set the start angle, this increases everytime timer is executed
plot.setStartAngle(pieChartThreadIterator = pieChartThreadIterator + 0.6);
}
});
//south side
JPanel statisticsPanelSouth = new JPanel();
statisticsPanelSouth.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
JButton transactionsCount = new JButton("Count");
statisticsPanelSouth.add(transactionsCount);
transactionsCenterFinalPanel.add(chartPanel, BorderLayout.CENTER);
transactionsCenterFinalPanel.add(statisticsPanelSouth, BorderLayout.SOUTH);
transactions.add(transactionsCenterFinalPanel, BorderLayout.CENTER);
//start the timer (animation starts!)
rotate3DPieChart.start();
revalidate();
}
注意:使用图表作图,然后设置plot.setBackgroundPaint(Color.GRAY)不会有任何好处.它仅更改轮廓内的背景.我希望这一切都是灰色的.我怎样才能做到这一点 ?
Note: Using a plot for the chart, then set plot.setBackgroundPaint(Color.GRAY) doesn't do any good. It only changes the background inside outline. I want it all to be gray. How can I do that ?
推荐答案
示例中绘图周围的空白是图表的背景.您可以如下所示设置图像和/或半透明颜色.否则为灰色图像,以50%透明的黄色着色.
The white space surrounding the plot in your example is the chart's background. You can set an image and/or translucent color as shown below. The otherwise gray image in tinted with a 50% transparent yellow.
JFreeChart pieChart = ChartFactory.createPieChart3D(…);
try {//https://www.pinterest.com/pin/79516749641165970/
pieChart.setBackgroundImage(ImageIO.read(new URL(
"https://s-media-cache-ak0.pinimg.com/736x/bb/bf/bf/bbbfbfd869f20db50d3dd4943790020f.jpg")));
} catch (IOException ex) {
ex.printStackTrace(System.err);
}
pieChart.setBackgroundPaint(new Color(0x7fffff00, true));
使用setBackgroundImageAlpha()
可以达到稍微不同的效果.
A slightly different effect can be achieved using setBackgroundImageAlpha()
.
pieChart.setBackgroundPaint(Color.yellow);
pieChart.setBackgroundImageAlpha(0.5f);
这篇关于如何更改3dPieChart(JFreeChart API)的背景/透明度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!