Manter um JPopUpMenu menu visível

5 respostas
seudito

Boa tarde pessoal,

Estou fazendo alguns testes com JTable, e consegui fazer com que ao clicar no header do JTable, seja exibido um menu de contexto com algumas opções. Os itens deste menu são JCheckBoxMenuItem (uma série deles…).

Problema: ao selecionar um checkbox, o menu é fechado automaticamente, sendo necessário clicar mais uma vez no header para exibir o menu e então marcar (ou desmarcar) outra opção.

É possivel manter esse JPopUpMenu aberto até que todas as opções sejam escolhidas :?:

Obs: O objetivo final com tudo isso é elaborar um auto-filtro semelhante ao do Excel.

5 Respostas

ViniGodoy

Acho que vc vai gostar desse link aqui:
http://www.guj.com.br/posts/list/100793.java

seudito

Grande Vini… ja estou dando uma olhada :wink:

seudito

Olá Vini,

Quando add uma String, a mesma String é add na linha toda. Nos outros testes que eu havia feito, passava um Object[][] para o modelo para povoar a tabela. Como posso alterar isso? Segue o código que estou testando (adaptado de [url]http://ermalaev.spb.ru/docs/books/tutorial/uiswing/components/table.html[/url]):

public class SimpleTableDemo extends JPanel{
    private ColumnTableModel<String> model = null; 
    public SimpleTableDemo() {
        super(new GridLayout(1,0));

        model =  getStringTableModel();
        final JTable table = new JTable(model);
        ocultColumns(table);
        getStringTableModel().add("Teste");
        
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        table.setFillsViewportHeight(true);

        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane);
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("SimpleTableDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        SimpleTableDemo newContentPane = new SimpleTableDemo();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    public void ocultColumns(JTable table){
		table.getColumnModel().getColumn( 5 ).setMaxWidth( 0 );  
        table.getColumnModel().getColumn( 5 ).setMinWidth( 0 );  
        table.getTableHeader().getColumnModel().getColumn( 5 ).setMaxWidth( 0 );  
        table.getTableHeader().getColumnModel().getColumn( 5 ).setMinWidth( 0 );
        table.getColumnModel().getColumn( 6 ).setMaxWidth( 0 );  
        table.getColumnModel().getColumn( 6 ).setMinWidth( 0 );  
        table.getTableHeader().getColumnModel().getColumn( 6 ).setMaxWidth( 0 );  
        table.getTableHeader().getColumnModel().getColumn( 6 ).setMinWidth( 0 ); 
}
    
    private ColumnTableModel<String> getStringTableModel() {
        if (model == null) {
            // Esse model se comporta como um arraylist! :)
            model = new ColumnTableModel<String>(StringColumns.values());
        }
        return model;
    }
}

Nesse exemplo, a palavra "Teste" é escrita em todas as células da primeira linha.

seudito

Pensei que fosse necessário implementar este mesmo modelo para que o filtro funcionasse, mas olhando com mais atenção percebi que era possivel implementar o filtro utilizando o mesmo modelo que eu ja havia testando.

Muito obrigado Vini!!! :smiley:

ViniGodoy

Sim, vc pode usar o TableFilter com qualquer model.

Criado 23 de janeiro de 2010
Ultima resposta 23 de jan. de 2010
Respostas 5
Participantes 2