Un JavaBeans Personalizado y listo para usar como componentes visual
Hola compañeros del foro en esta oportunidad estoy tratando de crear
un componente Beans totalmente personalizado el cual pueda utilizar como
cualquier otro componente visual swing.
lo que busco es añadirle una propiedad por ejemplo tipoDato y en esta propiedad
asignarle valores por ejemplo
- Numerico
- Entero
- Real
y despues poder modificar el valor de esta propiedad en tiempo de diseño desde mi ID Netbeans.
Para un mejor entendimiento, Un claro ejemplo similar a mi problema seria la Prodiedad que tiene la clase JTextField de java
horizontalAlignment y sus valores son
- LEADING
- TRAILING
- RIGHT
- etc..
Explicacion de mi clase
el nombre de mi clase es NewJTextField y lo heredo de JTextField
private int maxlength; //para determinar la longitud maxima de caracteres
tengo tres metodos que filtran los caracteres que el usuario escribe.
Con respecto a estes tres metodos no hay problema funcionan sin problemas.
1. private void soloNumeroEntero()
2. private void soloLetras()
3. private void soloNumeroReal()
lo que no logro es cargar datos en el Jcombobox tipo dato
this.tipoDato.addItem(new String[]{"Numerico", "Entero", "Real"});
Tengo un conocimiento basico en Java Beans, Me late que no estoy programando de la forma correcta
cuando arrastro mi beans a mi Jframe el netbeans me muestra un mensaje
"No se puede crear el componente. asegurese de que es un componente JavaBeans"
pido vuestra ayuda.
gracias.
Mi codigo completo es este
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import javax.swing.JComboBox;
import javax.swing.JTextField;
/** * * @author Administrador */
public class NewJTextField extends JTextField implements Serializable {
/***********Atributos de la Clase********/
private int maxlength = 15;//Determina la longitud de los caracteres
private JComboBox tipoDato;//atributo que contendra valores como Numerico, Entero, Real
public static final String PROP_TIPODATO = "tipoDato";
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
/***********Constructor de la clase**************/
public NewJTextField() {
this.tipoDato.addItem(new String[]{"Numerico", "Entero", "Real"});
/*Verifico que valor de la propiedad ha sido seleccionada*/
if (this.tipoDato.getSelectedItem().equals("Numerico")) {
soloNumeroEntero();
} else if (this.tipoDato.getSelectedItem().equals("Entero")) {
soloNumeroEntero();
} else if (this.tipoDato.getSelectedItem().equals("Real")) {
soloNumeroReal();
}
}
/*********************Metodos selectores y modificadores de la Clase*****************************/
public int getMaxlength() {
return maxlength;
}
public void setMaxlength(int maxlength) {
this.maxlength = maxlength;
}
/**
* Get the value of tipoDato
*
* @return the value of tipoDato
*/
public JComboBox getTipoDato() {
return tipoDato;
}
/**
* Set the value of tipoDato
*
* @param tipoDato new value of tipoDato
*/
public void setTipoDato(JComboBox tipoDato) {
JComboBox oldTipoDato = this.tipoDato;
this.tipoDato = tipoDato;
propertyChangeSupport.firePropertyChange(PROP_TIPODATO, oldTipoDato, tipoDato);
}
/****************Otros metodos****************/
/**
* Add PropertyChangeListener.
*
* @param listener
*/
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
/**
* Remove PropertyChangeListener.
*
* @param listener
*/
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
/*Metodo que filtra caracteres solo acepta Numeros Enteros*/
private void soloNumeroEntero() {
this.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char caracter = e.getKeyChar();
if (getText().length() < getMaxlength()) {
if (!(Character.isDigit(caracter)) && (caracter != KeyEvent.VK_BACK_SPACE)) {
e.consume();
}
} else {
e.consume();
}
}
});
}
/*Metodo que filtra caracteres solo acepta letras*/
private void soloLetras() {
this.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char caracter = e.getKeyChar();
if (getText().length() < getMaxlength()) {
if (!Character.isLetter(caracter)) {
e.consume();
}
} else {
e.consume();
}
}
});
}
/*Metodo que filtra caracteres solo acepta numeros reales*/
private void soloNumeroReal() {
this.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char caracter = e.getKeyChar();
// Verificar si la tecla pulsada no es un digito
if (getText().length() < getMaxlength()) {
if ((!Character.isDigit(caracter))
&& ((caracter < '.') || (caracter > '.'))
&& (caracter != KeyEvent.VK_BACK_SPACE)) {
e.consume(); // ignorar el evento de teclado
} else {
if (getText().contains(".")) {
if ((!Character.isDigit(caracter))
&& (caracter != KeyEvent.VK_BACK_SPACE)) {
e.consume(); // ignorar el evento de teclado
}
}
}
} else {
e.consume();
}
}
});
}
}
- Inicie sesión o regístrese para enviar comentarios
NullPointerException
Creo que en el constructor, el combobox tiene un valor null por lo que al invocar métodos en él, dará un NullPointerException. Al momento de que arrastras el componente, Netbeans intenta crear una instancia de tu clase. Pero si no lo logra, te mandará un mensaje de error como el que te aparece.