我有一个与此非常相似的JTable。
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting
我已经设法在其上设置了普通过滤器(搜索功能),并且效果很好。我想要一个按钮,该按钮将立即仅显示选中素食的行。
好吧,现在感谢@peeskillet和@HovercraftFullOfEels提供的帮助,这是解决我的问题的方法:
final TableRowSorter<MovieReviewTableModel> rowSorter = new TableRowSorter<MovieReviewTableModel>(tableModel);
// custom RowFilter
RowFilter<MovieReviewTableModel, Integer> filter = new RowFilter<MovieReviewTableModel, Integer>()
{
// include method returns true to show the row and false to not show it
@Override
public boolean include(RowFilter.Entry<? extends MovieReviewTableModel, ? extends Integer> entry)
{
int modelRow = entry.getIdentifier(); //row index
boolean checked = ((Boolean)entry.getModel().getValueAt(modelRow, 3)).booleanValue();
System.out.println(checked); // to test the values coming through
return checked;
}
};
table.setRowSorter(rowSorter);
JButton onlyFeatured = new JButton("Only show Featured");
threeButtonPanel.add(onlyFeatured);
onlyFeatured.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
rowSorter.setRowFilter(filter);
}
});
有用!非常感谢你们,我欠您一些饮料。:D
让我们重新阅读教程“
如何使用表:排序和过滤”。
除了对结果重新排序之外,表排序器还可以指定将显示哪些行。这称为过滤。
TableRowSorter
使用javax.swing.RowFilter对象实现过滤。RowFilter
实现几种创建通用过滤器的工厂方法。
要看的东西:
TableRowSorter
。-我们知道我们会需要这个。RowFilter
文档链接。让我们在新的浏览器标签中打开它。RowFilter
实现了几种创建通用过滤器的工厂方法”。。我们可能应该看看那些 “常见种类” 是什么。RowFilter javadoc
andFilter
,dateFilter
,notFilter
,numberFilter
,。orFilter
regexFilter
好的,我regexFilter
从本教程中认识到了。但是,仅以他们的名字命名的其他人听起来就不太乐观。也许我们应该实施我们自己的。让我们看看其余的Javadoc
javax.swing.RowFilter<M,I>
类型参数:
M
-模型的类型;例如PersonModel
I
-标识符的类型;使用时TableRowSorter
将是Integer
好的,因此我们知道两件事。创建custom时RowFilter
,应将TableModel
类型作为第一个参数,并键入Integer
以代表行号。
RowFilter
用于过滤模型中的条目,以使它们不会显示在视图中。例如,与的RowFilter
关联JTable
可能只允许包含具有特定字符串的列的行。条目的含义取决于组件类型。例如,当过滤器与关联时JTable
,条目对应于一行;当与a关联时JTree
,条目对应于一个节点。子类必须重写此
include
方法,以指示是否应在视图中显示该条目。该Entry
参数可用于获取该条目中每个列中的值
因此,基于这两个参数,我们知道了RowFilter
用来过滤视图中不需要的行,并且如果我们创建自己的行,则需要重写该include
方法以返回是否应显示行。
。而且该include
方法还将具有一个Entry
参数,当确定哪一行不返回true时,我们可以从中获取我们可能感兴趣的详细信息。这是javadoc给我们的基本示例(准则)
RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>() {
@Override
public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) {
// do your logic here to return true or false.
}
};
很酷,但是什么是此类RowFilter.Entry
,它可以为我们提供什么有趣的信息?让我们看一下javadoc。
我们可以看到的一件有趣的事情是getModel()
方法。由此我们可以得到表模型。现在让我们完成实施
private static final int CHECKBOX_COLUMN = 4;
...
RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>() {
@Override
public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) {
int modelRow = entry.getIdentifier();
Boolean checked = (Boolean)entry.getModel().getValueAt(modelRow, CHECKBOX_COLUMN);
return checked;
}
};
也不多。现在,剩下的就是使用正则表达式过滤器,将过滤器设置为排序器,正如您已经从Oracle教程中学到的那样。
这是填充演示代码。它没有ActionListener
为按钮按下实现。我不想为你做 任何事情 。您应该有足够的信息来自己处理:-D快乐学习!
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowFilter;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class TableBooleanFilterDemo {
public TableBooleanFilterDemo() {
JTable table = getTable();
TableRowSorter<TableModel> rowSorter = new TableRowSorter<>(table.getModel());
RowFilter filter = getRowFilter();
rowSorter.setRowFilter(filter);
table.html" target="_blank">setRowSorter(rowSorter);
JFrame frame = new JFrame();
frame.add(new JScrollPane(table));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private static final int CHECKBOX_COLUMN = 4;
private RowFilter getRowFilter() {
RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>() {
@Override
public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) {
int modelRow = entry.getIdentifier();
Boolean checked = (Boolean)entry.getModel().getValueAt(modelRow, CHECKBOX_COLUMN);
return checked;
}
};
return filter;
}
private JTable getTable() {
Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
return new JTable(new DefaultTableModel(data, columnNames) {
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
new TableBooleanFilterDemo();
}
});
}
}
老实说,我从来不需要实现自己的方法RowFilter
,但是以上就是我尝试学习新东西时要经历的过程。让我花了更长的时间写这个答案,然后学习如何做。要学会阅读文档,而不仅仅是教程。教程是一个很好的起点,但是一旦您遇到更复杂的问题,就需要更深入地研究。与您要学习的任何新技术相同。
我有以下问题:我有沙箱中的代码,我想显示一个按钮,如果复选框被选中,最大数量大于1。最大数量条件不是问题,而是复选框的问题。我不知道如何获得特定复选框的“选中”值。我认为我不能对索引做任何事情,因为索引值在映射optionModules时被多次使用。预先感谢你的帮助。沙盒链接:https://codesandbox.io/s/nostalgic-germain-e18wh
下面的代码是我的按钮操作的一部分。Jtable contain last row is复选框。单击“保存”按钮时,所选行必须从表行中删除 执行的操作代码
主要内容:本节引言:,1.基本用法与事件处理:,2.自定义点击效果,3.改变文字与选择框的相对位置,4.修改文字与选择框的距离,本节小结:本节引言: 本节给大家带来的是Andoird基本UI控件中的RadioButton和Checkbox; 先说下本节要讲解的内容是:RadioButton和Checkbox的 1.基本用法 2.事件处理; 3.自定义点击效果; 4.改变文字与选择框的相对位置; 5.修改文字与选择框的距离 其实这两个控件有很多地方都是类似的,除了单选和多选,事件处理,其他的都是类
这里是react初学者,这里我有antd复选框,我想把这个复选框改成一个按钮,但仍然有复选框功能:这里是我的复选框: null null 这就是我试着做的,我试着给checkbox不透明度为零来隐藏它,然后把checkbox放在一个按钮里面,以改变它的外观为按钮,并且有checkbox的功能,但是问题是,这个新按钮是工作的,如果你点击按钮的左侧,但右侧不工作,有什么解决方案吗?: null nul
对不起,我仍然是小新在这方面,只是万一有代码有人想看到我否定这里是整个代码要点嵌入 我花了2个星期建立这个应用程序,并已卡在这个过滤在过去的2天。我需要有这个应用程序MVP明天下午演示在一个就业活动为最近的毕业生,这是仅剩的2件事之一。 我没有足够的代表赏金,但任何帮助或建议都很感激
这是一个 列表 拓展,可以用来创建单选和复选按钮组。 复选按钮组 <div class="list-block"> <ul> <!-- Single chekbox item --> <li> <label class="label-checkbox item-content"> <!-- Checked by default -->