用于多个类并创建搜索引擎的相同JTextField

时间:2014-02-28 01:42:31

标签: java search boolean actionlistener jtextfield

我正在尝试使用相同的JTextField和多个类的动作侦听器。即使是GridBagConstraints,我也希望处于相同的位置。有这样做的最佳方式吗?我这样做的当前方式是在下面的代码中,但是当用户搜索某些内容时,

//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的随机值。如果这个信息不充分,我很抱歉,请在下面评论您还想了解的其他信息。最后,我正在尝试为我的应用程序创建一个简单的搜索引擎。

2 个答案:

答案 0 :(得分:1)

有几种方法可以实现这一目标......

你可以......

创建一个自定义字段,按照您希望的方式设置自己,包括注册ActionListener

这种方法(个人)的问题是,你实际上并没有在该领域添加任何功能,你只是自定义配置,这似乎有点......毫无价值

你可以......

创建一种可以创建搜索字段的新实例的工厂,它甚至可以用于配置JTextField的预先存在的实例。

JTextField searchField = SearchFieldFactory.newInstance();
// and/or
JTextFeld searchField = new JTextField();
SearchFieldFactory.configureSearchField(searchField);

有关详细信息,请参阅factory pattern

你可以......

使用某种构建器来自定义字段的创建方式......

ActionListener searchListener = ...
JTextField field = new SearchFieldBuilder().
                       setColumns(10).
                       setActionListener(searchListener).
                       newInstance();

这将允许您决定如何最好地自定义搜索字段,并根据您的需要定义默认自定义...

JTextField field = new SearchFieldBuilder().newInstance();

如果你有90%的时间生成相同的字段,但希望能够灵活地不时更改它,那真的很棒......

有关详细信息,请参阅builder pattern

这些限制提出了另一个问题......

你可以......

提供某种产生约束的工厂

JTextField searchField = SearchFieldFactory.newInstance();
gamesPane.add(searchField, SearchFieldUtilities.newSearchFieldConstraints());

或者只是将指定的文本字段添加到指定的容器

JTextField searchField = SearchFieldFactory.newInstance();
SearchFieldUtilities.addToContainer(searchField, gamesPane);

或者让工厂创建搜索字段并将其添加到指定的容器....

SearchFieldUtilities.addNewSearchFieldTo(gamesPane);

然后,您可以将搜索字段的创建与此方法结合使用...

或者你可以简单地在某处存储static个约束实例。每次应用约束时,GridBagLayout都会生成一个本地副本,这意味着您可以实际修改它们,而不会影响先前使用父约束的相同实例添加的任何组件

就个人而言,我一般不会对预先设定约束的想法深信不疑,但话说回来,我并没有面对你的问题;)

答案 1 :(得分:0)

首先,您需要创建自定义JTextField

public class MyCustomTextField extends JTextField{

 //constructor 

// etc

}

然后你必须创建自己的Action侦听器或直接将它实现到你的jtf类并指定函数作为参数。

Bud i woud建议您在使用时自行创建并覆盖方法;)

创建自己的JTextField,并通过创建它的实例将它用于多个类。

  

即使是GridBagConstraints,我也希望处于相同的位置。是   有一种最佳方式吗?

是芽,这取决于你的代码结构。你使用什么设计。我不确定你试图通过你发布的代码实现什么,所以我不能告诉你。如果你试图使用GUI的某些部分在许多中具有相同的功能和相同的视觉效果,或者将它们嵌入到jpanel中并以高级方式使用它。