那么标题是相当自我解释。我想要使用java在层中构建两个面板。我希望顶层包含一个包含graphics2d对象的JPanel。我想让JPanel和graphics2d都具有透明背景(我仍然希望由graphics2d绘制的内容可见)。有没有人有一个想法如何做到这一点?如何让java JPanel和graphics2d透明?
回答
在JPanel上调用setOpaque(false) - 不会绘制JPanel的背景。
根据您要覆盖哪些方法来获得在Graphics2D的(JPanel的不包含 Graphics2D对象就像一个组件 - 一个Graphics2D对象用于绘制的JPanel) - 如果它的paintComponent(),你应该read the JavaDocs for JComponent - 然后先调用super.paintComponent(g),以使不透明度得到满足 - 然后完成剩下的绘画。
工作例如:
package com.stackoverflow.opaque;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class OpaqueExample extends JFrame {
private JLayeredPane layers;
private JPanel up, down;
private JButton toggleOpaque;
public OpaqueExample() {
layers = new JLayeredPane();
down = new JPanel();
down.setBackground(Color.GREEN);
down.setBounds(100, 100, 200, 200);
layers.add(down, new Integer(1));
up = new JPanel() {
public void paintComponent(Graphics og) {
super.paintComponent(og);
Graphics2D g = (Graphics2D)og;
GradientPaint gradient = new GradientPaint(0, 0, Color.BLUE, 10, 0,
Color.WHITE, true);
Polygon poly = new Polygon();
poly.addPoint(10, 10);
poly.addPoint(100, 50);
poly.addPoint(190, 10);
poly.addPoint(150, 100);
poly.addPoint(190, 190);
poly.addPoint(100, 150);
poly.addPoint(10, 190);
poly.addPoint(50, 100);
poly.addPoint(10, 10);
g.setPaint(gradient);
g.fill(poly);
g.setPaint(Color.BLACK);
g.draw(poly);
}
};
up.setBackground(Color.RED);
up.setBounds(150, 150, 200, 200);
layers.add(up, new Integer(2));
getContentPane().add(layers, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
toggleOpaque = new JButton("Toggle Opaque");
toggleOpaque.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
up.setOpaque(!up.isOpaque());
layers.repaint();
}
});
buttonPanel.add(toggleOpaque);
getContentPane().add(buttonPanel, BorderLayout.EAST);
}
public static void main(String[] args) {
JFrame f = new OpaqueExample();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 500);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
好吧,我只用普通的油漆。 当我测试只尝试一个没有graphics2d的jpanel并设置setOpaque(false)它仍然隐藏较低的JPanel。顺便说一句,我正在使用JLayeredPane。 – vondip 2009-09-06 19:46:39
您应该重写paintComponent(),而不是绘制()Swing组件(除了一些特殊情况)。不知道该说些什么......因为没有发布代码,我不知道你在做什么。我会发布一个很有用的简单例子。 – Nate 2009-09-07 12:54:04
嗨Nate, 我一直在检查,如果它可能发送私人消息在这里。希望以更好的方式感谢你。你的示例代码很简单,让我明白。我正在使用我的graphics2d,并注意到我正在调用clearRect,这使我不断用白色屏幕。改变这个和调整到你的代码示例它的工作!再一次,谢谢你。 – vondip 2009-09-07 21:14:14
- 1. Java Graphics2D透明背景
- 2. Java Graphics2D透明渲染
- 3. Graphics2d和Jpanel
- 4. Java Graphics2D绘制透明色的图像
- 5. 如何制作JPanel透明?
- 6. 如何使jPanel半透明?
- 7. Java:MouseEvent透明JPanel
- 8. 透明JPanel
- 9. 从JPanel删除透明JPanel
- 10. 图形不会透明透明JPanel
- 11. 如何让透明的SVG在Java中透明化?
- 12. Java:如何让容器的Jscrollpane背景不透明? (即透明)
- 13. Java Swing - 将透明度应用到透明组件上JPanel
- 14. java清除透明背景的JPanel
- 15. 如何通过透明JPanel添加JComboBox?
- 16. 我如何让logo和actionBar透明?
- 17. 如何让jqGrid Style透明
- 18. 如何让JFrame透明?
- 19. Graphics2D没有清除透明图像
- 20. JLayeredPane中的透明JPanel
- 21. Window JPanel是透明的吗?
- 22. Java Graphics2D和blitting
- 23. Java Graphics2D - 使用渐变不透明度绘制图像
- 24. 如何使用透明填充缩放Graphics2D图像
- 25. 如何使JFrame背景和JPanel透明,仅显示图像
- 26. 如何在另一个JPanel内的JPanel上绘制Graphics2D?
- 27. 如何让透明div中的文字不透明?
- 28. 如何使JPanel变得更透明,更透明并最终消失?
- 29. 在JScrollPane中透明JEditorPane在后台JPanel
- 30. Java透明JFrame,JVLC和java.awt.Canvas
安置自己的SSCCE。我们无法猜测你在做什么。 – camickr 2009-09-06 21:58:09