Technical Support
🟢 Online now
Hello 👋

How can we help you today?
Contact on WhatsApp
B4X Store
jdashboardUI / Entradas y controles / OfficeColorPicker
Entradas y controles

OfficeColorPicker

Selector de colores estilo Office con paleta temática, colores estándar, hover, selección y More Colors

Buscar en toda jdashboardUI
Fuente
jdashboardUI.b4xlib · Solo API pública
Idioma de la tienda: es
Referencia visual — OfficeColorPicker
Referencia basada en la estructura real del componente: color seleccionado, Theme Colors, Standard colors y More Colors.
REFERENCE
OfficeColorPicker con colores de tema y colores estándar

Qué es OfficeColorPicker

OfficeColorPicker es un selector de colores para B4J inspirado en la paleta clásica de Microsoft Office.

Está pensado para elegir colores rápidamente desde una cuadrícula conocida: color seleccionado, colores de tema, variantes claras y oscuras, colores estándar y un botón opcional More Colors....

A diferencia de JColorPicker, que ofrece selección HSV continua, alpha y valor hexadecimal, OfficeColorPicker usa una paleta discreta estilo Office. Resulta especialmente útil en Ribbon UI, editores de documentos, formatos, firmas y herramientas de diseño.

Estructura del control

OfficeColorPicker
├── Selected Color
├── Theme Colors
│   ├── 10 colores base
│   └── 6 variantes por columna
├── Standard colors
│   └── 10 colores estándar
└── More Colors... (opcional)

Cuando el usuario pulsa una casilla de color:

  1. SelectedColor cambia al nuevo color.
  2. La vista previa superior se actualiza.
  3. La casilla elegida recibe un borde naranja.
  4. Se dispara el evento ColorSelected.

Dependencias

El código real del módulo usa principalmente:

  • jFX;
  • XUI;
  • B4XView;
  • JavaObject;
  • janimations.

JavaObject se utiliza para el cursor y los eventos de hover de JavaFX. janimations se usa para el efecto Ripple al seleccionar un color.

Para un uso normal no necesitas manejar esas piezas directamente.

Uso desde el Designer

Agrega OfficeColorPicker como Custom View en el Designer.

Supongamos que el control se llama OfficeColorPicker1.

Private Sub OfficeColorPicker1_ColorSelected(Clr As Int)
    Log("Color seleccionado: " & Clr)
End Sub

El color actual también se puede leer directamente:

Dim Clr As Int = OfficeColorPicker1.SelectedColor

Ejemplo completo

Private Sub OfficeColorPicker1_ColorSelected(Clr As Int)
    pnlPreview.Color = Clr

    Dim HexColor As String
    HexColor = "#" & Bit.ToHexString(Clr).ToUpperCase

    Log("Nuevo color: " & HexColor)
End Sub

Private Sub OfficeColorPicker1_MoreClick(Clr As Int)
    Log("El usuario quiere más colores. Color actual: " & Clr)
End Sub

El botón More Colors... no abre automáticamente otro selector. Su función es disparar MoreClick para que la aplicación decida qué mostrar.

Integración con JColorPicker

Una combinación práctica es usar:

  • OfficeColorPicker para selección rápida.
  • JColorPicker para seleccionar cualquier color con mayor precisión.
Private Sub OfficeColorPicker1_MoreClick(Clr As Int)
    AdvancedColorPicker.SelectedColor = Clr
    AdvancedColorPicker.SetVisible(True)
End Sub

Así puedes mantener la experiencia tipo Office y ofrecer un selector avanzado solo cuando haga falta.

Crearlo desde código

OfficeColorPicker también expone AddToParent.

Private OfficePicker As OfficeColorPicker

Private Sub CreateOfficePicker
    OfficePicker.Initialize(Me, "OfficePicker")

    OfficePicker.ThemeTitle = "Colores del tema"
    OfficePicker.ButtonText = "Más colores..."
    OfficePicker.ShowMoreColors = True
    OfficePicker.TextColor = xui.Color_Black
    OfficePicker.BackgroundColor = xui.Color_White
    OfficePicker.SelectedColor = 0xFF4472C4

    OfficePicker.AddToParent(pnlColors, 296)
End Sub

Eventos:

Private Sub OfficePicker_ColorSelected(Clr As Int)
    Log(Clr)
End Sub

Private Sub OfficePicker_MoreClick(Clr As Int)
    Log("Más colores: " & Clr)
End Sub

AddToParent

La firma pública real es:

AddToParent(Parent As B4XView, Width As Int)

El componente crea internamente su base, calcula la altura final, la agrega al Parent y ajusta el tamaño del contenedor al ancho y alto calculados.

Esto es especialmente útil para paneles flotantes, popups o menús personalizados.

Eventos

ColorSelected

Se dispara cuando el usuario pulsa una casilla.

Private Sub OfficePicker_ColorSelected(Clr As Int)
    Log(Clr)
End Sub

Clr contiene el color B4X / ARGB seleccionado.

MoreClick

Se dispara al pulsar More Colors....

Private Sub OfficePicker_MoreClick(Clr As Int)
    Log(Clr)
End Sub

Clr contiene el color seleccionado en ese momento.

SelectedColor

Establecer:

OfficePicker.SelectedColor = 0xFF5B9BD5

Leer:

Dim Clr As Int = OfficePicker.SelectedColor

Si la vista ya existe, la previsualización se actualiza inmediatamente y el control intenta resaltar una casilla equivalente dentro de la paleta.

Colores de tema

La implementación utiliza diez colores base y genera seis variantes verticales para cada columna.

Los factores reales son:

+0.8
+0.6
+0.4
 0
-0.25
-0.5

Los valores positivos aclaran el color hacia blanco. Los negativos lo oscurecen hacia negro.

Esto produce la cuadrícula característica de Office sin necesidad de declarar manualmente cada tono.

Colores estándar

La fila inferior incluye diez colores predefinidos:

  • rojo oscuro;
  • rojo;
  • dorado;
  • amarillo;
  • verde claro;
  • verde;
  • cian;
  • azul;
  • azul oscuro;
  • púrpura.

Hover y selección

Cada casilla usa eventos JavaFX de entrada y salida del mouse.

Al pasar el mouse se muestra un borde naranja. La casilla seleccionada mantiene un borde naranja de 2dip y las demás usan un borde gris fino.

Al seleccionar también se ejecuta un efecto Ripple mediante janimations.

AutoFitWidth

AutoFitWidth calcula un ancho aproximado según el título más largo.

OfficePicker.AutoFitWidth

El ancho mínimo calculado es 200.

Puede ser útil al traducir títulos o cambiar el tamaño de fuente.

Propiedades del Designer

Propiedad Tipo Predeterminado Uso
MainWidth Int 220 Ancho principal
ThemeTitle String Theme Colors Título de la paleta temática
StdTitle String Standard colors Título de colores estándar
AutoTitle String Selected Color Texto de la previsualización
ButtonText String More Colors... Texto del botón inferior
ShowMoreColors Boolean True Muestra u oculta el botón
TextColor Color Negro Color del texto
FontSize Int 11 Tamaño general de fuente
SelectedColor Color Negro Color inicial

Propiedades públicas en ejecución

OfficePicker.TextColor = xui.Color_DarkGray
OfficePicker.BackgroundColor = xui.Color_White
OfficePicker.FontSize = 12
OfficePicker.ThemeTitle = "Colores del tema"
OfficePicker.ButtonText = "Más colores..."
OfficePicker.ShowMoreColors = True
OfficePicker.SelectedColor = 0xFF4472C4

BackgroundColor se aplica inmediatamente si la base ya existe. FontSize reconstruye la interfaz.

Si usas AddToParent, configura ThemeTitle, ButtonText, ShowMoreColors y TextColor antes de llamar a AddToParent para construir la interfaz directamente con esos valores.

API pública

Método / propiedad Uso
Initialize(Callback, EventName) Inicializa el componente
DesignerCreateView(...) Integración con el Designer
AddToParent(Parent, Width) Lo crea desde código
AutoFitWidth Ajusta el ancho según los títulos
SelectedColor Obtiene / establece el color
TextColor Color del texto
BackgroundColor Color del fondo
FontSize Tamaño general de fuente
ThemeTitle Título de Theme Colors
ButtonText Texto de More Colors
ShowMoreColors Muestra / oculta More Colors
mBase Base visual del componente

OfficeColorPicker vs JColorPicker

Característica OfficeColorPicker JColorPicker
Tipo de selector Paleta Office HSV continuo
Colores rápidos Sí No es su objetivo principal
Variantes de tema Sí Selección libre
Alpha No Sí
Hexadecimal editable No Sí
More Colors Evento para integrar otro selector No necesario
Ideal para Ribbon, documentos, formatos, firmas Cualquier color
AddToParent Sí Sí

No son componentes duplicados: cubren dos formas diferentes de seleccionar color.

Patrón recomendado

OfficePicker.Initialize(Me, "OfficePicker")
OfficePicker.SelectedColor = xui.Color_Blue
OfficePicker.AddToParent(pnlColorMenu, 296)

Private Sub OfficePicker_ColorSelected(Clr As Int)
    CurrentColor = Clr
    UpdatePreview
End Sub

Private Sub OfficePicker_MoreClick(Clr As Int)
    ShowAdvancedColorDialog(Clr)
End Sub