Я какое-то время возился с этим и мне нужно немного прояснить прозрачность и отображение объектов (в данном случае прямоугольников).
//paintComponent ======================================================================
@Override public void paintComponent(Graphics g) {
super.paintComponent(g); // Ask parent to paint background.
Graphics2D g2d = (Graphics2D)g;
// create the transparency for the text & block
Composite origComp = g2d.getComposite();
Composite comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f);
// create the rectangle to represent the memory partition block
// x = address position h = amount of memory (y & w are predefined for the display block)
Rectangle2D rect = new Rectangle2D.Double(x, y, w, h); // create the rectangle
g2d.setComposite(comp); // set it to transparent
g2d.setPaint(partColor); // set it's color
g2d.fill(rect); // fill it in
g2d.setComposite(origComp);
// draw the text with color, type and size and center the text in the block created above
g2d.setPaint(Color.black);
g2d.setFont(new Font("Tahoma", Font.PLAIN, 12));
g2d.drawString(text, (int)(rect.getCenterX()-text.length()), (int)rect.getCenterY());
}
Можно подумать, что это все, что вам нужно, чтобы этот прямоугольник казался почти прозрачным поверх другого без применения Composite. По какой-то причине это не так. Я что-то пропустил?