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");
答案 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();
}