Diseñador Online Boton
Diseñador Online Boton
Aunque es un ejemplo sencillo, conozco personas en las que saber como quedara un componente se vuelve bastante frustrante al tener que escribir el codigo y tener que ejecutarlo para saber como se vera, estoy obvio al no usar el editor de Netbeans o algun plugin para los demas editores, es un ejemplo sencillo de como podemos crear nuestros propios editores o diseñadores de componentes.
Codigo
Clase Principal
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
@SuppressWarnings("serial")
public class Principal extends JApplet{
JSplitPane split;
JPanel canvas, propiedades;
JZJButton boton;
public void init(){
setLayout(new BorderLayout());
split=new JSplitPane();
canvas=new JPanel();
canvas.setLayout(null);
boton=new JZJButton("Boton");
boton.setBounds(100, 100, 80, 30);
canvas.add(boton);
propiedades=new JPanel();
JScrollPane scroll=new JScrollPane(boton.obtenerTabla());
scroll.setPreferredSize(new Dimension(220,220));
propiedades.add(scroll);
split.setLeftComponent(canvas);
split.setRightComponent(propiedades);
split.setResizeWeight(0.6);
JPanel codigo=new JPanel();
JButton btn=new JButton("Generar Codigo");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
boton.generarCodigo();
new FormaCodigo(boton.prop);
}
});
codigo.add(btn);
add(split,BorderLayout.CENTER);
add(codigo,BorderLayout.SOUTH);
setBounds(0, 0, 500, 300);
setVisible(true);
}
}
Clase JZJButton
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableModel;
import clases.ComboColores;
import clases.EditorTabla;
import clases.RenderTabla;
@SuppressWarnings("serial")
public class JZJButton extends JButton{
private RenderTabla ert;
private EditorTabla et;
public JComboBox<Integer> tamañofuente;
public JComboBox<String> combofuentes;
public JComboBox<String> estiloFuente;
public ComboColores coloresforeground;
public ComboColores coloresbackground;
public JCheckBox visible;
public JCheckBox habilitado;
public JCheckBox opaque;
public JCheckBox border;
public JCheckBox filled;
public JCheckBox rollover;
public String imgseleccionada="";
JTextField txt;
JTable tabla;
String[] prop=new String[14];
public JZJButton(String texto){
super(texto);
txt=new JTextField();
coloresforeground=new ComboColores();
String fuentes[]=GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
combofuentes=new JComboBox<String>(fuentes);
Integer tamaños[]={6,7,8,9,10,11,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40};
tamañofuente=new JComboBox<Integer>(tamaños);
String estilo[]={" ","Negrita","Cursiva","Plana"};
estiloFuente=new JComboBox<String>(estilo);
coloresbackground=new ComboColores();
visible=new JCheckBox();
habilitado=new JCheckBox();
opaque=new JCheckBox();
border=new JCheckBox();
filled=new JCheckBox();
rollover=new JCheckBox();
restablecerValores();
}
public void generarCodigo(){
prop[0]="JButton btn=new JButton();";
prop[1]="btn.setText(\""+getText()+"\");";
prop[2]="btn.setBounds("+tabla.getValueAt(1, 1).toString()+","+tabla.getValueAt(2, 1).toString()+","+tabla.getValueAt(3, 1).toString()+","+tabla.getValueAt(4, 1).toString()+");";
if(!coloresbackground.getSelectedItem().toString().equalsIgnoreCase("")){
prop[3]="btn.setBackground(Color."+coloresbackground.getSelectedItem().toString()+");";
}
if(estiloFuente.getSelectedIndex()==1){
prop[4]="btn.setFont(new Font(\""+combofuentes.getSelectedItem().toString()+"\",Font.BOLD,"+tamañofuente.getSelectedItem().toString()+"));";
}else{
if(estiloFuente.getSelectedIndex()==2){
prop[4]="btn.setFont(new Font(\""+combofuentes.getSelectedItem().toString()+"\",Font.ITALIC,"+tamañofuente.getSelectedItem().toString()+"));";
}else{
prop[4]="btn.setFont(new Font(\""+combofuentes.getSelectedItem().toString()+"\",Font.PLAIN,"+tamañofuente.getSelectedItem().toString()+"));";
}
}
if(!coloresforeground.getSelectedItem().toString().equalsIgnoreCase("")){
prop[5]="btn.setForeground(Color."+coloresforeground.getSelectedItem().toString()+");";
}
if(getToolTipText()!=null){
prop[6]="btn.setToolTipText(\""+getToolTipText()+"\");";
}
if(visible.isSelected()){
prop[7]="btn.setVisible(true);";
}else{
prop[7]="btn.setvisible(false);";
}
if(habilitado.isSelected()){
prop[8]="btn.setEnabled(true);";
}else{
prop[8]="btn.setEnabled(false);";
}
if(opaque.isSelected()){
prop[9]="btn.setOpaque(true);";
}else{
prop[9]="btn.setOpaque(false);";
}
if(border.isSelected()){
prop[10]="btn.setBorderPainted(true);";
}else{
prop[10]="btn.setBorderPainted(false);";
}
if(filled.isSelected()){
prop[11]="btn.setContentAreaFilled(true);";
}else{
prop[11]="btn.setContentAreaFilled(false);";
}
if(rollover.isSelected()){
prop[12]="btn.setRolloverEnabled(true);";
}else{
prop[12]="btn.setRolloverEnabled(false);";
}
}
public void restablecerValores(){
coloresforeground.setSelectedItem(ComboColores.buscarColor(getForeground()));
combofuentes.setSelectedItem(getFont().getFamily());
tamañofuente.setSelectedItem(getFont().getSize());
if(getFont().getStyle()==Font.BOLD){
estiloFuente.setSelectedIndex(1);
}else{
if(getFont().getStyle()==Font.ITALIC){
estiloFuente.setSelectedIndex(2);
}else{
if(getFont().getStyle()==Font.PLAIN){
estiloFuente.setSelectedIndex(3);
}
}
}
coloresbackground.setSelectedItem(ComboColores.buscarColor(getBackground()));
visible.setSelected(isVisible());
habilitado.setSelected(isEnabled());
opaque.setSelected(isOpaque());
border.setSelected(isBorderPainted());
filled.setSelected(isContentAreaFilled());
rollover.setSelected(isRolloverEnabled());
}
public JTable obtenerTabla(){
DefaultTableModel modelo=new DefaultTableModel();
String datos[][]=new String[17][2];
String columnas[]={"Propiedades","Valor"};
datos[0][0]="Texto";
datos[0][1]=getText();
datos[1][0]="X";
datos[1][1]=""+getLocation().x;
datos[2][0]="Y";
datos[2][1]=""+getLocation().y;
datos[3][0]="Ancho";
datos[3][1]=""+getWidth();
datos[4][0]="Alto";
datos[4][1]=""+getHeight();
datos[5][0]="Color Fondo";
datos[5][1]=""+getBackground();
datos[6][0]="Familia Fuente";
datos[6][1]=""+getFont().getName();
datos[7][0]="Estilo fuente";
datos[7][1]=""+getFont().getName();
datos[8][0]="Tamaño Fuente";
datos[8][1]=""+getFont().getSize();
datos[9][0]="Color Texto";
datos[9][1]=""+getForeground();
datos[10][0]="ToolTip Text";
datos[10][1]=""+getToolTipText();
datos[11][0]="Visible";
datos[11][1]=""+isVisible();
datos[12][0]="Habilitado";
datos[12][1]=""+isEnabled();
datos[13][0]="Opaque";
datos[13][1]=""+isOpaque();
datos[14][0]="Border Painted";
datos[14][1]=""+isBorderPainted();
datos[15][0]="Content Area Filled";
datos[15][1]=""+isContentAreaFilled();
datos[16][0]="Rollover Enabled";
datos[16][1]=""+isRolloverEnabled();
modelo=new DefaultTableModel(datos, columnas);
tabla=new JTable(modelo){
@Override
public boolean isCellEditable(int row, int column) {
// TODO Auto-generated method stub
if(column==0){
return false;
}else{
return true;
}
}
};
tabla.setRowHeight(25);
txt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if(tabla.getSelectedRow()==0){
JZJButton.this.setText(txt.getText());
}
if(tabla.getSelectedRow()==1){
JZJButton.this.setLocation(Integer.parseInt(txt.getText()), Integer.parseInt(tabla.getValueAt(2, 1).toString()));
}
if(tabla.getSelectedRow()==2){
JZJButton.this.setLocation(Integer.parseInt(tabla.getValueAt(3, 1).toString()),Integer.parseInt(txt.getText()));
}
if(tabla.getSelectedRow()==3){
JZJButton.this.setBounds(Integer.parseInt(tabla.getValueAt(1, 1).toString()), Integer.parseInt(tabla.getValueAt(2, 1).toString()), Integer.parseInt(txt.getText()), Integer.parseInt(tabla.getValueAt(4, 1).toString()));
}
if(tabla.getSelectedRow()==4){
JZJButton.this.setBounds(Integer.parseInt(tabla.getValueAt(1, 1).toString()), Integer.parseInt(tabla.getValueAt(2, 1).toString()), Integer.parseInt(tabla.getValueAt(3, 1).toString()),Integer.parseInt(txt.getText()));
}
if(tabla.getSelectedRow()==10){
if(!txt.getText().equalsIgnoreCase("null")){
JZJButton.this.setToolTipText(txt.getText());
}else{
JZJButton.this.setToolTipText(null);
}
}
tabla.setValueAt(txt.getText(), tabla.getSelectedRow(), tabla.getSelectedColumn());
}
});
ert=new RenderTabla();
et=new EditorTabla(txt);
coloresforeground.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent arg0) {
JZJButton.this.setForeground(coloresforeground.getColorSeleccionado(coloresforeground.getSelectedIndex()));
}
});
combofuentes.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent arg0) {
JZJButton.this.setFont(new Font(combofuentes.getSelectedItem().toString(),JZJButton.this.getFont().getStyle(),JZJButton.this.getFont().getSize()));
}
});
tamañofuente.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent arg0) {
JZJButton.this.setFont(new Font(JZJButton.this.getFont().getFamily(),JZJButton.this.getFont().getStyle(),Integer.parseInt(tamañofuente.getSelectedItem().toString())));
}
});
estiloFuente.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent arg0) {
if(estiloFuente.getSelectedItem().toString().equalsIgnoreCase("Negrita")){
JZJButton.this.setFont(new Font(JZJButton.this.getFont().getFamily(),Font.BOLD,JZJButton.this.getFont().getSize()));
}else{
if(estiloFuente.getSelectedItem().toString().equalsIgnoreCase("Cursiva")){
JZJButton.this.setFont(new Font(JZJButton.this.getFont().getFamily(),Font.ITALIC,JZJButton.this.getFont().getSize()));
}else{
if(estiloFuente.getSelectedItem().toString().equalsIgnoreCase("Plana")){
JZJButton.this.setFont(new Font(JZJButton.this.getFont().getFamily(),Font.PLAIN,JZJButton.this.getFont().getSize()));
}
}
}
}
});
coloresbackground.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent arg0) {
JZJButton.this.setBackground(coloresbackground.getColorSeleccionado(coloresbackground.getSelectedIndex()));
}
});
visible.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
if(visible.isSelected()){
JZJButton.this.setVisible(true);
}else{
JZJButton.this.setVisible(false);
}
}
});
habilitado.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
if(habilitado.isSelected()){
JZJButton.this.setEnabled(true);
}else{
JZJButton.this.setEnabled(false);
}
}
});
opaque.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
if(opaque.isSelected()){
JZJButton.this.setOpaque(true);
}else{
JZJButton.this.setOpaque(false);
}
}
});
border.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
if(border.isSelected()){
JZJButton.this.setBorderPainted(true);
}else{
JZJButton.this.setBorderPainted(false);
}
}
});
filled.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
if(filled.isSelected()){
JZJButton.this.setContentAreaFilled(true);
}else{
JZJButton.this.setContentAreaFilled(false);
}
}
});
rollover.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
if(rollover.isSelected()){
JZJButton.this.setRolloverEnabled(true);
}else{
JZJButton.this.setRolloverEnabled(false);
}
}
});
agregarComponenteRenderEditor(coloresbackground, 5);
agregarComponenteRenderEditor(combofuentes, 6);
agregarComponenteRenderEditor(estiloFuente, 7);
agregarComponenteRenderEditor(tamañofuente, 8);
agregarComponenteRenderEditor(coloresforeground, 9);
agregarComponenteRenderEditor(visible, 11);
agregarComponenteRenderEditor(habilitado, 12);
agregarComponenteRenderEditor(opaque, 13);
agregarComponenteRenderEditor(border, 14);
agregarComponenteRenderEditor(filled, 15);
agregarComponenteRenderEditor(rollover, 16);
tabla.getColumn("Valor").setCellEditor(et);
tabla.getColumn("Valor").setCellRenderer(ert);
tabla.getTableHeader().setReorderingAllowed(false);
return tabla;
}
public void agregarComponenteRenderEditor(Component c, int r){
et.setComponente(c, r);
ert.setComponente(c, r);
}
}
Clase EditorTabla
import java.awt.Component;
import java.util.EventObject;
import java.util.Vector;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.CellEditorListener;
public class EditorTabla extends DefaultCellEditor{
Vector<Component> componentes;
Vector<Integer> filas;
JTextField txt;
public EditorTabla(JTextField t) {
super(t);
txt=t;
componentes=new Vector<Component>();
filas=new Vector<Integer>();
}
public void setComponente(Component c, int r){
componentes.add(c);
filas.add(r);
}
@Override
public void addCellEditorListener(CellEditorListener arg0) {
}
@Override
public void cancelCellEditing() {
}
@Override
public Object getCellEditorValue() {
// TODO Auto-generated method stub
for(int i=0;i<componentes.size();i++){
if(componentes.get(i).getClass().getName().equalsIgnoreCase("clases.ComboColores")){
return ((ComboColores)componentes.get(i)).getSelectedItem();
}
if(componentes.get(i) instanceof JCheckBox){
return ((JCheckBox)componentes.get(i)).isSelected();
}
}
return txt.getText();
}
@Override
public boolean isCellEditable(EventObject arg0) {
return true;
}
@Override
public void removeCellEditorListener(CellEditorListener arg0) {
// TODO Auto-generated method stub
}
@Override
public boolean shouldSelectCell(EventObject arg0) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean stopCellEditing() {
// TODO Auto-generated method stub
return true;
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
Component cell=super.getTableCellEditorComponent(table, value, isSelected, row, column);
for (int i=0;i<componentes.size();i++) {
if(row==filas.get(i) && column==1){
return componentes.get(i);
}
}
return cell;
}
}
Clase RenderTabla
import java.awt.Component;
import java.util.Vector;
import javax.swing.DefaultCellEditor;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class RenderTabla extends DefaultTableCellRenderer{
Vector<Component> componentes;
Vector<Integer> filas;
public RenderTabla(){
super();
componentes=new Vector<Component>();
filas=new Vector<Integer>();
}
public void setComponente(Component c, int r){
componentes.add(c);
filas.add(r);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
for (int i=0;i<componentes.size();i++) {
if(row==filas.get(i) && column==1){
return componentes.get(i);
}
}
return cell;
}
}
Clase ComboColores
import java.awt.Color;
import javax.swing.JComboBox;
public class ComboColores extends JComboBox<String>{
static Color colordefecto=null;
static String nombres[]={"","RED","GREEN","BLUE","WHITE","BLACK","GRAY","PINK","CYAN","DARK
GRAY","LIGHT GRAY","MAGENTA","ORANGE","YELLOW"};
static Color colores[]={colordefecto,Color.RED,Color.GREEN,Color.BLUE,Color.WHITE,Color.BLACK,Color.GRAY
,Color.PINK,Color.CYAN,Color.DARK_GRAY,Color.LIGHT_GRAY,Color.MAGENTA,
Color.ORANGE,Color.YELLOW};
public ComboColores(){
super(nombres);
}
public String getNombreColor(int seleccionado){
return nombres[seleccionado];
}
public Color getColorSeleccionado(int seleccionado){
return colores[seleccionado];
}
public static Color buscarColor(String color){
Color c=null;
for(int i=0;i<nombres.length;i++){
if(nombres[i].equalsIgnoreCase(color)){
c= colores[i];
}
}
return c;
}
public static String buscarColor(Color color){
String c="";
for(int i=0;i<colores.length;i++){
if(colores[i]==color){
c= nombres[i];
}
}
return c;
}
}
Clase FormaCodigo
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class FormaCodigo extends JFrame{
JTextArea txt;
public FormaCodigo(String datos[]){
txt=new JTextArea();
for(int i=0;i<datos.length;i++){
if(datos[i]!=null){
txt.setText(txt.getText()+datos[i]+"\n");
}
}
add(new JScrollPane(txt));
setBounds(0, 0, 500, 400);
setLocationRelativeTo(null);
setVisible(true);
}
}
Descarga
Podrán descargar el proyecto completo directamente desde aquí. Se incluyen los archivos fuentes, imágenes y JAR, recuerden visitar Java Zone por mas ejemplos.
- roger1345's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Otra vez muy buen aporte
Como siempre, se aprende mucho de tus códigos.