Boa noite.
Alguem já viu alguma forma melhor de fazer algo similar abaixo ou pronto?
/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package jsuperfiltro;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class superFiltroView extends javax.swing.JFrame {
private JPanel container;
private JButton botao;
private JButton bExecutar;
// private Map<String, JButton> dynamicButtons;
private Integer nBotoes, tamaho, altura;
private String nomeBotao;
private String nomeLabel;
private String nomeTextField;
private String nomeComboCampos;
private String nomeComboCondicoes;
private String nomeComboAndOr;
private Class clazzobj;
private String condicoes;
/**
* Creates new form NewJFrame
*/
public superFiltroView(Class clazz) {
initComponents();
nBotoes = 0;
setClazzobj(clazz);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton2 = new javax.swing.JButton();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton2.setText("Add");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton1.setText("Executar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(697, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1))
.addGap(43, 43, 43))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(11, 11, 11)
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 247, Short.MAX_VALUE)
.addComponent(jButton1)
.addContainerGap())
);
pack();
}// </editor-fold>
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
nBotoes++;
nomeBotao = "Add" + nBotoes.toString();
nomeLabel = "Campo:" + nBotoes.toString();
nomeTextField = "Valor";
nomeComboCampos = "campos";
nomeComboCondicoes = "condicoes";
nomeComboAndOr = "andor";
addButton(nomeBotao);
addLabel(nomeLabel);
addComboBox(nomeComboCampos);
addComboCondicoes(nomeComboCondicoes);
addTextField(nomeTextField);
addComboAndOr(nomeComboAndOr);
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Component[] component = getContentPane().getComponents();
condicoes = "";
// Reset user interface
int j = 0;
int x = component.length -1;
for (int i = 0; i < component.length; i++) {
j = i;
if (component[i] instanceof JComboBox) {
JComboBox combo = (JComboBox) component[j];
String nome = "campos";
if (combo.getAccessibleContext().getAccessibleName().equals(nome)){
condicoes += " ";
condicoes = condicoes + combo.getSelectedItem().toString();
condicoes += " ";
}
}
if (component[i] instanceof JComboBox) {
JComboBox combo = (JComboBox) component[j];
String nome = "condicoes";
if (combo.getAccessibleContext().getAccessibleName().equals(nome)){
condicoes = " " + condicoes + combo.getSelectedItem().toString();
condicoes += " ";
}
}
if (component[i] instanceof JTextField) {
JTextField text = (JTextField) component[j];
String nome = "Valor";
if (text.getAccessibleContext().getAccessibleName().equals(nome)){
condicoes = condicoes + " '" + text.getText() + "'";
condicoes += " ";
}
}
if ((component[i] instanceof JComboBox) && (i < x)){
JComboBox combo = (JComboBox) component[j];
String nome = "andor";
if (combo.getAccessibleContext().getAccessibleName().equals(nome)){
condicoes = " " + condicoes + combo.getSelectedItem().toString();
condicoes += " ";
}
}
}
System.out.print(condicoes);
}
public void addButton(String name) {
JButton b = new JButton(name);
b.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
getContentPane().add(b);
b.setBounds(695, 40 * nBotoes, 80, 32);
}
private void addLabel(String nome) {
JLabel lbl = new JLabel(nome);
getContentPane().add(lbl);
lbl.setBounds(20, 40 * nBotoes, 80, 30);
if (nBotoes > 1) {
Component[] component = getContentPane().getComponents();
Boolean achou = false;
// Reset user interface
int j = 0;
JLabel label = null;
for (int i = 0; i < component.length; i++) {
j = i;
if (component[i] instanceof JLabel) {
label = (JLabel) component[i];
achou = true;
}
if (component[i] instanceof JComboBox) {
JComboBox combo = (JComboBox) component[j];
if (achou) {
label.setText((String) combo.getSelectedItem());
}
achou = false;
}
}
}
}
private void addComboBox(String nome) {
JComboBox cbx;
cbx = new javax.swing.JComboBox();
cbx.setModel(new javax.swing.DefaultComboBoxModel(populaComboCampos()));
cbx.getAccessibleContext().setAccessibleName(nome);
getContentPane().add(cbx);
cbx.setBounds(100, 40 * nBotoes, 160, 30);
}
private void addComboCondicoes(String nome) {
JComboBox cbx;
cbx = new javax.swing.JComboBox();
cbx.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"=", ">", "<", ">=", "<>"}));
cbx.getAccessibleContext().setAccessibleName(nome);
getContentPane().add(cbx);
cbx.setBounds(300, 40 * nBotoes, 60, 30);
}
private void addTextField(String nome) {
JTextField tfd = new JTextField(nome);
tfd.setText("");
tfd.getAccessibleContext().setAccessibleName(nome);
getContentPane().add(tfd);
tfd.setBounds(400, 40 * nBotoes, 200, 30);
}
private void addComboAndOr(String nome) {
JComboBox cbx;
cbx = new javax.swing.JComboBox();
cbx.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"And", "Or"}));
cbx.getAccessibleContext().setAccessibleName(nome);
getContentPane().add(cbx);
cbx.setBounds(600, 40 * nBotoes, 60, 30);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(superFiltroView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(superFiltroView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(superFiltroView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(superFiltroView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new superFiltroView(OrdemServicoVO.class).setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
// End of variables declaration
private Object[] populaComboCampos() {
Collection<String> c = setCamposClazz();
return c.toArray();
}
private Collection<String> setCamposClazz() throws SecurityException {
Class clazz = getClazzobj();
//OrdemServicoVO.class;
Collection<String> c = new ArrayList<>();
for(Field field:clazz.getDeclaredFields()){
c.add(field.getName());
}
return c;
}
/**
* @return the clazzobj
*/
public Class getClazzobj() {
return clazzobj;
}
/**
* @param clazzobj the clazzobj to set
*/
public void setClazzobj(Class clazzobj) {
this.clazzobj = clazzobj;
}
}