Java 隐藏/显示jtable中的行
我用defaulttablemodel创建了一个表,上面有一个组合框。我需要根据组合框值(10,20,30,40)隐藏/显示已经创建和填充的行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
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();
}
});
}
}