Java 在JTextField中启用快捷方式
我有一个JTextField,在框架内,我为一些按钮和菜单项设置了一些快捷方式。一旦我开始在JTextField中输入,当我按下任何快捷键时,它就不起作用了,因为当前的焦点在文本字段上。我怎样才能删除这个 下面是到目前为止我的代码。我用netbeans做过Java 在JTextField中启用快捷方式,java,swing,Java,Swing,我有一个JTextField,在框架内,我为一些按钮和菜单项设置了一些快捷方式。一旦我开始在JTextField中输入,当我按下任何快捷键时,它就不起作用了,因为当前的焦点在文本字段上。我怎样才能删除这个 下面是到目前为止我的代码。我用netbeans做过 public class NewJFrame extends javax.swing.JFrame { public NewJFrame() { initComponents(); testTextField.addKeyL
public class NewJFrame extends javax.swing.JFrame {
public NewJFrame() {
initComponents();
testTextField.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!(Character.isDigit(c)
|| (c == KeyEvent.VK_BACK_SPACE)
|| (c == KeyEvent.VK_DELETE) || c == '.'
|| (c == KeyEvent.VK_PERIOD)
|| (c == KeyEvent.VK_DECIMAL))) {
//JOptionPane.showMessageDialog(new JFrame(), "Only Numeric allowed");
e.consume();
}
}
});
testButton.setMnemonic(KeyEvent.VK_E);
String keyCombination = "alt E";
KeyStroke keyStroke = KeyStroke.getKeyStroke(keyCombination);
testTextField.getInputMap().put(keyStroke, keyCombination);
testTextField.getActionMap().put(keyCombination, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
testButton.doClick();
}
});
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jPanel1 = new javax.swing.JPanel();
testButton = new javax.swing.JButton();
testTextField = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setFocusTraversalPolicyProvider(true);
getContentPane().setLayout(new java.awt.GridLayout());
jPanel1.setFocusCycleRoot(true);
jPanel1.setLayout(new java.awt.GridBagLayout());
testButton.setText("Click");
testButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
testButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridheight = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(118, 18, 159, 96);
jPanel1.add(testButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.ipadx = 146;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(119, 61, 0, 0);
jPanel1.add(testTextField, gridBagConstraints);
getContentPane().add(jPanel1);
pack();
}// </editor-fold>
private void testButtonActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println("pressed");
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JButton testButton;
private javax.swing.JTextField testTextField;
// End of variables declaration
}}
公共类NewJFrame扩展了javax.swing.JFrame{
公共NewJFrame(){
初始化组件();
addKeyListener(新的KeyAdapter(){
public void keyTyped(KeyEvent e){
char c=e.getKeyChar();
if(!(字符.isDigit(c)
||(c==KeyEvent.VK_BACK_SPACE)
||(c==KeyEvent.VK|u DELETE)| c==
||(c==KeyEvent.VK_期间)
||(c==KeyEvent.VK_DECIMAL))){
//showMessageDialog(新JFrame(),“仅允许数字”);
e、 消费();
}
}
});
testButton.set助记符(KeyEvent.VK_E);
字符串keyCombination=“alt E”;
击键击键=击键。getKeyStroke(组合键);
testTextField.getInputMap().put(击键、组合键);
testTextField.getActionMap().put(keyCombination,newAbstractAction()){
@凌驾
已执行的公共无效操作(操作事件e){
testButton.doClick();
}
});
}
@抑制警告(“未选中”)
//
私有组件(){
java.awt.GridBagConstraints GridBagConstraints;
jPanel1=newjavax.swing.JPanel();
testButton=newjavax.swing.JButton();
testTextField=newjavax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setFocusTraversalPolicyProvider(真);
getContentPane().setLayout(新java.awt.GridLayout());
jPanel1.setFocusCycleRoot(真);
setLayout(新java.awt.gridbagloayout());
setText(“单击”);
testButton.addActionListener(新java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
执行的测试按钮(evt);
}
});
gridBagConstraints=new java.awt.gridBagConstraints();
gridBagConstraints.gridx=1;
gridBagConstraints.gridy=0;
gridBagConstraints.gridheight=2;
gridBagConstraints.anchor=java.awt.gridBagConstraints.NORTHWEST;
gridbagsconstraints.insets=newjava.awt.insets(118,18,159,96);
add(testButton,gridBagConstraints);
gridBagConstraints=new java.awt.gridBagConstraints();
gridBagConstraints.gridx=0;
gridBagConstraints.gridy=0;
gridBagConstraints.ipadx=146;
gridBagConstraints.anchor=java.awt.gridBagConstraints.NORTHWEST;
gridBagConstraints.insets=新java.awt.insets(119,61,0,0);
add(testTextField,gridBagConstraints);
getContentPane().add(jPanel1);
包装();
}//
私有void testButtonActionPerformed(java.awt.event.ActionEvent evt){
系统输出打印项次(“按下”);
}
//变量声明-不修改
私有javax.swing.JPanel jPanel1;
私有javax.swing.JButton testButton;
私有javax.swing.JTextField testTextField;
//变量结束声明
}}
谢谢为了使用您需要使用的快捷方式,以下是如何在
textfield
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class KLisDemo {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel comp = new JPanel();
JTextField textField = new JTextField(20);
String keyCombination = "alt E";
KeyStroke keyStroke = KeyStroke.getKeyStroke(keyCombination);
textField.getInputMap().put(keyStroke, keyCombination);
textField.getActionMap().put(keyCombination, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
textField.setText("ALT+E was pressed");
}});
comp.add(textField);
frame.add(comp);
frame.setSize(new Dimension(500,500));
frame.setVisible(true);
}
}
所以,有三件事让我吃惊 一。。。 您不应该在文本组件上使用
KeyListener
s,只是不能保证在文档
发生关键事件之前会通知您,或者文档
没有处于更改状态。此外,这也不能处理用户将文本粘贴到字段中的情况
相反,您应该使用DocumentFilter
将内容过滤到字段中
e
/e
的内容,或者将助记符更改为文本中的某个字符,如C,它将起作用
例如
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class NewJFrame extends javax.swing.JFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
NewJFrame frame = new NewJFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public NewJFrame() {
initComponents();
// testTextField.addKeyListener(new KeyAdapter() {
// public void keyTyped(KeyEvent e) {
// char c = e.getKeyChar();
// if (!(Character.isDigit(c)
// || (c == KeyEvent.VK_BACK_SPACE)
// || (c == KeyEvent.VK_DELETE) || c == '.'
// || (c == KeyEvent.VK_PERIOD)
// || (c == KeyEvent.VK_DECIMAL))) {
// //JOptionPane.showMessageDialog(new JFrame(), "Only Numeric allowed");
// e.consume();
// }
// }
// });
testButton.setMnemonic(KeyEvent.VK_C);
// String keyCombination = "alt E";
//
// KeyStroke keyStroke = KeyStroke.getKeyStroke(keyCombination);
// testTextField.getInputMap().put(keyStroke, keyCombination);
// testTextField.getActionMap().put(keyCombination, new AbstractAction() {
// @Override
// public void actionPerformed(ActionEvent e) {
// testButton.doClick();
// }
// });
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jPanel1 = new javax.swing.JPanel();
testButton = new javax.swing.JButton();
testTextField = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setFocusTraversalPolicyProvider(true);
getContentPane().setLayout(new java.awt.GridLayout());
jPanel1.setFocusCycleRoot(true);
jPanel1.setLayout(new java.awt.GridBagLayout());
testButton.setText("Click");
testButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
testButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridheight = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(118, 18, 159, 96);
jPanel1.add(testButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.ipadx = 146;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(119, 61, 0, 0);
jPanel1.add(testTextField, gridBagConstraints);
getContentPane().add(jPanel1);
pack();
}// </editor-fold>
private void testButtonActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println("pressed");
}
// Variables declaraÏtion - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JButton testButton;
private javax.swing.JTextField testTextField;
// End of variables declaration
}
导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入java.awt.event.KeyEvent;
导入javax.swing.JFrame;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公共类NewJFrame扩展了javax.swing.JFrame{
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
NewJFrame=newnewjframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共NewJFrame(){
初始化组件();
//addKeyListener(新的KeyAdapter(){
//public void keyTyped(KeyEvent e){
//char c=e.getKeyChar();
//if(!(字符.isDigit(c)
//| |(c==KeyEvent.VK_BACK_SPAC
public class NewJFrame extends javax.swing.JFrame {
public NewJFrame() {
initComponents();
testButton.setMnemonic(KeyEvent.VK_E);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jPanel1 = new javax.swing.JPanel();
testButton = new javax.swing.JButton();
testTextField = new NumberField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setFocusTraversalPolicyProvider(true);
getContentPane().setLayout(new java.awt.GridLayout());
jPanel1.setFocusCycleRoot(true);
jPanel1.setLayout(new java.awt.GridBagLayout());
testButton.setText("Click");
testButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
testButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridheight = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(118, 18, 159, 96);
jPanel1.add(testButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.ipadx = 146;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(119, 61, 0, 0);
jPanel1.add(testTextField, gridBagConstraints);
getContentPane().add(jPanel1);
pack();
}// </editor-fold>
private void testButtonActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println("pressed");
}
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JButton testButton;
private NumberField testTextField;
// End of variables declaration
}
public class NumberField extends JTextField {
@Override
protected Document createDefaultModel() {
return new Numberdocument();
}
}
class Numberdocument extends PlainDocument {
String numbers = "1234567890-";
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (!numbers.contains(str)) {
JOptionPane.showMessageDialog(new JFrame(), "Only Numbers Allowed");
} else {
super.insertString(offs, str, a);
}
}
}