Manter um JPopUpMenu menu visível

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.

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

Grande Vini… ja estou dando uma olhada :wink:

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 http://ermalaev.spb.ru/docs/books/tutorial/uiswing/components/table.html):

[code]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&lt;String&gt; getStringTableModel() {
    if (model == null) {
        // Esse model se comporta como um arraylist! :)
        model = new ColumnTableModel&lt;String&gt;(StringColumns.values());
    }
    return model;
}

}[/code]

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

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:

Sim, vc pode usar o TableFilter com qualquer model.