将多个透明JComponents对象添加到一个JPanel

时间:2014-11-11 20:08:11

标签: java swing jfreechart jcomponent

这个问题困扰着我很多。

假设我有两个名为DrawProfilePlotData的不同类。这些类扩展JComponent。我还有一个名为JPanel的个人资料。我想先将DrawProfile添加到我的个人资料JPanel,然后我想添加PlotDataDrawProfilePlotData类实施paintComponent方法)。 DrawProfile类将绘制一些由不同颜色填充的矩形形状。之后,PlotData就像普通情节一样,将位于DrawProfile(一个不同颜色的矩形)的顶部。我希望PlotData根据DrawProfile不同的彩色形状设置背景。它可以写成如下:

profile.setLayout(new OverlayLayout(profile));
profile.setPreferredSize(new Dimension(400,650));
profile.add(new DrawProfile());
profile.add(new PlotData());

请注意,我使用了profile.setOpaque(),但它对我没有帮助。我将AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)用于DrawProfile。它有效,但问题是散点图颜色受DrawProfile个对象的影响,并且颜色不清晰。你可以看到我的努力here。最后,我将主JPanel(个人资料)添加到JFrame

编辑: 关于可运行的代码,这很难。因为,代码可能难以处理。 让我的问题更清楚:

DrawProfile中,我按JComponent扩展了课程。我还实现了paintComponent()方法,其中draw(Graphics g)内部有一个paintComponent()方法,以便绘制多个不同颜色的矩形。我在AlphaComposite方法中将0.5f设置为paintComponent()

PlotData课程中,我使用了JFreechart(XYplot),此课程扩展了JPanel。在这个课程中,有一个paintComponent()方法可以绘图(我不会在这里做任何奇怪的事情)。在paintComponent()内,我无法触及AlphaComposite(事实上,它是1.0f)。

通过上面的方式,我能够完成我的工作。但正如您在我提供的链接中看到的那样,PlotData对象没有鲜明的颜色。

请注意PlotData扩展' JPanel',而DrawProfile延伸JComponents

如果我错了,请纠正我。似乎当我们将JComponents个对象添加到JPanel时,第一个添加的JComponent对象将始终位于后面添加的对象的顶部。例如,在我提供的示例中,我首先添加了DrawProfile,因此这个类位于PlotData的顶部,我将其添加为我的第二个JComponent对象。

1 个答案:

答案 0 :(得分:0)

实际上我找到了解决方案。 JFreechart创建默认背景以绘制图表。我在paintComponent()的{​​{1}}中做了什么,我设置PlotData;它解决了我的问题。