我正在尝试创建一个应用程序,用户点击按钮/或点击进入,输入进入JList。我已成功创建了应用程序,但在清除输入的JTextField时遇到了一个小问题。它只允许我一次输入一个符号。如果我从ActionListener和KeyListener:
中取出它,它将起作用textField.setText("");
有没有办法让用户可以根据需要输入多少个符号?我的代码的错误部分是:
final JButton btnAdd = new JButton("ADD");
btnAdd.setToolTipText("Add the item to the list");
btnAdd.setBounds(157, 98, 68, 23);
contentPane.add(btnAdd);
btnAdd.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
v.add(textField.getText());
list.setListData(v);
textField.setText("");
}
});
textField = new JTextField();
textField.setToolTipText("Enter the item here");
textField.setBounds(10, 99, 137, 20);
contentPane.add(textField);
textField.setColumns(10);
textField.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent ke){
btnAdd.setEnabled(true);
if(ke.getKeyCode()==KeyEvent.VK_ENTER)
btnAdd.doClick();
textField.setText("");
}
});
答案 0 :(得分:2)
public void keyPressed(KeyEvent ke){
btnAdd.setEnabled(true);
if(ke.getKeyCode()==KeyEvent.VK_ENTER)
btnAdd.doClick();
textField.setText("");
}
你的textField.setText(“”);是if语句的外部。因此,每次用户按下某个键时,您的文本字段都会清除。
应该是:
public void keyPressed(KeyEvent ke){
btnAdd.setEnabled(true);
if(ke.getKeyCode()==KeyEvent.VK_ENTER){
btnAdd.doClick();
textField.setText("");
}
}
答案 1 :(得分:1)
简单回答:在if语句旁边添加大括号!你有这个:
if(ke.getKeyCode()==KeyEvent.VK_ENTER)
btnAdd.doClick();
textField.setText("");
这相当于:
if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
btnAdd.doClick();
}
textField.setText("");
你应该对所有if语句使用大括号,无论多小:
if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
btnAdd.doClick();
textField.setText("");
}
你所做的是导致textField.setText()在每次按键时发生。
答案 2 :(得分:1)
不要在文本组件上使用KeyListener
,最后可能会出现突变,文本组件可能会消耗掉键,从不会到达听众,也不会考虑到用户将内容粘贴到字段中。
根据您的示例,您应该只使用ActionListener
,事实上,您可以使用添加到按钮中的同一个
ActionListener listener = new ActionListener(){
public void actionPerformed(ActionEvent ae) {
v.add(textField.getText());
list.setListData(v);
textField.setText("");
}
};
btnAdd.addActionListener(listener)(
textField = new JTextField();
textField.addActionListener(listener);
请查看How to use text fields了解详情
请勿在组件上使用setSize
,setLocation
或setBounds
。您应该依赖适当的布局管理器。现代UI预计将在不同的平台上运行,具有不同的屏幕分辨率,dpi,字体度量和渲染管道,所有这些都会影响屏幕上文本的大小...