【问题标题】:Enter Key as Java Application Form Submission - JFrame [closed]输入密钥作为 Java 申请表提交 - JFrame [关闭]
【发布时间】:2013-06-24 12:51:30
【问题描述】:

当我在一个 Java 应用程序上按“Enter”键时,我正在尝试制作一个示例代码来提交一个文本字段。

我正在使用 JFrame 和以下代码:

package com.sh.st;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;




public class SearchScreen extends JFrame{

    JButton btsearch;
    JLabel lbsearch;
    JTextField txtsearch;
    JPanel p1;

    public SearchScreen(){

    //Button Creation
    btsearch= new JButton("Search");


    //Label Creation
    lbsearch= new JLabel("Type Keywords in english to be searched below:");


    //TextBox   
    txtsearch= new JTextField();


    //Pane Creation 
    p1=new JPanel();
    p1.setBackground(Color.gray);

    //Pane Components
    p1.add(lbsearch);
    p1.add(txtsearch);
    p1.add(btsearch);

    btsearch.setEnabled(true);

    //Adding JPaneel    
    getContentPane().add(p1);

    //JFrame Setup
    setSize(300,300);
    setTitle("SHST");

    //JFrame Layout Setup   
    p1.setLayout(new GridLayout(3,3));


    btsearch.setMnemonic(KeyEvent.VK_ENTER);

    }

}

但问题是,作为一个虚拟键,我需要同时按住“alt”,这对于用户来说太不舒服且不直观。

我尝试查看堆栈和谷歌的很多页面,但没有一个给我答案。我看到了一些命令,例如“addKeyListener”,但直到现在我都无法做到我想要的。

感谢您的帮助

编辑 [主题已解决]

    package com.sh.st;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;


public class EventSearch extends SearchScreen{

    String query;



    public EventSearch(){

        txtsearch.getInputMap().put(keyStroke, key);
        txtsearch.getActionMap().put(key, enterAction);


}

    Action enterAction = new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {

                HttpRequest http = new HttpRequest(CatchQuery());

                } catch (IOException e1) {
                e1.printStackTrace(); //print failure
                JOptionPane.showMessageDialog(null, "HTTP request failure.");
            }   
        }};
     String key = "ENTER";
     KeyStroke keyStroke = KeyStroke.getKeyStroke(key);



            public String CatchQuery(){
                query=txtsearch.getText();
                this.dispose();
                return query;
            }



}

【问题讨论】:

  • 什么形式? html输入表单? gui形式?
  • 你说的是什么表格?我知道它是如何在摇摆中完成的,但似乎你没有使用摇摆。 JSP?你必须更精确(或至少添加一个标签)。
  • @Axel 是的,我正在尝试使用 swing 来做到这一点,我编辑了帖子。抱歉,信息太少了。
  • 更多代码可能有助于显示您在哪里使用它以及如何使用它。

标签: java forms keyboard jframe enter


【解决方案1】:

你可以使用KeyBindingsHow to use KeyBindings

这是一段代码

final JTextField textfield = new JTextField();
Action enterAction = new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) {
        //do something
    }};
 String key = "ENTER";
 KeyStroke keyStroke = KeyStroke.getKeyStroke(key);
 textfield.getInputMap().put(keyStroke, key);
 textfield.getActionMap().put(key, enterAction);

【讨论】:

  • 我在使用“enterAction”时遇到了困难,试图创建一个变量,但这弄乱了正在工作的代码的其他部分,请检查编辑一个
  • @VictorOliveira 1) 我将 keyBinding 添加到文本字段,例如,如果您不想获得焦点并按下键,则将此键绑定添加到容器中,例如 JPanel 或 frame.getContentPane( ) , 2) if(e.getSource()==btsearch) 这总是错误的,因为您正在将操作添加到另一个组件
  • 我照你说的做了,但现在由于 AbstractAction 来自一个抽象方法 dispose 被拒绝 CatchQuery 因为它返回一个字符串 - 检查编辑 2
  • @VictorOliveira 你的 edit2 甚至编译,你必须把它放在一个方法或构造函数中
  • 感谢您的帮助,现在它运行良好,我用完整的代码进行了三分之一的编辑,如果你能投票我会很高兴,我相信这会帮助别人别的。非常感谢
【解决方案2】:

只需在您的文本字段中添加一个 ActionListener:

//TextBox   
txtsearch = new JTextField();
txtsearch.addActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent e) {
    // code when enter is pressed in text field
  }
});

【讨论】:

  • 这没有回答,actionListener我已经在使用基于虚拟键...它只是在另一个类中实现
  • 那我不明白你想做什么。至少我是这样做的,它在我的代码中工作......
猜你喜欢
  • 2012-06-22
  • 1970-01-01
  • 2014-10-27
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 2021-06-04
  • 2019-11-08
相关资源
最近更新 更多