package gui; import javax.swing.*; import javax.swing.plaf.basic.BasicToggleButtonUI; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; /** * Taken from: http://www.java-forum.org/awt-swing-javafx-and-swt/67194-jtogglebutton-hintergrundfarbe-beim-druecken-festlegen.html */ public class ColoredToggleButton extends JToggleButton implements ItemListener { protected Color _activatedBGColor; protected Color _deactivatedBGColor; protected Color _activatedFGColor; protected Color _deactivatedFGColor; // // Standard JToggleButton with ActionListeners attached // public ColoredToggleButton() { // super(); // setSelected(false); // } // // // Standard JToggleButton with ActionListeners attached // public ColoredToggleButton(String label) { // super(label); // setSelected(false); // } // // public ColoredToggleButton(Color activatedColor, Color deactivatedColor) { // super(); // _activatedBGColor = activatedColor; // _deactivatedBGColor = deactivatedColor; // setSelected(false); // // Set a new UI because of the toggle button // setUI(new CustomButtonUI(activatedColor)); // setBackground(deactivatedColor); // setContentAreaFilled(false); // //addActionListener(this); // addItemListener(this); // } // // public ColoredToggleButton(String label, Color activatedColor, Color deactivatedColor) { // super(label); // _activatedBGColor = activatedColor; // _deactivatedBGColor = deactivatedColor; // setSelected(false); // // Set a new UI because of the toggle button // setUI(new CustomButtonUI(activatedColor)); // setBackground(deactivatedColor); // setContentAreaFilled(false); // //addActionListener(this); // addItemListener(this); // } public ColoredToggleButton(String label, Color activatedColor, Color deactivatedColor, Color activatedFGColor, Color deactivatedFGColor) { super(label); _activatedBGColor = activatedColor; _deactivatedBGColor = deactivatedColor; _activatedFGColor = activatedFGColor; _deactivatedFGColor = deactivatedFGColor; setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); setSelected(false); // Set a new UI because of the toggle button setUI(new CustomButtonUI(activatedColor)); setBackground(deactivatedColor); setForeground(isSelected() ? Color.yellow : Color.GRAY); setContentAreaFilled(false); //addActionListener(this); addItemListener(this); } public Color getActivatedColor() { return _activatedBGColor; } public Color getDeactivatedColor() { return _deactivatedBGColor; } // Overloaded in order to paint the background protected void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int w = getWidth(); int h = getHeight(); GradientPaint gradient = new GradientPaint(20, 10, getBackground(), 20, h, getBackground(), true); g2.setPaint(gradient); g2.fillRoundRect(0, 0, w, h, 10, 10); super.paintComponent(g); } public void itemStateChanged(ItemEvent arg0) { setForeground(isSelected() ? Color.yellow : Color.GRAY); if (!isSelected()) { setBackground(getDeactivatedColor()); } } } class CustomButtonUI extends BasicToggleButtonUI { private Color _selectedColor; public CustomButtonUI(Color selectedColor) { _selectedColor = selectedColor; } public void paintButtonPressed(Graphics g, AbstractButton b) { if (b.getBackground() != getSelectedColor()) b.setBackground(getSelectedColor()); } public Color getSelectedColor() { return _selectedColor; } }