Transparent Composite
Je veux créer une semi-transparent Composite. Je l'ai fait simplement à l'aide de RGBA valeur de couleur constructeur mais le problème c'est quand je m en utilisant la gestion des événements n'est pas woking correctement. Mon exigence est un semi transparent Composite lorsque la souris entre la frontière de ce groupe d'experts s'est visible et si la souris exit la frontière ne doit pas visible. Je l'ai fait en suivant code, mais le problème est que sa ne fonctionne pas correctement, de façon transparente fond d'écran (RGBA), mais il fonctionne très bien pour la couleur de RVB.
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
public class MDCW extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MDCW frame = new MDCW();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public MDCW() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 1013, 551);
contentPane = new JPanel();
contentPane.setBackground(new Color(0, 139, 139));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
final JPanel panel = new JPanel();
panel.setBackground(new Color(0, 0, 0,50));
panel.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
panel.setBorder(new LineBorder(new Color(255, 255, 255), 5));
}
@Override
public void mouseExited(MouseEvent e) {
panel.setBorder(null);
}
});
panel.setBounds(360, 155, 215, 215);
contentPane.add(panel);
final JPanel panel_1 = new JPanel();
panel_1.setBackground(new Color(0, 0, 0));
panel_1.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
panel_1.setBorder(new LineBorder(new Color(255, 255, 255), 5));
}
@Override
public void mouseExited(MouseEvent e) {
panel_1.setBorder(null);
}
});
panel_1.setBounds(84, 155, 215, 215);
contentPane.add(panel_1);
}
}
OriginalL'auteur Pawan Gupta | 2012-04-07
Vous devez vous connecter pour publier un commentaire.
Composite ne prend pas en charge semi-transparent origines. Il y a deux étapes nécessaires pour prendre soin de ce problème:
D'abord, pour avoir un correctement fonctionnement de la transparence à tous, vous doit
setOpaque(false)
sur le panneau; sinon vous aurez des problèmes, car un panneau opaque est supposé couvrir complètement de ce qui est en dessous de ses limites.Toutefois, lorsque
opaque
estfalse
, le groupe a également ne tire pas son fond (!) donc, vous devrez dessiner un arrière-plan dans paintComponent.Voici une baisse-dans le remplacement de la classe, qui prendra soin de ces deux étapes.
J'ai vérifié qu'il fonctionne dans votre programme si je change le premier panneau de création:
OriginalL'auteur Kevin Reid
Il est facile de faire comme si:
x dans ce cas est le niveau de transparence que vous cherchez
0 invisible, 100 étant solide.
e.g:
Voir:
http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html
http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html
OriginalL'auteur Sheku Kanneh