package magic.ui.widget; import magic.ui.FontsAndBorders; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.OverlayLayout; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.SwingUtilities; @SuppressWarnings("serial") public abstract class PanelButton extends TexturedPanel { private final JPanel layeredPanel; private final JPanel overlayPanel; private boolean isValidChoice = false; public PanelButton() { setLayout(new BorderLayout()); setBorder(FontsAndBorders.UP_BORDER); // create subpanel with overlay manager so color overlay and buttons overlap layeredPanel = new JPanel(); layeredPanel.setOpaque(false); final OverlayLayout layout = new OverlayLayout(layeredPanel); layeredPanel.setLayout(layout); // color overlay overlayPanel = new JPanel(); overlayPanel.setVisible(false); overlayPanel.setAlignmentX(0.5f); // align center middle overlayPanel.setAlignmentY(0.5f); layeredPanel.add(overlayPanel); addMouseListener(new MouseAdapter() { private boolean isLeftClick(MouseEvent e) { return SwingUtilities.isLeftMouseButton(e); } @Override public void mousePressed(final MouseEvent event) { if (isLeftClick(event) && isValidChoice) { setBorder(FontsAndBorders.DOWN_BORDER); } } @Override public void mouseReleased(final MouseEvent event) { if (isLeftClick(event)) { setBorder(FontsAndBorders.UP_BORDER); if (PanelButton.this.contains(event.getX(),event.getY())) { PanelButton.this.mouseClicked(); } } } @Override public void mouseEntered(final MouseEvent event) { PanelButton.this.mouseEntered(); } @Override public void mouseExited(final MouseEvent event) { PanelButton.this.mouseExited(); } }); add(layeredPanel, BorderLayout.CENTER); } public void setValid(final boolean valid) { isValidChoice = valid; overlayPanel.setBackground(getValidColor()); overlayPanel.setVisible(valid); } public void setValidNoOverlay(final boolean valid) { isValidChoice = valid; } public void setComponent(final JComponent component) { layeredPanel.add(component); component.setAlignmentX(0.5f); // align center middle component.setAlignmentY(0.5f); } public void mouseClicked() {} public void mouseEntered() {} public void mouseExited() {} public abstract Color getValidColor(); }