0

我真的是 Java 新手,只是练习 ActionListeners。作为我处理的应用程序的一部分,我将有一个 JTextField 让用户搜索名称,然后有一个 JTextArea 来显示搜索结果。我有一个用于搜索和优化名称的 api,唯一的问题是将小部件连接到方法和动作侦听器文件。

以下是部分代码:

小部件文件:

//Text Field
JTextField searchbox = new JTextField();
leftSide.add(searchbox, cnt);

String userText = searchbox.getText();
ActionListener sendsText = new SearchListener(search box);
searchbox.addActionListener(sendsText);


//TextArea              
JTextArea stationList = new JTextArea(12, 0);
leftSide.add(stationList, cnt);

String entered = userText;
stationList.append(entered);

搜索监听器:

    public class SearchListener implements ActionListener {
      private JTextField searchbox;
      private JTextArea stationList;


    public SearchListener(JTextField search box) {
        this.searchbox = searchbox;
    }
    public void ListF(JTextArea stationList){
        this.stationList = stationList;

    public void actionPerformed(ActionEvent event) {
       XXXX<NAMES> stations = HHHH.SimilarNames(searchbox.getText());

        for (NAMES station : stations) {
            //System.out.println(station);

*Problem*>    String result = (searchbox.getText());
*Problem*>    stationList.append(result);

    }

所以在这个程序中,TextFiels 已连接并且 ActionListener 工作,但它会在 CMD 中打印出类似名称的列表(我在这里评论过)。但我希望它将列表发送回 API 中的文本区域。(小部件文件)。所以我不确定我在 SearchListener 顶部的 ActionListener 方法是否正确。代码中的问题>也是我厌倦将搜索结果传递给文本字段的地方,这不起作用。

所以有人知道如何解决吗?

感谢是提前。

4

2 回答 2

1

我认为你可能会扭曲一些事情,但也许这就是你想要完成的事情:

一个搜索字段,其值决定了文本区域的填充内容。

如果是这种情况,那么必须改变一些事情。首先,只有 ActionListener 中的代码会在 UI 事件上被执行,因此没有理由getText()在初始化期间调用任何 UI 元素。

其次,在这个 UI 中添加一个按钮大大简化了这里的逻辑。如果将侦听器附加到搜索框,就会出现诸如“我什么时候知道用户完成输入文本?”之类的问题。和“如何处理部分文本?”,但是使用“搜索”按钮会将这个逻辑交到用户手中。

单击“搜索”按钮后,将触发来自附加到按钮的侦听器的操作事件,并且stationListArea将使用similarNames(<text from search box>).

请注意,尽管下面显示的不是执行此任务的最简洁方式(这将涉及字段和匿名内部类),但它简单易懂。

小部件(不确定是什么cnt,所以我在下面的示例代码中省略了)

//Create the search text box
JTextField searchBox = new JTextField();
leftSide.add(searchBox);

// Create a button that will serve as the "Action" for the search box
JButton searchButton = new JButton("Search");
lefSide.add(searchButton);

// Create the station-list text area that will display text
//  based on results from the search box
JTextArea stationListArea = new JTextArea(12, 0);
leftSide.add(stationListArea);

// Create a listener that listens to the Button, then performs an
//   action from the search box to the text area
ActionListener searchButtonListener = new SearchListener(searchBox, stationListArea);
searchButton.addActionListener(searchButtonListener);

搜索监听器

注意:stationListArea每次单击按钮时,此处的逻辑都会继续向您添加文本并HHHH.SimilarNames()返回一个值。要stationListArea每次都使用新文本更新,替换旧文本,请stationListArea.setText("")actionPerformed().

public class SearchListener implements ActionListener {
    private JTextField searchBox;
    private JTextArea stationListArea;

    public SearchListener(JTextField searchBox, JTextArea stationListArea) {
        this.searchBox = searchBox;
        this.stationListArea = stationListArea;
    }

    public void actionPerformed(ActionEvent event) {
        XXXX<NAMES> stations = HHHH.SimilarNames(searchBox.getText());

        for (NAMES station : stations) {
            stationListArea.append(station);
        }
    }
}
于 2013-02-15T03:37:48.490 回答
0

根据主要评论中的反馈进行了更新

您的NAMES对象需要某种方式来提供String自身的表示。这样,您就可以将该值附加到您的文本区域。

public class SearchListener implements ActionListener {
    private JTextField searchbox;
    private JTextArea stationList;

    public SearchListener(JTextField search box) {
        this.searchbox = searchbox;
    }

    public void actionPerformed(ActionEvent event) {
        XXXX<NAMES> stations = HHHH.SimilarNames(searchbox.getText());

        for (NAMES station : stations) {
            stationList.append(station.getLocationName()());
        }

}
于 2013-02-20T23:06:39.167 回答