我希望在我的应用程序中添加一个搜索功能,但是我看到很多例子,所有数据都是由程序员添加的。如何实现不预先定义参数/值的搜索功能。我猜测我必须创建一个List<>的另一个实例。因为我已经使用过了吗?
MigLayout layout = new MigLayout("fill");
JPanel panel = new JPanel(layout);
JLabel label1 = new JLabel("Label 1");
label1.putClientProperty("autohide.width", 300);
JLabel label2 = new JLabel("Label 2");
label2.putClientProperty("autohide.width", 200);
panel.add(label1, "grow");
panel.add(label2, "grow");
layout.addLayoutCallback(new LayoutCallback() {
@Override
public void correctBounds(ComponentWrapper wrapper) {
JComponent component = (JComponent) wrapper.getComponent();
Number width = (Number) component.getClientProperty("autohide.width");
if (width != null) {
if (component.isVisible() && wrapper.getParent().getWidth() < width.intValue()) {
component.setVisible(false);
} else if (!component.isVisible() && wrapper.getParent().getWidth() > width.intValue()) {
component.setVisible(true);
}
}
}
});
}
谢谢。
编辑 -
基本上,搜索功能应该允许用户仅使用子串搜索书籍,即&#34; Mars&#34;应该归还一本标题为#34; The Programmer From Mars&#34; &LT; (只是一个例子)。我猜测我必须使用.Contain方法吗?
答案 0 :(得分:2)
正确,您需要使用“包含”方法。请注意,“包含”区分大小写,因此您需要满足此要求。
所以你会有类似的东西:
var textToSearch = searchBox.Text.ToLower();
var foundBooks = books.Where(book => book.Title.ToLower().Contains(textToSearch)).ToList();
答案 1 :(得分:1)
假设books
是要搜索的图书清单:
List<Book> searchResult = books.Where(b => b.Title.Contains(searchTerm)).ToList();
这将返回在标题中找到输入字符串的书籍列表。
您可以与b.Title == searchTerm
完全匹配,与Book
的其他属性类似。
上面的语法是LINQ
,起初可能有点混乱,但对于这样的事情效果很好。
编辑:
要使用此功能,您需要using System.Linq;
由于您的搜索似乎位于TextChanged
,因此您需要将此代码放在searchBox_TextChanged()
方法中:
这会获取用户输入的文本框:
TextBox searchTerm = sender as TextBox;
这会按当前搜索过滤您的图书清单:
List<Book> searchResult = books.Where(b => b.Title.Contains(searchTerm.Text)).ToList();
请注意,在另一个答案中,您可能需要执行ToLower()
(或更高版本)以使搜索不区分大小写。
现在剩下要做的就是将过滤后的结果searchResult
显示给用户。
答案 2 :(得分:0)
管理这样做,这是我的代码,它的工作原理。如果有人想将它用于将来参考,那就是。
angular.module('globalApp', ['searchApp', 'navApp'])
.controller("globalCtrl", function($scope, $rootScope) {
$rootScope.loader = false;
})
// Code goes here
});
var searchApp = angular.module("searchApp", []);
searchApp.controller('searchAppsCtrl', function($scope, $rootScope, request, $interval, $log) {
// Code goes here
});
var navApp = angular.module("navApp", []);
navApp.controller('navSearchCtrl', function($scope, $rootScope, request, $interval, $log) {
// Code goes here
});