精华内容
下载资源
问答
  • Android基础篇 监听键盘回车事件以及回车响应两次
    2021-06-09 10:30:48

    一、布局属性

    (1)布局设置 : android:imeOptions=“actionSend”

        <androidx.appcompat.widget.AppCompatEditText
                    android:id="@+id/ed_text"
                    android:hint="请输入文字"
                    android:background="@color/transparent"
                    android:maxLines="1"
                    android:textSize="16sp"
                    android:singleLine="true"
                    android:imeOptions="actionSend"
                    android:textColor="#999999"
                    android:textColorHint="#999999"
                    android:layout_marginStart="@dimen/dp_10"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/dp_45"/>
    

    (2)代码设置:

    /** 输入法动作发送, 设置Ime选项(编辑信息.发送指令) */
    mEditText.setImeOptions(EditorInfo.IME_ACTION_SEND);  
    

    二、setOnEditorActionListener

    mEditText.setOnEditorActionListener(new AppCompatEditText.OnEditorActionListener() {
                @Override
                @RequiresApi(api = Build.VERSION_CODES.M)
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    /** 关于编辑器动作 输入法动作发送,输入法动作完成, */
                    if (actionId == EditorInfo.IME_ACTION_SEND
                            || actionId == EditorInfo.IME_ACTION_DONE
                            || (event != null) && KeyEvent.KEYCODE_ENTER
                            == event.getKeyCode() && KeyEvent.ACTION_DOWN == event.getAction()) {
    
                        /** 获取用户输入的文字内容 */
                        String text = Objects.requireNonNull(ed_text.getText()).toString().trim();
    					//具体你需要执行的操作
    					//......
                    }
                    //返回false以上的操作会执行两次,因为onEditorAction方法接受了false会表示尚未执行
                    //修改 return true,则回车之响应一次
                    return false;
                }
            });
    

    android edittext 点击回车会响应两次?
    由于Key有Down和Up事件,所以会执行两次

    更多相关内容
  • 折腾了很久,终于把登入界面的键盘监听加上了,内容很简单。其实想到的话也挺简单的,毕竟可以从鼠标监听事件推测过来。假设我们是如下的登入界面:我们需要对文本框进行监听,而不是对整个JFrame对象进行监听,所以...

    折腾了很久,终于把登入界面的键盘监听加上了,内容很简单。其实想到的话也挺简单的,毕竟可以从鼠标监听事件推测过来。

    假设我们是如下的登入界面:

    803f936a0fe70da77f81d6327d2d7910.png

    我们需要对文本框进行监听,而不是对整个JFrame对象进行监听,所以代码是这样的(其他部分代码可以看看我以前的博客http://blog..net/thehide/article/details/49537925):

    KeyListener key_Listener = new KeyListener()

    {

    public void keyTyped(KeyEvent e) {}

    public void keyReleased(KeyEvent e){}

    public void keyPressed(KeyEvent e){

    if(e.getKeyChar() == KeyEvent.VK_ENTER )

    {

    //可以写你的登入程序了

    }

    }

    };

    JTextField f1 = new JTextField(18);

    JPasswordField f2 = new JPasswordField(18);

    f1.addKeyListener(key_Listener);

    f2.addKeyListener(key_Listener);

    按回车就可以实现登入了。

    下面还有就是那种QQ消息,按  ctrl+回车  进行发送怎么写呢?很简单,看下面的语句吧,很快就可以类推出

    KeyListener key_Listener = new KeyListener()

    {

    public void keyTyped(KeyEvent e) {}

    public void keyReleased(KeyEvent e){}

    public void keyPressed(KeyEvent e){

    if(e.getKeyChar() == KeyEvent.VK_ENTER && e.isControlDown() )

    {

    //可以写你的登入程序了

    }

    }

    };

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼package JSD1806HYQ;import javax.swing.JFrame;...import java.awt.Graphics;import java.util.Arrays;import java.util.Date;import java.util.Random;import java....

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    package JSD1806HYQ;

    import javax.swing.JFrame;

    import javax.swing.JPanel;

    import java.awt.Graphics;

    import java.util.Arrays;

    import java.util.Date;

    import java.util.Random;

    import java.util.Timer;

    import java.util.TimerTask;

    import java.awt.image.BufferedImage;

    import java.awt.event.KeyAdapter;

    import java.awt.event.KeyEvent;

    import java.awt.event.KeyListener;

    /** 世界 */

    public class World extends JPanel implements KeyListener{

    public static final int WIDTH = 800;

    public static final int HEIGHT = 1000;

    public static final int updistance=30;//java窗口中上边距为30个像素;

    public static final int downdistance=8;//java窗口中下边距左右编剧为8个像素;

    private static final long serialVersionUID = 1L;

    private Boss zzlz = new Boss();

    private Sky sky = new Sky();

    private Hero hero = new Hero();

    private FlyingObject[] enemies = {}; //敌人数组

    private Bullet[] bullets = {}; //子弹数组

    private DrBullet[] drbullets = {};

    Date startTime;//界面开始的时间

    Date startTime1;//游戏开始的时间

    Date endTime;//飞机死亡的时间

    Date nowTime;//现在的时间

    Date collisionTime=new Date();

    Date collisionTimeNow;

    long timefirst=24625;

    long now_startTime;//开始到现在的时间

    int enterNum=0;

    boolean bigbullet=true;

    boolean boss=false;//判断是否是boss关

    boolean flag = false;//表示游戏是否开始

    public static BufferedImage start;

    public static BufferedImage pause;

    public static BufferedImage gameover;

    static{

    start = FlyingObject.loadImage("start.png");

    pause = FlyingObject.loadImage("pause.png");

    gameover = FlyingObject.loadImage("gameover.png");

    }

    public FlyingObject nextOne(){

    Random rand = new Random();

    int type = rand.nextInt(20);

    if(type < 4){

    return new Bee();

    }else if(type < 12){

    return new Airplane();

    }else {

    return new BigAirplane();

    }

    }

    int flyEnterIndex = 0;

    public void enterAction(){

    flyEnterIndex++;

    if(flyEnterIndex%40==0){

    FlyingObject obj = nextOne();

    enemies = Arrays.copyOf(enemies,enemies.length+1);

    enemies[enemies.length-1] = obj;

    }

    }

    public void stepAction(){

    zzlz.step();

    sky.step();

    for(int i=0;i

    enemies[i].step();

    }

    for(int i=0;i

    bullets[i].step();

    }

    }

    int shootIndex = 0;

    public void shootAction(){

    shootIndex++;

    if(shootIndex%30==0){

    Bullet[] bs = hero.shoot();

    bullets = Arrays.copyOf(bullets,bullets.length+bs.length);

    System.arraycopy(bs,0,bullets,bullets.length-bs.length,bs.length);

    }

    }

    private int score = 0;

    public void bangAction(){

    for(int i=0;i

    Bullet b = bullets[i];

    for(int j=0;j

    FlyingObject f = enemies[j];

    if(b.isLife() && f.isLife() && b.hit(f)){

    b.goDead();

    f.goDead();

    if(f instanceof Enemy){

    Enemy e = (Enemy)f;

    score += e.getScore();

    }

    if(f instanceof Award){

    Award a = (Award)f;

    int type = a.getAwardType();

    switch(type){

    case Award.DOUBLE_FIRE:

    hero.addDoubleFire();

    break;

    case Award.LIFE:

    hero.addLife();

    break;

    }

    }

    }

    }

    }

    }

    public void outOfBoundsAction(){

    int index = 0;

    FlyingObject[] enemyLives = new FlyingObject[enemies.length];

    for(int i=0;i

    FlyingObject e = enemies[i];

    if(!e.outOfBounds() && !e.isRemove()){

    enemyLives[index++] = e;

    }

    }

    enemies = Arrays.copyOf(enemyLives,index);

    index = 0;

    Bullet[] bulletLives = new Bullet[bullets.length];

    for(int i=0;i

    Bullet b = bullets[i];

    if(!b.outOfBounds() && !b.isRemove()){

    bulletLives[index++] = b;

    }

    }

    bullets = Arrays.copyOf(bulletLives,index);

    }

    public void hitAction(){

    for(int i=0;i

    FlyingObject f = enemies[i];

    if(f.isLife() && hero.hit(f)){

    f.goDead();

    hero.subtractLife();

    hero.clearDoubleFire();

    break;

    }

    }

    }

    public void checkGameOverAction(){

    if(hero.getLife()<=0){

    flag = false;

    }

    }

    int num = 1;

    public void action(){ //启动执行

    Timer timer = new Timer();

    int intervel = 10;

    timer.schedule(new TimerTask(){

    public void run(){

    if(flag==true){

    enterAction();

    stepAction();

    shootAction();

    outOfBoundsAction();

    bangAction();

    hitAction();

    checkGameOverAction();

    }

    repaint();

    }

    },intervel,intervel);

    }

    public void paint(Graphics g){

    if(now_startTime>1000){

    System.out.println(now_startTime);

    boss=true;

    zzlz.paintObject(g);

    }

    sky.paintObject(g);

    hero.paintObject(g);

    for(int i=0;i

    enemies[i].paintObject(g);

    }

    for(int i=0;i

    bullets[i].paintObject(g);

    }

    for(int i=0;i

    drbullets[i].paintObject(g);

    }

    g.drawString("SCORE: "+score,10,25);

    g.drawString("LIFE: "+hero.getLife(),10,45);

    }

    public static void main(String[] args) {

    JFrame frame = new JFrame();

    World world = new World();

    frame.add(world);

    frame.addKeyListener(world);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setSize(WIDTH, HEIGHT);

    frame.setLocationRelativeTo(null);

    frame.setVisible(true);

    world.action();

    }

    @Override

    public void keyTyped(KeyEvent e) {

    }

    @Override

    public void keyPressed(KeyEvent e) {

    hero.addDirection(e);

    if(e.getKeyCode()==KeyEvent.VK_ENTER){

    flag = true;

    }

    }

    @Override

    public void keyReleased(KeyEvent e) {

    hero.minusDirection(e);

    if(e.getKeyCode()==KeyEvent.VK_ENTER){

    enterNum++;

    if(enterNum==1){

    startTime=new Date();//游戏开始的时间

    System.out.println(startTime);

    }

    }

    }

    }

    展开全文
  • 今天遇到个需求,需要 EditText控件监听键盘回车按键,将用户写下的多行文本提交到服务器。一开始以为是个简单的要求,不过由于对EditText内部机制的不了解,导致比预期花多了不少时间去完成,特此记录一下。...

    今天遇到个需求,需要 EditText控件监听软键盘的回车按键,将用户写下的多行文本提交到服务器。

    一开始以为是个简单的要求,不过由于对EditText内部机制的不了解,导致比预期花多了不少时间去完成,特此记录一下。

    如果是对EditText内部机制不熟悉的人的话,一开始应该会写出类似我们下面的代码:

    android:id="@+id/editText"

    android:layout_width="match_parent"

    android:layout_height="120dp"

    android:background="@drawable/input_box"

    android:gravity="top|start"

    android:imeOptions="actionDone"

    android:padding="8dp" />

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    EditText editText = (EditText) findViewById(R.id.editText);

    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {

    @Override

    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

    if (actionId == EditorInfo.IME_ACTION_DONE) {

    Toast.makeText(MainActivity.this, "Commit!", Toast.LENGTH_SHORT).show();

    return true;

    }

    return false;

    }

    });

    }

    然而当我们运行上面的代码,输入一大串东西后就会发现:

    701fb57269d0

    image.png

    在xml设置的android:imeOptions="actionDone"怎么没有起到作用?怎么软键盘的回车按键还是个换行符号的?

    通过查询各种资料,要让EditText的imeOptions配置生效就必须设置下面两个属性中的一个:

    android:singleLine="true"

    android:inputType="text"

    只要你设置了上面的任意一个(inputType属性不一定是设置text类型的,不过也不是全部的inputType类型都可以,具体的请自己去尝试),都可以让imeOptions配置生效和完成软键盘的回车键监听。不过估计你也察觉到了,上面两个属性,只要有一个在xml里面设置了,那么EditText就失去换行的作用了!!!

    解决的方法

    由于需求是多行输入,无论是android:singleLine="true"还是android:inputType="text"都限制了只能单行,那么有什么方法可以突破text类型的单行限制吗?当然是有的,EditText继承TextView,查看下TextView的setSingleLine方法可以看到一个applySingleLine方法,里面可以看到一些有趣的代码:

    701fb57269d0

    image.png

    setMaxLines方法大家应该偶读很熟悉了,setHorizontallyScrolling方法还是第一次见到,点进去看下注解:

    701fb57269d0

    image.png

    好的,这样子大概就知道了这个方法是设置文本能否超过View的宽度,如果是false,那么文本宽度最多只能是View的宽度。

    看到这里,笔者第一时间在xml里面做了下面的设置:

    android:id="@+id/editText"

    android:layout_width="match_parent"

    android:layout_height="120dp"

    android:background="@drawable/input_box"

    android:gravity="top|start"

    android:imeOptions="actionDone"

    android:singleLine="true"

    android:maxLines="50"

    android:scrollHorizontally="false"

    android:padding="8dp" />

    结果是不起作用的,猜测应该是TextView在初始化属性那边将android:singleLine属性放在了后面处理,那么在Java代码里面做处理会怎么样:

    android:id="@+id/editText"

    android:layout_width="match_parent"

    android:layout_height="120dp"

    android:background="@drawable/input_box"

    android:gravity="top|start"

    android:imeOptions="actionDone"

    android:singleLine="true"

    android:padding="8dp" />

    EditText editText = (EditText) findViewById(R.id.editText);

    editText.setHorizontallyScrolling(false);

    editText.setMaxLines(Integer.MAX_VALUE);

    运行看下代码:

    701fb57269d0

    show.gif

    ok,问题解决了。

    展开全文
  • hook全局监听键盘事件

    2021-01-07 17:20:52
    hook全局监听键盘事件
  • android实现回车键监听

    千次阅读 2018-08-14 14:02:36
    1.布局文件中的edittext:设置属性 android:singleLine="true" android:imeOptions="...2.java文件中 editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override ...
  • // 输出的名称 g.drawString("字符:" + KeyChar, 100, 140); // 输出字符 } public void keyPressed(KeyEvent event) // 得到虚拟键码 { KeyVirtualCode = event.getKeyCode(); } public void keyReleased...
  • 有个textarea, Java代码 代码如下: <textarea id=”text”></textarea> 经常会定义onKeyPress=”keypress();”,并定义以下方法。 代码如下: var keypress = function(e){ var e = e || window.event; ...
  • 在写网页的时候,常常需要监听键盘事件,让我们来看看如何实现吧。监听方式键盘事件往往是全局监听,设监听的函数为keyboard()。keyup事件类型。该类型触发条件为按键按下去并松开。//长按并松开只触发一次document....
  • 注意如果android:imeOptions=””属性设置后,发现回车键没有改变,则必须设置Android:singleLine=”true” 一、android 软件盘事件响应 在android中,有时需要对EditText实现软件盘监听的场景。当android按下...
  • 移动端常常项目中会有搜索之类的功能,通常... 移动端软键盘回车会触发form的submit事件,因此咱们只须要监听form的submit事件就能够实现按回车按钮进行搜索的功能java var oForm = document.getElementsByTagName(“f
  • 34 35 //通过回车来代替提交动作 36 driver.findElement(By.xpath("//*[@id='kw']")).sendKeys(Keys.ENTER); 37 38 waitTime(5000); 39 driver.quit(); 40 } 41 42 static public void waitTime(int time) { 43 44 ...
  • java模拟键盘操作,java自动化操作

    万次阅读 2021-01-28 14:10:18
    博客来源: 一个字,懒!这正是我前进的源泉…现在连操作电脑都想自动化了…… 已经打好的包————>... 已经打好的包————>...已经打好的包————>...话不多说上源码,注释很全,...import java.awt.even...
  • //利用 java.awt.Robot 类来自动完成一些键盘或鼠标的动作,下面是一个小例子//程序流程:模拟鼠标左键点击 开始-->运行-->CMD-->DIR-->CLS-->EXIT//模拟右键点击 移动到右下角-->右键点击-->...
  • Android修改软键盘回车键监听

    千次阅读 2015-07-24 16:55:04
    首先在XML中修改想把回车键改变为什么键 android:imeOptions="actionSend" android:inputType="text"其中actionSend就是改为发送 然后在代码中进行监听 @Override public boolean dispatchKeyEvent(KeyEvent ...
  • android 键盘按键监听

    千次阅读 2016-03-02 10:11:41
    onKeyDown方法:该方法是接口KeyEvent.Callback中的抽象方法,所有的View全部实现了该接口并重写了该...参数keyCode,该参数为被按下的键值即键盘码,手机键盘中每个按钮都会有其单独的键盘码,在应用程序都是通过
  • 在TextField上设置 autofocus = true 以在加载页面时获得焦点,并使用FocusNode和FocusScope始终将TextField设置为焦点 .... } } Note: 这种方法会给键盘带来崎岖的效果 . 我不确定这对你有多重要 .
  • 键盘监听

    2020-06-24 15:35:17
    GetKeyState(), GetAsyncKeystate(), ...获得全部的256个键盘按键、鼠标按键等等)的状态,lpKeyState是指向一个256bit的数组。存放全部的状态。 2、SHORT GetAsyncKeyState( int vKey );推断Virtu
  • xml中设置EditText的属性,...设置监听,实现TextView.OnEditorActionListener接口 mSearch.setOnEditorActionListener(this); 实现onEditorAction方法 @Overridepublic boolean onEditorAction(TextView v, int a
  • 前端(十五)—— JavaScript事件:绑定事件方式、事件的冒泡和默认事件、鼠标事件、键盘事件、表单 事件、文档事件、图片事件、页面事件JS事件:绑定事件方式.事件的冒泡和默认事件.鼠标事件.键盘事件.表单 事件....
  • 需要用到的 jna及jna-platform jar包 ...import java.io.*; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.sun.jna.Pointer; import
  • java 怎么在控制台就可以监听键盘的输入(不用敲回车),比如连续输入三个a,系统提示停止输入 http://www.tuxi.com.cn/viewb-30830-308301630.html
  • Java编程:获取键盘输入的三种方法

    万次阅读 2016-07-28 17:52:48
    方法一:使用System.out.read()获取键盘输入,此方法只能一个字符一个字符的获取,获取到的变量类型为int,需要通过类型转换获取到自己期望的类型。该方法也会接收回车符(13)、换行符(10)。package ...
  • 结果实测发现如果使用按键监听函数addKeyListener触发按键事件的话不仅会把文本发出去,还会在发送文本框内加一个回车键换行,也就是按下回车后不仅执行了addKeyListener事件还执行了系统默认的【输入回车符】的事件...
  • 一、键盘事件 KeyPressed //按键按压 KeyReleased //按键释放 KeyTyped //按键类型 二、用法 a.lambda表达式 node.addEventHandler(KeyEvent.XX, event -> { //逻辑代码 }); b.多个地方调用时可抽象...
  • Toast.makeText(getContext(),"点击了回车键",Toast.LENGTH_SHORT).show(); // 隐藏软键盘 InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm...
  • swing 设置回车响应按钮的方法

    千次阅读 2021-02-28 11:01:39
    Java的界面开发与.NET和MFC相比没那么直观,为了设置按钮对回车按键...其中 jbtn_change 就是在画面按下回车键是需要执行的按钮对象。二、这个方法比较麻烦,但是比较灵活。其中原理就是在每个输入框上添加键盘输入...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,344
精华内容 2,137
关键字:

java回车键键盘监听

java 订阅