【问题标题】:Partial transparency in JPanelJPanel 中的部分透明度
【发布时间】:2015-10-25 19:58:08
【问题描述】:

我有一个内部带有图像的框架,我想用我自己的组件(扩展 JComponent)选择该图像的一部分。现在看起来像这样:

但我希望它看起来像这样:

我怎样才能做到这一点?

【问题讨论】:

  • 如果原图是偏蓝色调,只需要在选择框外侧周围涂上偏红色的部分透明色即可。 1) 为了尽快获得更好的帮助,请发布minimal reproducible exampleShort, Self Contained, Correct Example。 2) 例如,获取图像的一种方法是热链接到在this Q&A 中看到的图像。
  • "extending java.awt.Component" 顺便说一句,如果这是一个 Swing GUI,请改用 JComponentJPanel
  • "..需要在选择框的外部涂上红色的部分透明色"这将是this code..的一个小变化。

标签: java image swing transparency jcomponent


【解决方案1】:

这实际上取决于您如何绘制组件。如果您使用的是 Graphics,您可以将其转换为 Graphics2D,然后您可以通过 setPaint 或 setComposite 获得透明效果。

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.*;

/**
 * Created by odinsbane on 8/3/15.
 */
public class TransparentOverlay {

    public static void main(String[] args){

        JFrame frame = new JFrame("painting example");

        JPanel panel = new JPanel(){

            @Override
            public void paintComponent(Graphics g){
                Graphics2D g2d = (Graphics2D)g;
                g2d.setPaint(Color.WHITE);
                g2d.fill(new Rectangle(0, 0, 600, 600));
                g2d.setPaint(Color.BLACK);
                g2d.fillOval(0, 0, 600, 600);

                g2d.setPaint(new Color(0f, 0f, 0.7f, 0.5f));
                g2d.fillRect(400, 400, 200, 200);

                g2d.setPaint(Color.GREEN);
                g2d.setComposite(
                    AlphaComposite.getInstance(
                        AlphaComposite.SRC_OVER, 0.8f
                    )
                );

                g2d.fillRect(0,0,200, 200);
                g2d.setPaint(Color.RED);
                g2d.fillRect(400, 0, 200, 200);
            }
        };

        frame.setContentPane(panel);
        frame.setSize(600, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }

}

使用一组合成,之后您的所有绘图都将具有相同的合成,直到您再次更改它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    相关资源
    最近更新 更多