Java 事件调用不';t使用键绑定或单击-what';逻辑错误是什么?
我试着把这个事件称为下面的事件;我用TabBuilder创建框架(因为它是我应用程序的一部分),然后它调用弹出的搜索屏幕;但是使用键绑定或简单单击按钮进行搜索的事件不起作用,当然我做错了什么,但我不知道是什么原因,因为我对Java有点陌生。谁能帮我一下吗Java 事件调用不';t使用键绑定或单击-what';逻辑错误是什么?,java,swing,events,awt,actionevent,Java,Swing,Events,Awt,Actionevent,我试着把这个事件称为下面的事件;我用TabBuilder创建框架(因为它是我应用程序的一部分),然后它调用弹出的搜索屏幕;但是使用键绑定或简单单击按钮进行搜索的事件不起作用,当然我做错了什么,但我不知道是什么原因,因为我对Java有点陌生。谁能帮我一下吗 搜索屏幕: 事件搜索: 选项卡生成器: 您编写了这个actionListener public void actionPerformed(ActionEvent e){ if(e.getSource()==c
搜索屏幕:
事件搜索:
选项卡生成器:
您编写了这个
actionListener
public void actionPerformed(ActionEvent e){
if(e.getSource()==close){
System.exit(0);
}
if(e.getSource()==search){
TabBuilder tb = new TabBuilder();
tb.searchTab();
}
}
而您添加到btnSearch.addActionListener(此)
,您的actionListener永远不会做任何事情
如果您的KeyBinding
发生了类似的情况,您将操作添加到txtSearch
中,然后询问源是否为e.getSource()==btSearch
对于KeyBindings
,您可以使用常量指定必须绑定它们的时间。
JComponent.WHEN_FOCUSED
,JComponent.WHEN_IN_FOCUSED_WINDOW
,JComponent.WHEN_FOCUSED_组件的祖先
例如:
txtSearch.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(击键,键)代码>
1)要更快地获得更好的帮助,请发布一个。2) 对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程!事实上,我没有阅读所有的代码,但只阅读main,你有一个与构造函数具有相同签名(void difference)的方法,并且从未被调用..@andrewhompson抱歉,但我删除了我能删除的所有内容,而不仅仅是示例没有意义-如果你不同意建议编辑,因此我可以更正它。“我删除了我能删除的所有内容”SSCCE不仅仅是“简短”而已。试着实际阅读这篇文章,并注意到在许多人指责你发布的代码不“短”之前,SSCCE可以轻松地超过123行。说到这里:源代码中一行空白就足够了。@nachokk你能更具体一点吗?我不能完全理解你-谢谢+1,在我看来,这些也是问题背后的真正问题:-)我忘了更改TabBuilder上的那个小错误,我犯了那个错误是为了运行一个测试,但最终忘记了删除-它调用searchTab两次;但是我仍然缺少事件的一部分——我删除了btSearch.addActionListener(这个);因为您是对的,所以按钮没有侦听器,但是即使在删除e.getSource()之后,keyBind仍然不能工作@维克托罗利维拉:请重新编辑,你的帖子,对不起,我的编辑与你的同时发生冲突,请重新编辑,如果结果不是你想要的@就我所见,重新编辑的是我的,我做的最后一个,如果你愿意,你可以重新编辑want@VictorOliveira您的问题中仍然有相同的代码。。。此外,此方法是无用的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();
}
}
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==close){
System.exit(0);
}
if(e.getSource()==search){
TabBuilder tb = new TabBuilder();
tb.searchTab();
}
}