那麼標題是相當自我解釋。我想要使用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. Java:MouseEvent透明JPanel
- 4. 透明JPanel
- 5. 從JPanel刪除透明JPanel
- 6. 圖形不會透明透明JPanel
- 7. Java:如何讓容器的Jscrollpane背景不透明? (即透明)
- 8. 如何讓透明的SVG在Java中透明化?
- 9. Java Swing - 將透明度應用到透明組件上JPanel
- 10. 如何通過透明JPanel添加JComboBox?
- 11. 我如何讓logo和actionBar透明?
- 12. 如何讓jqGrid Style透明
- 13. JLayeredPane中的透明JPanel
- 14. Java Graphics2D和blitting
- 15. 如何使用透明填充縮放Graphics2D圖像
- 16. 在JScrollPane中透明JEditorPane在後臺JPanel
- 17. Java透明JFrame,JVLC和java.awt.Canvas
- 18. 如何讓Tkinter支持PNG透明度?
- 19. 如何讓html中的圖像透明?
- 20. 如何讓我的活動透明?
- 21. 如何讓TreeView背景透明?
- 22. 如何讓QTabWidget看起來透明?
- 23. 如何讓Python curses overlay不透明?
- 24. 如何讓這個漸變透明?
- 25. 如何讓鏈接背景透明?
- 26. JPanel中透明JCheckBox的問題?
- 27. Java - 透明JScrollPane
- 28. 使用Graphics2D擴展類來繪製JPanel
- 29. NullPointerException在自定義JPanel中使用Graphics2D
- 30. Java的graphics2D fillRect不能正常工作與半透明的顏色
安置自己的SSCCE。我們無法猜測你在做什麼。 – camickr 2009-09-06 21:58:09