Hi!
Ich möchte ein Rechteck mit abgerundeten Ecken, Text und Schatten zeichnen. Soweit - sogut. Den Schatten kann man entweder manuell durch Zeichnen eines weiteren solchen Rechtecks (verschoben) oder einfach durch eine AffineTransform erzeugen.
Jetzt soll das Rechteck aber halbtransparent sein. Und hier beginnt das Problem: Die Transparenz kann man durch AlphaComposite erreichen, aber dann sieht man auch den Schatten durch und das soll nicht so sein.
Kann man das irgendwie verhindern?
Ich hoffe das war klar, ich habe leider keine Möglichkeit ein Bild hochzuladen. Vielleicht hilft auch der Code:
Ich möchte ein Rechteck mit abgerundeten Ecken, Text und Schatten zeichnen. Soweit - sogut. Den Schatten kann man entweder manuell durch Zeichnen eines weiteren solchen Rechtecks (verschoben) oder einfach durch eine AffineTransform erzeugen.
Jetzt soll das Rechteck aber halbtransparent sein. Und hier beginnt das Problem: Die Transparenz kann man durch AlphaComposite erreichen, aber dann sieht man auch den Schatten durch und das soll nicht so sein.
Kann man das irgendwie verhindern?
Ich hoffe das war klar, ich habe leider keine Möglichkeit ein Bild hochzuladen. Vielleicht hilft auch der Code:
Code:
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.geom.AffineTransform;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JComponent;
public class Test extends JComponent {
private String text = "TEST";
public Test() {
super();
setSize(200,200);
setFont(new Font("Dialog",Font.PLAIN,20));
setBackground(new Color(100,150,200));
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
RoundRectangle2D.Float rect = new RoundRectangle2D.Float(
10,
10,
100,
100,
25,
25
);
g2.setPaint(new Color(0, 0, 0, 50));
g2.fill(AffineTransform.getTranslateInstance(10, 10).createTransformedShape(rect));
Stroke s = g2.getStroke();
g2.setStroke(new BasicStroke(2));
g2.setColor(Color.BLACK);
g2.draw(rect);
g2.setStroke(s);
// g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f));
g2.setColor(getBackground());
g2.fill(rect);
g2.setColor(getForeground());
if(getFont() != null) {
FontMetrics fm = getFontMetrics(getFont());
g2.setColor(getForeground());
g2.drawString(
text,
(rect.width - fm.stringWidth(text))/2,
(rect.height - fm.getHeight())/2
);
}
}
}