problema è che le relazioni pulsante essendo completamente opaco quando in realtà non lo è (dovuto al colore parzialmente trasparente)
but.setOpaque(false);
BTW: come vedi ho cambiato il nome del campo per conformarsi java denominazione convenzioni :-)
Modifica
arggghh .. perso che, mi spiace. Necessità di verificare ciò che facciamo in SwingX, dalla cima della mia testa direi è necessario eseguire l'override paintComponent e gestire lo sfondo dipinto da soli, come
/**
* @inherited <p>
*/
@Override
protected void paintComponent(Graphics g) {
if (!isOpaque() && getBackground().getAlpha() < 255) {
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
}
super.paintComponent(g);
}
non ho provato, anche se, forse la "sempre più opaco" è tornato di nuovo con il fare così .. tornerà domani
Edit 2
bene, controllato - il codice modificato funziona correttamente. Quindi, in sintesi: componenti con sfondo trasparente
- devono relazione che essi non sono opache di non confondere il meccanismo di pittura di default
- deve prendere sopra lo sfondo dipinto e riempirlo con il colore di sfondo stessi (SwingX JXPanel fi fa dal supporto esplicito per una proprietà alpha)
per la vostra convenienza, ecco un piccolo eseguibile con sfondo errata/corretta side-by-side
public class TransparentButton {
public TransparentButton() {
JWindow incorrectOpaque = createWindow("incorrect opaque", true);
incorrectOpaque.setLocation(600, 600);
incorrectOpaque.setVisible(true);
JWindow correctOpaque = createWindow("correct opaque", false);
correctOpaque.setLocation(800, 600);
correctOpaque.setVisible(true);
}
private JButton createButton(final boolean opaque) {
JButton but = new JButton("Testing") {
/**
* @inherited <p>
* Overridden to take over background painting with
* transparent color.
*/
@Override
protected void paintComponent(Graphics g) {
if (!isOpaque() && getBackground().getAlpha() < 255) {
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
}
super.paintComponent(g);
}
};
but.setBackground(new Color(0, 0, 0, 100));
but.setForeground(new Color(70, 155, 255));
but.setOpaque(opaque);
return but;
}
private JWindow createWindow(String text, boolean opaque) {
JWindow window = new JWindow();
JButton but = createButton(opaque);
window.add(but);
window.add(new JLabel(""), BorderLayout.SOUTH);
window.setOpacity(0.5f);
window.setBackground(new Color(0, 0, 0, 0));
window.setSize(new Dimension(200, 100));
return window;
}
public static void main(String[] Args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TransparentButton();
}
});
}
@SuppressWarnings("unused")
private static final Logger LOG = Logger.getLogger(TransparentButton.class
.getName());
}
Per un aiuto migliore, pubblicare un [SSCCE] (http://pscode.org/sscce.html). –
Acquista [Filthy Rich Clients] (http://filthyrichclients.org/) di Haase e Guy. Entra in tutti i dettagli necessari per realizzare componenti trasparenti e poi alcuni. In tutto un ** ottimo libro per programmatori Java Swing. –