Qué es JColorPicker
JColorPicker es el selector avanzado de color de jdashboardUI para B4J.
A diferencia de OfficeColorPicker, que trabaja con una paleta discreta estilo Office, JColorPicker permite seleccionar prácticamente cualquier color mediante:
- área principal de saturación y brillo;
- barra de tono (Hue);
- barra de transparencia (Alpha);
- vista previa circular del color;
- entrada hexadecimal editable;
- evento
ColorChanged; - modo normal o flotante.
Nota del código fuente actual: la clase contiene
#ExcludeFromLibrary: true. Esta documentación refleja la implementación real del módulo; su disponibilidad directa desde una distribución compilada depende de cómo se empaquete esa versión.
Cómo funciona
JColorPicker
├── Saturación / brillo
├── Hue
├── Alpha
├── Color seleccionado
└── Hexadecimal
El área grande combina Saturation y Value / Brightness. La barra multicolor cambia el Hue y la barra inferior cambia el Alpha.
Al mover cualquiera de los selectores se recalcula el color y se dispara:
ColorChanged(Clr As Int)
Dependencias
El código real usa principalmente:
XUI;JFX;B4XView;B4XCanvas;BitmapCreator;jdashboardUtils.
BitmapCreator genera las superficies de color, Hue y Alpha. jdashboardUtils se utiliza para el campo hexadecimal y algunos ajustes visuales.
Uso desde el Designer
Agrega JColorPicker como Custom View en el Designer.
Supongamos que el control se llama JColorPicker1:
Private Sub JColorPicker1_ColorChanged(Clr As Int)
pnlPreview.Color = Clr
Log(Clr)
End Sub
Leer el color seleccionado
SelectedColor está expuesto para lectura:
Dim Clr As Int = JColorPicker1.SelectedColor
Devuelve el color ARGB construido con Hue, Saturation, Value y Alpha.
Establecer un color desde código
Para lectura y escritura usa SelectedColor2:
JColorPicker1.SelectedColor2 = 0xFF5B9BD5
Dim Clr As Int = JColorPicker1.SelectedColor2
Al asignarlo, el control convierte el color a HSV y actualiza Hue, Alpha, el punto de selección, la vista previa y el hexadecimal.
Trabajar con HSV + Alpha
SelectedHSVColor contiene:
H, S, V, Alpha
Ejemplo:
Dim HSV() As Object = Array(200, 0.55, 0.90, 255)
JColorPicker1.SelectedHSVColor = HSV
Leerlo:
Dim HSV() As Object = JColorPicker1.SelectedHSVColor
Log("Hue: " & HSV(0))
Log("Saturation: " & HSV(1))
Log("Value: " & HSV(2))
Log("Alpha: " & HSV(3))
Convertir un color a HSV
Dim HSV() As Object = JColorPicker1.ColorToHSV(0xFF5B9BD5)
El resultado vuelve a ser un array con H, S, V, Alpha.
Campo hexadecimal
El campo inferior acepta:
#RRGGBB
#AARRGGBB
Por ejemplo:
#96C8E5
#FF96C8E5
Cuando el texto tiene un formato válido, JColorPicker convierte el hexadecimal, actualiza HSV y dispara ColorChanged.
Cuando el usuario cambia el color desde la interfaz, el campo hexadecimal también se actualiza automáticamente.
Alpha / transparencia
La barra Alpha trabaja entre:
0 = totalmente transparente
255 = totalmente opaco
La implementación usa un fondo cuadriculado para que la transparencia sea visible.
Modo flotante
Desde el Designer puedes activar:
Floating Mode = True
En este modo el componente crea un contenedor con:
- título Color Picker;
- borde redondeado;
- botón de cerrar;
- selector debajo de la barra de título.
También se puede activar desde código:
JColorPicker1.Floating = True
Consultar:
Log(JColorPicker1.Floating)
Mostrar y ocultar
Especialmente útil en modo flotante:
JColorPicker1.SetVisible(True)
JColorPicker1.SetVisible(False)
El botón de cerrar del modo flotante oculta mBase.
Crear JColorPicker desde código
JColorPicker incluye AddToParent.
La firma pública es:
AddToParent(Parent As B4XView, _
l As Int, _
t As Int, _
w As Int, _
h As Int, _
Colorborder As Int, _
InitialColor As Int)
Ejemplo:
Private Picker As JColorPicker
Private Sub CreateColorPicker
Picker.Initialize(Me, "Picker")
Picker.Floating = False
Picker.AddToParent( _
pnlColors, _
0, _
0, _
290dip, _
360dip, _
xui.Color_LightGray, _
0xFF96C8E5)
End Sub
Private Sub Picker_ColorChanged(Clr As Int)
pnlPreview.Color = Clr
End Sub
Ejemplo flotante
Private FloatingPicker As JColorPicker
Private Sub CreateFloatingPicker
FloatingPicker.Initialize(Me, "FloatingPicker")
FloatingPicker.Floating = True
FloatingPicker.AddToParent( _
MainForm.RootPane, _
40dip, _
40dip, _
290dip, _
390dip, _
xui.Color_LightGray, _
xui.Color_Blue)
FloatingPicker.SetVisible(False)
End Sub
Private Sub btnColor_Click
FloatingPicker.SetVisible(True)
End Sub
Private Sub FloatingPicker_ColorChanged(Clr As Int)
btnColor.Color = Clr
End Sub
Colores y apariencia
BordersColor
JColorPicker1.BordersColor = xui.Color_Gray
BackgroundColor
JColorPicker1.BackgroundColor = xui.Color_White
TextColor
JColorPicker1.TextColor = xui.Color_DarkGray
Propiedades del Designer
| Propiedad | Predeterminado | Uso |
|---|---|---|
BorderColor |
0xFFFFFFFF |
Color de borde |
PanelBackgroundColor |
0xFFFFFFFF |
Fondo del componente |
TextAreaTextColor |
0xFF000000 |
Texto del campo hexadecimal |
FloatingMode |
False |
Activa el contenedor flotante |
Evento ColorChanged
Private Sub JColorPicker1_ColorChanged(Clr As Int)
Log("ARGB: " & Clr)
End Sub
Se dispara al cambiar el color desde el área principal, Hue, Alpha o un hexadecimal válido.
API pública
| Método / propiedad | Uso |
|---|---|
Initialize(Callback, EventName) |
Inicializa el control |
DesignerCreateView(...) |
Integración con el Designer |
AddToParent(...) |
Creación desde código |
SetVisible(Boolean) |
Muestra / oculta |
SelectedColor |
Color actual, lectura |
SelectedColor2 |
Color actual, lectura y escritura |
SelectedHSVColor |
H, S, V y Alpha |
ColorToHSV(Clr) |
Convierte ARGB a HSV + Alpha |
BordersColor |
Color de borde |
BackgroundColor |
Fondo |
TextColor |
Texto hexadecimal |
Floating |
Activa / consulta modo flotante |
mBase |
Vista base |
JColorPicker vs OfficeColorPicker
| Característica | JColorPicker | OfficeColorPicker |
|---|---|---|
| Tipo | Selector continuo | Paleta discreta |
| Saturación / brillo | Sí | No |
| Hue | Sí | No |
| Alpha | Sí | No |
| Hexadecimal | Sí, editable | No |
| Paleta estilo Office | No | Sí |
| Colores de tema | Selección libre | Sí |
| Modo flotante | Sí | No |
| AddToParent | Sí | Sí |
| Mejor para | Elegir cualquier color | Selección rápida |
Una combinación muy práctica es usar OfficeColorPicker como selección rápida y abrir JColorPicker desde More Colors....
Patrón recomendado
Private Sub OfficePicker_MoreClick(Clr As Int)
AdvancedPicker.SelectedColor2 = Clr
AdvancedPicker.SetVisible(True)
End Sub
Private Sub AdvancedPicker_ColorChanged(Clr As Int)
CurrentColor = Clr
UpdatePreview
End Sub