【发布时间】:2013-07-08 13:04:11
【问题描述】:
我正在尝试在下面调用此事件;我使用 TabBuilder 创建框架(因为它是我的应用程序的一部分),然后它调用弹出的搜索屏幕;但是使用键绑定或简单单击按钮的搜索事件不起作用,当然我做错了,但我不知道是什么,因为我对 Java 有点陌生。请问谁能帮帮我?
搜索屏幕:
public class SearchScreen extends EventSearch{
public static void main (String[] args){
SearchScreen s= new SearchScreen();
}
public void SearchScreen(){
TabBuilder tb = new TabBuilder();
tb.searchTab();
}
}
事件搜索:
public class EventSearch extends TabBuilder{
String userQuery;
String key = "ENTER";
KeyStroke keyStroke = KeyStroke.getKeyStroke(key);
public EventSearch(){
btSearch.addActionListener(this);
txtSearch.getInputMap().put(keyStroke, key);
txtSearch.getActionMap().put(key, enterAction);
}
Action enterAction = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try{
System.out.println("worked");
} catch (IOException e1) {
e1.printStackTrace(); //print failure
JOptionPane.showMessageDialog(null, "HTTP request failure.");
}
}
};
}
标签生成器:
public class TabBuilder implements ActionListener {
protected JButton btSearch;
JMenuItem close, search;
protected JTextField txtSearch;
protected JFrame searchFrame = new JFrame();
public void TabBuilder(){
}
public void searchTab(){
JLabel lbSearch;
JPanel searchPane;
btSearch= new JButton("Search");
lbSearch= new JLabel("Type Keywords in english to be searched below:");
lbSearch.setHorizontalAlignment(SwingConstants.CENTER);
txtSearch= new JTextField();
searchPane=new JPanel();
searchPane.setBackground(Color.gray);
searchPane.add(lbSearch);
searchPane.add(txtSearch);
searchPane.add(btSearch);
searchPane.setLayout(new GridLayout(3,3));
btSearch.setEnabled(true);
searchFrame.add(searchPane);
searchFrame.setTitle("SHST");
searchFrame.setSize(400, 400);
searchFrame.setVisible(true);
searchFrame.setDefaultCloseOperation(1);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==close){
System.exit(0);
}
if(e.getSource()==search){
SearchScreen s = new SearchSreen();
}
}
}
【问题讨论】:
-
1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助大家理解程序流程!
-
其实我并没有读完所有的代码,而是只读了main,你有一个与构造函数签名相同的方法(void差异)并且永远不会被调用..
-
@AndrewThompson 抱歉,但我删除了所有我可以删除的内容,而且示例没有意义 - 如果您不同意建议编辑,因此我可以更正它。
-
“我尽可能地删除了所有内容” SSCCE 不仅仅是让它变得“短”。尝试实际阅读这篇文章,并注意,SSCCE 很容易超过 123 行,然后许多人会指责您发布的代码不“短”。说到这一点:源代码中的一个空白行总是就足够了。
-
@nachokk 你能说得更具体点吗?我无法完全理解你 - 谢谢
标签: java swing events awt actionevent