Componente Swing

Sempre trabalhei com Java Web e agora estou em um projeto Swing, estou quase entrando em parafuso! :slight_smile:

Fiquei a tarde inteiro tentando fazer esse código funcionar mas não estou sabendo porque o componente não está sendo exibido na tela!

Essa Classe, ao ter um de seus botões clicados, instancia uma noja janela e a adiciona no contexto maior pelo gui mediator! Até aqui tudo perfeito!!!

public class DiagramaDadosIframeEdit extends JInternalFrame implements JUPanel, GridPanelInterface {

//...

    private void jButtonSetSeries_mouseClicked(MouseEvent e) {
        System.out.println("Cliquei para escolher as séries!!!");
        SetSeriesIframeEdit testes = new SetSeriesIframeEdit(guiMediator);
        guiMediator.addFormInternalFrame(testes);
    }

//...
}

É aqui que ela deveria funcionar mas não funciona!

public class SetSeriesIframeEdit extends JInternalFrame implements JUPanel, GridPanelInterface {

    @SuppressWarnings("compatibility:874692784029592547")
    private static final long serialVersionUID = 1L;

    //PageDefinition File declratation	
    private JUPanelBinding panelBinding = new JUPanelBinding("hidro2_SetSeriesIframeEditPageDef");

    //TODO - popular aqui com os dados necessários
    private TabelaSeries tabela = new TabelaSeries();

    private GuiMediator guiMediator;

    public SetSeriesIframeEdit(GuiMediator guiMediator) {
        super();
        this.guiMediator = guiMediator;
    }

    /**
	the JbInit method
     */
    public void jbInit() throws Exception {

        this.addInternalFrameListener(new InternalFrameListener() {
                public void internalFrameOpened(InternalFrameEvent e) {
                }

                public void internalFrameClosing(InternalFrameEvent e) {
                }

                public void internalFrameClosed(InternalFrameEvent e) {
                    /*                     //lista que contém todos os iterators do form de estaçao
                    //ao se criar um novo iterator, o mesmo deve ser inserido nesta lista
                    ArrayList<String> listaIterators = new ArrayList<String>();
                    //  listaIterators.add("GeoftDnaeeBaciaViewRo1Iterator");
                    //  listaIterators.add("ViewObjSecaoTransversalMaxId1Iterator");


                    ArrayList<JUPanelBinding> pBindList = new ArrayList<JUPanelBinding>();
                    pBindList.add(panelBinding);
                    for (JUPanelBinding pBind : pBindList) {
                        ArrayList dcibList = pBind.getIterBindingList();
                        for (Object dcibObj : dcibList) {
                            DCIteratorBinding dcib = (DCIteratorBinding)dcibObj;
                            if (dcib.getViewObject() != null) {
                                try {
                                    if (listaIterators.contains(dcib.getName())) {
                                        Row r = dcib.getRowSetIterator().getRowSet().getCurrentRow();
                                        if (r != null) {
                                            r.refresh(r.REFRESH_UNDO_CHANGES | r.REFRESH_FORGET_NEW_ROWS);
                                        }
                                        dcib.getDataControl().callCommitTransaction();
                                    }
                                } catch (NullPointerException exc) {
                                    exc.printStackTrace();
                                }
                            }
                        }
                    }

                    panelBinding.release();

                    Ouvidoria.removerIFrameDaLista((JInternalFrame)Ouvidoria.getIFrameCampanha());
                    OuvidoriaEstacoes.removerIFrameDaLista((JInternalFrame)OuvidoriaEstacoes.getIFrameEditEstacao()); */
                }

                public void internalFrameIconified(InternalFrameEvent e) {
                }

                public void internalFrameDeiconified(InternalFrameEvent e) {
                }

                public void internalFrameActivated(InternalFrameEvent e) {
                }

                public void internalFrameDeactivated(InternalFrameEvent e) {
                }
            });

        this.setLayout(null);
        this.setNormalBounds(new Rectangle(10, 10, 785, 548));
        this.setLocation(50, 20);
        this.setSize(780, 560);
        this.setPreferredSize(new Dimension(780, 560));
        this.setSize(new Dimension(756, 571));
        this.setPreferredSize(new Dimension(772, 582));
        this.setTitle("Seleção de Series");

        //É Exatamente aqui que ela deveria funcionar e não funciona!!!

        tabela.setBounds(new Rectangle(10, 10, 735, 530));

        this.getContentPane().add(tabela, null);
    }

    //JUPanel implementation

    public JUPanelBinding getPanelBinding() {
        return panelBinding;
    }

    public void setBindingContext(BindingContext bindCtx) {
        if (panelBinding.getPanel() == null) {
            panelBinding = panelBinding.setup(bindCtx, this);
            //registerProjectGlobalVariables(bindCtx);
            panelBinding.refreshControl();

            try {
                jbInit();
                panelBinding.refreshControl();
            } catch (Exception ex) {
                ex.printStackTrace();
                //panelBinding.reportException(ex);
            }
        }
    }


    public void setBv(int bv) {
    }

    public JTable getTable() {
        return null;
    }

    //Eventos:

    private void jButtonCalcular_mouseClicked(MouseEvent e) {
        System.out.println("Cliquei em Calcular!!!");
    }

    private void jButtonSetEstacoes_mouseClicked(MouseEvent e) {
        BancoFinanceiroPanelGrid testes = new BancoFinanceiroPanelGrid();
        guiMediator.addFormInternalFrame(testes);
    }

    private void jButtonSetSeries_mouseClicked(MouseEvent e) {
        System.out.println("Cliquei para escolher as séries!!!");
    }

    //Outros Métodos:

    private JInternalFrame getMe() {
        return this;
    }
}

A Classe que é o componente! (A Tabela!!!)

public class TabelaSeries extends JPanel {

    private JTable tabela;
    private JTextField textoFiltrar;
    private TableRowSorter<SeriesTableModel> classificador;

    // TODO - Tipar esses parâmetros

    public TabelaSeries() {
        new TabelaSeries(new ArrayList<String>(), new ArrayList<String>());
    }

    public TabelaSeries(List statusConsistencias, List series) {

        super();
        init(statusConsistencias, series);
    }

    private void filtra() {

        RowFilter<SeriesTableModel, Object> rf = null;
        // If current expression doesn't parse, don't update.
        try {
            rf = RowFilter.regexFilter(textoFiltrar.getText(), 0);
        } catch (java.util.regex.PatternSyntaxException e) {
            return;
        }
        classificador.setRowFilter(rf);
    }

    private void init(List statusConsistencias, List series) {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

        // Create a table with a sorter.
        SeriesTableModel model = new SeriesTableModel(series, statusConsistencias);
        classificador = new TableRowSorter<SeriesTableModel>(model);
        tabela = new JTable(model);
        tabela.setRowSorter(classificador);
        tabela.setPreferredScrollableViewportSize(new Dimension(500, 500));
        tabela.setFillsViewportHeight(true);

        // Create the scroll pane and add the table to it.
        JScrollPane scrollPane = new JScrollPane(tabela);

        // Create a separate form for filterText
        JPanel formFilter = new JPanel();
        JLabel lblFiltro = new JLabel("Filtrar Texto:", SwingConstants.TRAILING);
        formFilter.add(lblFiltro);
        textoFiltrar = new JTextField();
        textoFiltrar.setPreferredSize(new Dimension(300, 20));

        // Whenever filterText changes, invoke newFilter.
        textoFiltrar.getDocument().addDocumentListener(new DocumentListener() {

                public void changedUpdate(DocumentEvent e) {

                    filtra();
                }

                public void insertUpdate(DocumentEvent e) {

                    filtra();
                }

                public void removeUpdate(DocumentEvent e) {

                    filtra();
                }
            });
        lblFiltro.setLabelFor(textoFiltrar);

        formFilter.add(textoFiltrar);

        add(formFilter);
        // Add the scroll pane to this panel.
        add(scrollPane);
    }
}

E, por fim, o model que utilizo para instanciar a tabela:

public class SeriesTableModel extends AbstractTableModel {

    private String[] nomesColunas;
    private Object[][] dadosTabelas;

    @Override
    public int getRowCount() {

        if (dadosTabelas != null)
            return dadosTabelas.length;

        return 0;
    }

    public SeriesTableModel() {

        new SeriesTableModel(new ArrayList<String>(), new ArrayList<String>());

    }

    // TODO - Tipar a lista

    public SeriesTableModel(List series, List statusConsistencias) {

        super();

        // nomesColunas = new String[statusConsistencias.size()];

        List<String> nomes = new ArrayList<String>();

        nomes.add("Nome");

        // TODO - Tipar statusConsistencias
        for (Object o : statusConsistencias) {
            // TODO - Adquirir o nome do status
            // nomes.add(o.getNome());
            nomes.add(null);
        }

        nomesColunas = (String[])Arrays.copyOf(nomes.toArray(), nomes.toArray().length, String[].class);

        int i = 0;

        for (Object s : series) {
            // TODO - Pegar o nome da série!!!
            // dadosTabelas[i][1] = s.getNome();
            dadosTabelas[i][1] = "Teste Nome" + i;
            int j = 0;
            for (Object o : statusConsistencias) {
                dadosTabelas[i][j] = new Boolean(false);
                j++;
            }
            i++;
        }
    }

    @Override
    public int getColumnCount() {

        return nomesColunas.length;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {

        return dadosTabelas[rowIndex][columnIndex];
    }

    @SuppressWarnings( { "rawtypes", "unchecked" })
    public Class getColumnClass(int c) {

        return getValueAt(0, c).getClass();
    }

    public String getColumnName(int col) {

        return nomesColunas[col];
    }

}

Alguém consegue matar essa pra mim?

Muita coisa ai foi gerada pelas ferramentas que tenho que utilizar aqui!

Thx,
PH

Já tentou?

private void jButtonSetSeries_mouseClicked(MouseEvent e) { System.out.println("Cliquei para escolher as séries!!!"); SetSeriesIframeEdit testes = new SetSeriesIframeEdit(guiMediator); testes.setVisible(true); //Deixa o componente visível guiMediator.addFormInternalFrame(testes); }

Outra coisa, o seu SeriesTableModel deveria ter dentro uma lista de Series, e não um array de arrays de objects. Do jeito que está, seria até melhor usar o péssimo DefaultTableModel (o que vc fez é ainda pior que ele).

Essa instância dessa linha 4 fica visível!

O que não aparece é a tabela dentro dela!

Como eu disse, não tenho grandes conhecimentos de Swing! Como funciona para eu ter uma coleção de Series dentro do meu modelo?

Fiz assim porque achei que a tabela só conseguiria interpretar se estivesse como no Default, dentro de um array.

Essa tabela é dinâmica e o nome das colunas será o nome da série mais n status de consistência selecionáveis, tipo boolean. O nome eu pego dentro dos objetos “Serie” mas as outras colunas fazem parte de um outro objeto.

Como eu só sei a quantidade em tempo de execução tive que fazer essa adaptação no modelo de tabela.

Se eu encontrasse algo pronto semelhante a esse esquema nesse site - http://www.quasipartikel.at/multiselect/ - mas para Swing seria o ideal.

Vocês têm mais reposta pra mim? Têm mais alguma dica?

Gratíssimo!