Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 隐藏/显示jtable中的行_Java_Swing_Jtable_Rowfilter - Fatal编程技术网

Java 隐藏/显示jtable中的行

Java 隐藏/显示jtable中的行,java,swing,jtable,rowfilter,Java,Swing,Jtable,Rowfilter,我用defaulttablemodel创建了一个表,上面有一个组合框。我需要根据组合框值(10,20,30,40)隐藏/显示已经创建和填充的行 private void newFilter(int numberOfRows){ RowFilter筛选器=新的RowFilter(){ @凌驾 公共布尔包含(RowFilter.Entry 当行被过滤后,上面的语句返回-1。因此,一旦一行被过滤,它将保持过滤状态 然后我尝试使用: ((TableRowSorter) table.getRowSorte

我用defaulttablemodel创建了一个表,上面有一个组合框。我需要根据组合框值(10,20,30,40)隐藏/显示已经创建和填充的行

private void newFilter(int numberOfRows){
RowFilter筛选器=新的RowFilter(){
@凌驾
公共布尔包含(RowFilter.Entry
当行被过滤后,上面的语句返回-1。因此,一旦一行被过滤,它将保持过滤状态

然后我尝试使用:

((TableRowSorter) table.getRowSorter()).setRowFilter(null);
((TableRowSorter) table.getRowSorter()).setRowFilter(filter);
试图重置筛选器,但这似乎不起作用,因为现在为“i”的值返回了0

所以最后我试着:

private void newFilter(int numberOfRows)
{
    final RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>()
    {
        @Override
        public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry)
        {
            int i = table.convertRowIndexToView(entry.getIdentifier());

            //System.out.println(i + " : " + numberOfRows + " : " + entry.getIdentifier());

            return i < numberOfRows;
        }

    };

    ((TableRowSorter) table.getRowSorter()).setRowFilter(null);

    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            ((TableRowSorter) table.getRowSorter()).setRowFilter(filter);
        }
    });

}
private void newFilter(int numberOfRows)
{
最终行筛选器=新行筛选器()
{
@凌驾

public boolean include(RowFilter.entry)将来,发布一个适当的例子来说明问题。请参阅我的答案,以了解SSCCE.plus 1的示例,但使用and/or filter似乎更好
((TableRowSorter) table.getRowSorter()).setRowFilter(null);
((TableRowSorter) table.getRowSorter()).setRowFilter(filter);
private void newFilter(int numberOfRows)
{
    final RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>()
    {
        @Override
        public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry)
        {
            int i = table.convertRowIndexToView(entry.getIdentifier());

            //System.out.println(i + " : " + numberOfRows + " : " + entry.getIdentifier());

            return i < numberOfRows;
        }

    };

    ((TableRowSorter) table.getRowSorter()).setRowFilter(null);

    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            ((TableRowSorter) table.getRowSorter()).setRowFilter(filter);
        }
    });

}
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.util.*;
//import java.util.List;
import javax.swing.*;
import javax.swing.event.*;
//import javax.swing.text.*;
//import java.beans.*;
import javax.swing.border.*;
//import javax.swing.plaf.*;
//import javax.swing.text.*;
import javax.swing.table.*;
//import java.io.*;
//import javax.imageio.*;
//import java.awt.geom.*;

public class SSCCE extends JPanel
{
    private JTable table;

    public SSCCE()
    {
        setLayout( new BorderLayout() );

        JComboBox<Integer> comboBox = new JComboBox<Integer>();
        comboBox.addItem( new Integer(10) );
        comboBox.addItem( new Integer(20) );
        comboBox.addItem( new Integer(30) );
        comboBox.addItem( new Integer(40) );

        comboBox.addItemListener( new ItemListener()
        {
            @Override
            public void itemStateChanged(ItemEvent e)
            {
                Integer value = (Integer)comboBox.getSelectedItem();
                newFilter( value );
            }
        });
        add(comboBox, BorderLayout.NORTH);

        table = new JTable(40, 3);
        table.setAutoCreateRowSorter(true);
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane, BorderLayout.CENTER);
    }

    private void newFilter(int numberOfRows)
    {
        final RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>()
        {
            @Override
            public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry)
            {
                int i = table.convertRowIndexToView(entry.getIdentifier());

                //System.out.println(i + " : " + numberOfRows + " : " + entry.getIdentifier());

                return i < numberOfRows;
            }

        };

        ((TableRowSorter) table.getRowSorter()).setRowFilter(null);

        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                ((TableRowSorter) table.getRowSorter()).setRowFilter(filter);
            }
        });

    }

    private static void createAndShowGUI()
    {
        JPanel panel = new JPanel();

        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new SSCCE());
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

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