Nicolas Fernandes:
Opa, diegogm, beleza?
Não sei se entendi direito, mas vamos lá: você quer que alguns filtros sejam padrão de todos os relatórios e outros mutáveis, dependendo do relatório selecionado?
Se for assim, você pode fazer:
1. Crie uma classe que estenda de JPanel e contenha os filtros padrão;
2. Ao chamar os filtros de um determinado relatório, você cria uma instância dessa classe acima criada e adiciona os filtros específicos.
Seria isso o que você precisa?
Fala Nicolas Fernandes, beleza sim e vc?
Então é assim eu tenho uma classe que nela tem a estrutura de uma JTree e uma barra de botões já feitas em um JPanel, porém nessa mesma interface eu deixei um
espaço para que na hora que eu selecionasse um relatório da Tree e clicasse no botão de filtros aparecesse os filtros abaixo.
Segue o código dessa classe:
package view;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.SwingConstants;
import javax.swing.tree.DefaultMutableTreeNode;
public class Relatorios extends JFrame {
private JPanel painelTreeAux = new JPanel(new BorderLayout());
private JPanel painelTree = new JPanel(new BorderLayout());
private JToolBar barBotoes = new JToolBar();
private JButton btnInformaParametros = new JButton();
private JButton btnListaRelatorios = new JButton();
private JButton btnMontaRelatorio = new JButton();
private JButton btnVoltar = new JButton();
private JScrollPane scroll1;
private DefaultMutableTreeNode rootNode;
private JTree tree;
private JSeparator separator;
public Relatorios() {
init();
}
public void init() {
this.setTitle("Relatórios");
this.setIconImage(new ImageIcon(getClass().getResource("/image/ICONE_TITULO.png")).getImage());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 650);
this.setLocationRelativeTo(null);
this.setResizable(false);
painelTree.setLayout(null);
painelTree.setSize(600, 650);
this.add(painelTree);
barBotoes.setBounds(0, 0, 195, 45);
barBotoes.setFloatable(false);
btnInformaParametros.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/BTS_Relatorios/BT_Informa_Parametros_Selecao.png")));
btnListaRelatorios.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/BTS_Relatorios/BT_Lista_Relatorios.png")));
btnMontaRelatorio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/BTS_Relatorios/BT_Monta_Relatorio.png")));
btnVoltar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/BTS_Relatorios/BT_Voltar.png")));
barBotoes.add(btnInformaParametros);
barBotoes.add(btnListaRelatorios);
barBotoes.add(btnMontaRelatorio);
barBotoes.add(btnVoltar);
painelTree.add(barBotoes, BorderLayout.NORTH);
rootNode = new DefaultMutableTreeNode("Relatórios");
tree = new JTree(rootNode);
scroll1 = new JScrollPane(tree);
scroll1.setBounds(0, 45, 595, 400);
painelTree.add(scroll1);
separator = new JSeparator(SwingConstants.HORIZONTAL);
painelTree.add(separator);
separator.setBounds(0, 440, 600, 20);
//Chama o método para popular o JTree
listAllFiles("C:\\Users\\diego\\Desktop\\Relatorios", rootNode, true);
this.setVisible(true);
}
/**
* @params: String directory - o diretório a trabalhar
* @params: DefaultMutableTreeNode parent - o node pai
* @params: Boolean recursive - determina se vai trabalhar com as subpastas, ou só o pai
*/
public static void listAllFiles(String directory, DefaultMutableTreeNode parent, Boolean recursive) {
// Lista todos os arquivos no diretório "String directory" no array "children"
File[] children = new File(directory).listFiles();
for (int i = 0; i < children.length; i++) {
// Pega o nome de cada Pasta ou Arquivo
DefaultMutableTreeNode node = new DefaultMutableTreeNode(children[i].getName());
// Só mostra o Node se ele é uma pasta e se esta é uma chamada recursiva
if (children[i].isDirectory() && recursive) {
parent.add(node); // adiciona como filho
listAllFiles(children[i].getPath(), node, recursive); // chamada recursiva para trabalhar com o filho
} else if (!children[i].isDirectory()) { // senão caso não seja um diretório
parent.add(node); // adiciona como um arquivo
}
}
}
public static void main(String[] args) {
new Relatorios();
}
}
Quero que esses filtros fiquem todos em paineis, no caso os filtros são combos, são 53 relatórios com sua quantidade de filtros cada um. Sendo assim criei uma estrutura
em JPanel para cada filtro de relatório, segue o código:
/**
* Estrutura para Filtros, Classe Filtros
*/
//Filtros do Relatório 1
private JPanel painelClassifLotesEst = new JPanel();
private JLabel lblClassifLotesEst = new JLabel();
private JLabel lblClassifLotesEstLoc = new JLabel();
private JLabel lblClassifLotesEstEstTel = new JLabel();
private JComboBox cbxClassifLotesEstLoc = new JComboBox();
private JComboBox cbxClassifLotesEst = new JComboBox();
private JCheckBox ckClassifLotesEst = new JCheckBox();
//Filtros do Relatório 2
private JPanel painelClassifLotesLoc = new JPanel();
private JLabel lblClassifLotesLoc = new JLabel();
private JLabel lblClassifLotesLocNomLoc = new JLabel();
private JComboBox cbxClassiLotesLoc = new JComboBox();
painelTree.add(painelClassifLotesEst);
painelClassifLotesEst.setBounds(0, 445, 600, 300);
painelClassifLotesEst.setLayout(null);
painelClassifLotesEst.add(lblClassifLotesEst);
lblClassifLotesEst.setBorder(BorderFactory.createTitledBorder("Classificação de Lotes por Estação"));
lblClassifLotesEst.setBounds(3, 0, 590, 80);
painelClassifLotesEst.add(cbxClassifLotesEstLoc);
cbxClassifLotesEstLoc.setBounds(265, 25, 300, 20);
painelClassifLotesEst.add(cbxClassifLotesEst);
cbxClassifLotesEst.setBounds(265, 50, 300, 20);
painelClassifLotesEst.add(ckClassifLotesEst);
ckClassifLotesEst.setBounds(565, 50, 150, 20);
painelClassifLotesEst.add(lblClassifLotesEstLoc);
lblClassifLotesEstLoc.setText("Localidade");
lblClassifLotesEstLoc.setBounds(195, 25, 70, 20);
painelClassifLotesEst.add(lblClassifLotesEstEstTel);
lblClassifLotesEstEstTel.setText("Estação Telefônica");
lblClassifLotesEstEstTel.setBounds(150, 50, 120, 20);
painelClassifLotesEst.setVisible(false);
painelTree.add(painelClassifLotesLoc);
painelClassifLotesLoc.setBounds(0, 445, 600, 300);
painelClassifLotesLoc.setLayout(null);
painelClassifLotesLoc.add(lblClassifLotesLoc);
lblClassifLotesLoc.setBorder(BorderFactory.createTitledBorder("Classificação de Lotes por Localidade"));
lblClassifLotesLoc.setBounds(3, 0, 590, 60);
painelClassifLotesLoc.add(cbxClassiLotesLoc);
cbxClassiLotesLoc.setBounds(265, 30, 300, 20);
painelClassifLotesLoc.add(lblClassifLotesLocNomLoc);
lblClassifLotesLocNomLoc.setText("Localidade");
lblClassifLotesLocNomLoc.setBounds(195, 30, 70, 20);
painelClassifLotesLoc.setVisible(false);
Como no exemplo acima criei um painel para cada relatório, eu só queria criar essa classe de filtros e quando eu selecionar um relatório na Tree ter a referencia correta
e chamar o devido filtro na primeira classe, porém não estou sabendo como fazer isso infelizmente.
Não sei se deu para entender melhor mais é assim...