タイトルはかなり自明です。私は、Javaを使ってレイヤーを重ねて2つのパネルを重ねて作りたいと思っています。最上位層にgraphics2dオブジェクトを含むJPanelが含まれているようにします。私はJPanelとgraphics2dの両方が透明な背景を持つようにしたいと思います(私はまだgraphics2dで描画されたコンテンツを表示したい)。どのようにそれを行うことができるか考えている人はいますか?Java JPanelとgraphics2dを透明にする方法は?
答えて
JPanelでsetOpaque(false)を呼び出します.JPanelの背景をペイントしません。
(のJPanelのはは、コンポーネントなどのGraphics2Dオブジェクトが含まれていない - Graphics2DオブジェクトはJPanelのをペイントするために使用される) - あなたはGraphics2Dので得るためにオーバーライドしているものの方法に応じて、あなたはそれが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
Swingコンポーネントのpaint()ではなく、paintComponent()をオーバーライドする必要があります(特殊な場合を除く)。残りの部分について何を言いたいのか分かりません...コードが投稿されていないので、あなたがしていることを正確にはわかりません。私は動作する短い例を投稿します。 – Nate
こんにちはネイト、 ここでプライベートメッセージを送信できるかどうかチェックしています。より良い方法であなたに感謝したがっていました。あなたのサンプルコードはシンプルでわかりました。私はgraphics2dを使っていて、clearRectを呼んでいることに気付いていました。私には常に白い画面が表示されていました。これを変更してコードサンプルに調整した後、それは機能しました!もう一度、ありがとう。 – vondip
- 1. 透明なJPanel over Canvas(VLCJ)
- 2. java透明な背景のJPanelをクリアする
- 3. Java Graphics2D - グラデーションの不透明度を持つ画像を描画する
- 4. 透明なSVGをJavaで透明にするには?
- 5. Graphics2Dは透明な画像を消去しません
- 6. JPanelの透明性の問題
- 7. Graphics2Dを使用して透明で塗りつぶし
- 8. OpenTK.GLControlを透明にする方法
- 9. ビットマップコーナーを透明にする方法
- 10. ナビゲーションバーを透明にする方法
- 11. JTableの背景を透明にする方法は?
- 12. JPanelで背景を描画しないようにする(透明)
- 13. WinAPI透明ウィンドウをクリアする方法
- 14. Java BufferedImageピクセルが透明かどうかを知る方法
- 15. winformウィンドウを透明にする方法と画像を表示する方法
- 16. 主軸を透明にする方法、matplolibでzoomed_inset_axesを透明にしない方法
- 17. Android Nexusでステータスとツールバーを透明にする方法
- 18. 透明円を描く方法は?
- 19. WPF透明性と透明と不透明
- 20. UIImageを徐々に透明にする方法は?
- 21. SurfaceViewの上にカスタムオーバーレイビューを透明にする方法は?
- 22. Java 2Dゲームでスプライトの透明部分を作成する方法は?
- 23. ファブリック内のマスクを透明にする方法は?
- 24. ボタンを非透明にする方法は?
- 25. JCheckBoxの背景を透明にする方法は?
- 26. 画像に透明なボタンを配置する方法は?
- 27. MKMapViewを透明にするが、オーバーレイを不透明にする
- 28. ドラッグイメージを半透明でなく不透明にする
- 29. 透明な背景を持つ透明な背景でムービーを作る方法
- 30. Graphics2Dインスタンスの作成方法は?
ポストあなたのSSCCE。あなたは何をしているのか推測できません。 – camickr