package com.vitco.layout.content.colorchooser; import com.vitco.layout.content.colorchooser.basic.ColorChooserPrototype; import com.vitco.layout.content.colorchooser.basic.Settings; import com.vitco.layout.content.colorchooser.components.HexBox; import com.vitco.layout.content.colorchooser.components.TextChangeListener; import com.vitco.settings.VitcoSettings; import com.vitco.util.misc.ColorTools; import javax.swing.*; import java.awt.*; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; /** * A color chooser that uses hex value input to determine the color. */ public class HexColorChooser extends ColorChooserPrototype { // todo recheck code private boolean focused = false; private Color color = Color.BLACK; private final HexBox input = new HexBox(color); // constructor public HexColorChooser() { input.addTextChangeListener(new TextChangeListener() { @Override public void onChange() { color = input.getValue(); notifyListeners(ColorTools.colorToHSB(color)); } }); input.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { focused = false; input.setValueWithoutRefresh(color); } @Override public void focusGained(FocusEvent e) { focused = true; } }); // add the components setLayout(new BorderLayout()); JLabel label = new JLabel("#"); add(input, BorderLayout.CENTER); add(label, BorderLayout.WEST); // style this window and the components setBorder(BorderFactory.createLineBorder(VitcoSettings.DEFAULT_BORDER_COLOR, 1)); setBackground(Settings.BG_COLOR); Font font = input.getFont(); font = new Font(font.getName(), Font.BOLD, font.getSize()+30); input.setFont(font); input.setBorder(BorderFactory.createEmptyBorder()); label.setFont(font); label.setBackground(Settings.TEXTAREA_BG_COLOR); label.setForeground(Settings.TEXTAREA_TEXT_COLOR); } public final void setColor(float[] hsb) { color = ColorTools.hsbToColor(hsb); if (!focused) { input.setValueWithoutRefresh(color); } } }