lunes, 5 de julio de 2021

Añadir componente personalizado en la zona derecha de Forms

ADVERTENCIA: Lo que voy a comentar en esta entrada utiliza funciones no documentadas de Forms. Funciona con la versión actual 12.2.1.4.0, pero no puedo ofrecer ninguna garantía de que en futuras versiones funcione o lo haga de esta forma.

Oracle Forms utiliza Java para ejecutarse en el cliente y proporciona herramientas para poder integrar componentes Java personalizados (Bean Area), precisamente estos componentes son los que voy a mostrar como a través de ellos alterar el comportamiento nativo de Forms.

Lo primero es conocer que el tipo de layout Java que usa Forms.

BorderLayout: https://docs.oracle.com/javase/7/docs/api/java/awt/BorderLayout.html


Donde:

  • North: Menú superior y botonera horizontal.
  • West: Botonera vertical.
  • South: Barra de estado.
  • Center: Ventana del programa Forms.
Del BorderLayout no han usado la zona East. Veamos cómo podemos utilizarla para lo que nos interese.

Una vez inicialicemos la zona "East" quedará visible para todos los programas Forms que tengamos abiertos, por lo que va a ser una zona común a toda la aplicación.

Para inicializarla vamos a utilizar un Bean Area que estará oculto en un programa, para ello añadimos al lienzo un ITEM de tipo "Bean Area", en "Implementation Class" indicaremos una clase de implementación que más adelante veremos en detalle y ponemos el item en el lienzo con tamaño 0, 0 para que no sea visible para el usuario.


Lo importante de esto es lo que se hace en la clase de implementación. Para que según se inicialice el bean area también inicialice la zona "East" del BorderLayout haremos lo siguiente:

package com.test.efm;

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JLabel;
import oracle.forms.handler.IHandler;
import oracle.forms.ui.VBean;

public class BeanExample extends VBean {
  transient IHandler handler = null;
  private java.awt.Frame frame = null;

  public void init(IHandler handler) {
    super.init(handler);
    this.handler = handler;
    this.frame = this.handler.getApplet().getFrame();
    JLabel eastLabel = new JLabel("EAST", JLabel.CENTER);
    eastLabel.setOpaque(true);
    eastLabel.setBackground(Color.YELLOW);
    eastLabel.setPreferredSize(new Dimension(190,768));
    this.frame.add("East", eastLabel);
    frame.validate();
  }
}


Con handler.getApplet().getFrame() hacemos referencia al frame con el BorderLayout y luego con frame.add("East", xxxx); añadimos el componente.

Resultado:

Video ejemplo:




1 comentario:

Anónimo dijo...

Kadytov Slot Online Casino Game Slot Gacor – Get Free Coins
Slot Gacor 메리트 카지노 주소 – Deposit Pulsa dan E-Wallet Pulsa Game Slot febcasino Gacor (श्णेपतीतीरीस्डिमंद्गपतीद्गपतीरीस्डिमंद्गपतीरीस्डिमंद्गपतीरीस्डिमंद्गपतीर kadangpintar