Java 对于多个类和创建搜索引擎,使用相同的JTextField
我试图在多个类中使用相同的JTextField和动作侦听器。即使是我希望处于相同的位置。有没有一种最佳的方法?我目前的做法是在下面的代码中,但是当用户搜索某个内容时Java 对于多个类和创建搜索引擎,使用相同的JTextField,java,search,boolean,actionlistener,jtextfield,Java,Search,Boolean,Actionlistener,Jtextfield,我试图在多个类中使用相同的JTextField和动作侦听器。即使是我希望处于相同的位置。有没有一种最佳的方法?我目前的做法是在下面的代码中,但是当用户搜索某个内容时 //Home Class static JTextField textField = new JTextField(); textField = new JTextField(); GridBagConstraints gbc_textField = new GridBagConstraints(); gbc
//Home Class
static JTextField textField = new JTextField();
textField = new JTextField();
GridBagConstraints gbc_textField = new GridBagConstraints();
gbc_textField.gridwidth = 7;
gbc_textField.insets = new Insets(0, 0, 5, 5);
gbc_textField.fill = 2;
gbc_textField.gridx = 2;
gbc_textField.gridy = 1;
homePane.add(textField, gbc_textField);
textField.setColumns(10);
textField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SearchEngine.search();
}
});
//Method to return textfield for use in other classes
public static JTextField textField() {
return textField;
}
//Game Class
static JTextField textField = Home.textField();
GridBagConstraints gbc_textField = new GridBagConstraints();
gbc_textField.gridwidth = 5;
gbc_textField.insets = new Insets(0, 0, 5, 5);
gbc_textField.fill = 2;
gbc_textField.gridx = 3;
gbc_textField.gridy = 1;
gamesPane.add(textField, gbc_textField);
textField.setColumns(10);
textField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SearchEngine.search();
}
});
//SearchEngine Class
//In the SearchEngine class I have a series of if-statements to determine if the word searched is in the database.
setSearched(false);//resets the value of the boolean back to false. If a condition is met in the series of if statements, the value is set to true.
if ((Home.textField().getText().equalsIgnoreCase("battlefield 4")){
|| (Home.textField().getText().equalsIgnoreCase("bf4"))) {
setSearched(true);
setImageSource("bf4");
setURL("www.google.com");
setNumoURL(1);
}
}
Run.runResult();//Runs the searched result
如果布尔值为true,则显示图像。如果未找到,则会显示一个JLabel,表示“未找到”…或者应该显示。当前,布尔值到处都是,返回随机值true和false。我很抱歉,如果这是不够的信息,请评论下面还有什么你想知道的。最后,我尝试为我的应用程序创建一个简单的搜索引擎。首先,您需要创建自定义的JTextField
public class MyCustomTextField extends JTextField{
//constructor
// etc
}
然后,您必须创建自己的操作侦听器,或者直接将其实现到jtf类,并将函数指定为参数
Bud我建议您自己创建并在使用时重写方法;)
创建自己的JTextField,并通过创建它的实例将其用于许多类
即使是我希望处于相同的位置。是
有没有一个最佳的方法
是的,这取决于你的代码结构。也取决于你使用的设计。我不确定你想从你发布的代码中获得什么,所以我不能告诉你。如果你试图使用GUI的某些部分,这些部分在许多类或部分中具有相同的功能和相同的视觉效果,那么就将其嵌入jpanel并以高级方式使用。有几种方法可以帮助你也许可以做到这一点 你可以。。。 创建一个自定义字段,该字段按照您希望的方式进行设置,包括注册
ActionListener
这种方法(就个人而言)的问题在于,您实际上并没有向该字段添加任何功能,您只是在自定义配置,这似乎有点……毫无价值
你可以。。。
创建一个可以创建搜索字段新实例的工厂,它甚至可以用来配置JTextField
的一个预先存在的实例
JTextField searchField = SearchFieldFactory.newInstance();
// and/or
JTextFeld searchField = new JTextField();
SearchFieldFactory.configureSearchField(searchField);
有关更多详细信息,请参阅
你可以。。。
使用某种生成器自定义字段的创建方式
ActionListener searchListener = ...
JTextField field = new SearchFieldBuilder().
setColumns(10).
setActionListener(searchListener).
newInstance();
这将允许您决定如何最好地自定义搜索字段,并定义您认为合适的默认自定义
JTextField field = new SearchFieldBuilder().newInstance();
如果您90%的时间都生成相同的字段,但希望能够灵活地随时更改它,那么这真是太棒了
有关更多详细信息,请参阅
制约因素提出了另一个问题
你可以。。。
提供某种工厂,它生成了约束
JTextField searchField = SearchFieldFactory.newInstance();
gamesPane.add(searchField, SearchFieldUtilities.newSearchFieldConstraints());
或者只是将指定的文本字段添加到指定的容器中
JTextField searchField = SearchFieldFactory.newInstance();
SearchFieldUtilities.addToContainer(searchField, gamesPane);
或者让一个工厂创建搜索字段并将其添加到指定的容器
SearchFieldUtilities.addNewSearchFieldTo(gamesPane);
然后,您可以将搜索字段的创建与此方法结合起来
或者,您可以将约束的静态
实例存储在某个地方GridBagLayout
将在每次应用约束时生成一个本地副本,这意味着您可以实际修改它们,而不会影响以前使用父约束的相同实例添加的任何组件
JTextField searchField = SearchFieldFactory.newInstance();
gamesPane.add(searchField, SearchFieldUtilities.newSearchFieldConstraints());
就我个人而言,我通常不相信预先定义约束的想法,但话说回来,我不会面对你的问题;)