当插入物为零时,褪色不起作用

时间:2012-08-20 16:56:01

标签: java swing transparency paintcomponent miglayout

 public class FadingLayer extends JPanel {

    public FadingLayer(JPanel panel) {
        // when set to "insets 0 0 0 0", shows the FadingPanel without fading.
        setLayout(new MigLayout("insets 1 0 0 0"));  
        add(panel,"dock center");
        setOpaque(false);
    }

    @Override
    public void paintComponent(Graphics arg0) {
        Graphics2D graphics = (Graphics2D) arg0;
        AlphaComposite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity);
        graphics.setComposite(alpha);
        graphics.setColor(getBackground());
        graphics.fillRect(0, 0, getWidth(), getHeight());
    }
}

这是我正在放置一些褪色效果的面板。使用swing的Timer类更新不透明度。问题是当所有insets值都设置为0时,计时器工作,但我只看到最终结果没有任何淡入淡出效果。但即使其中一个插图被设置为某个非零值,我也可以看到褪色效果。怎么了,请帮帮忙?

编辑: 当面板(添加到FadingPanel)获取完整区域时,会发生这种情况。这是将FadingPanel设置为 - >

的时间
 setLayout(new BorderLayout());
 add(panel,BorderLayout.CENTER);

setLayout(new MigLayout("insets 0 0 0 0"));
add(panel,"dock center");

1 个答案:

答案 0 :(得分:3)

SagarDabas的回答是正确的,我只想做一些小评论

public void paintComponent(Graphics arg0) {
    Graphics2D graphics = (Graphics2D) arg0;
    AlphaComposite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity);
    graphics.setComposite(alpha);
    graphics.setColor(getBackground());
    graphics.fillRect(0, 0, getWidth(), getHeight());
}

操作图形上下文时必须非常小心。上面的代码将影响它之后绘制的所有组件(保留应用的alpha组合)

更好的方法是在开始之前复制图形。

public void paintComponent(Graphics arg0) {
    Graphics2D graphics = (Graphics2D) arg0.create();
    // paint as normal
    graphics.dispose();
}
相关问题