1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| public class SimpleDELExemple extends JPanel {
private volatile boolean onOff; // volatile permet à ce que ça fonctionne au mieux même si on allume ou éteint depuis un thread
public SimpleDELExemple(int largeur) {
setPreferredSize(new Dimension(largeur,largeur));
}
public void allumer() {
this.onOff=true;
repaint(); // on change l'état de la DEL, donc il faut redessiner
}
public void eteindre() {
this.onOff=false;
repaint(); // on change l'état de la DEL, donc il faut redessiner
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if ( onOff ) {
// allumée
g.setColor(getForeground());
}
else {
// éteinte
g.setColor(getForeground().darker());
}
Dimension dimension = getPreferredSize();
g.fillOval((getWidth()-dimension.width)/2, (getHeight()-dimension.height)/2, dimension.width, dimension.height); // on dessine la DEL toujours centré
}
public static void main(String[] args) {
JFrame frame = new JFrame("Exemple de DEL");
SimpleDELExemple del = new SimpleDELExemple(24);
del.setForeground(Color.RED); // DEL rouge
JPanel panel = new JPanel(new BorderLayout());
panel.add(del, BorderLayout.CENTER);
JToggleButton interrupteur = new JToggleButton("Allumer");
interrupteur.addActionListener(e-> {
if ( interrupteur.isSelected() ) {
del.allumer();
interrupteur.setText("Eteindre");
}
else {
del.eteindre();
interrupteur.setText("Allumer");
}
});
panel.add(interrupteur, BorderLayout.SOUTH);
frame.getContentPane().add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
} |
Partager