我是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);
SearchListener:
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方法是否正确。还有问题&gt;在代码中我厌倦了将搜索结果传递给文本字段,这不起作用。
所以任何人都知道如何解决它?
感谢提前。
答案 0 :(得分:1)
我认为你可能会扭曲一些事情,但也许这就是你想要实现的目标:
一个搜索字段,其值决定了文本区域的填充内容。
如果是这种情况,那么必须改变一些事情。首先,只有在UI事件中才会对ActionListener中的代码进行处理,因此在初始化期间没有理由在任何UI元素上调用getText()
。
其次,在此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);
SearchListener
注意:每次单击按钮并且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);
}
}
}
答案 1 :(得分: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()());
}
}