java for循环 等待_java-等待在循环内按下键
Swing(和大多数GUI)是事件驱动的环境.也就是说,某些事情发生了,您对此做出了反应.
让循环等待某种动作是一种反直观(IMHO).
一般来说,如果可以,应该避免使用KeyListeners.他们有重点关注的问题. key bindings API具有克服此限制的方法.
它允许您针对Action注册一个KeyStroke,并允许您的程序坐下来等到发生某种事情为止.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;
public class KeyBindings {
public static void main(String[] args) {
new KeyBindings();
}
public KeyBindings() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 0;
add(new KeyPane(KeyEvent.VK_UP, 0), gbc);
gbc.gridy = 2;
add(new KeyPane(KeyEvent.VK_DOWN, 0), gbc);
gbc.gridx = 0;
gbc.gridy = 1;
add(new KeyPane(KeyEvent.VK_LEFT, 0), gbc);
gbc.gridx = 2;
add(new KeyPane(KeyEvent.VK_RIGHT, 0), gbc);
}
}
public class KeyPane extends JPanel {
public KeyPane(int keyCode, int modifier) {
setBorder(new LineBorder(Color.DARK_GRAY));
InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(keyCode, modifier, false), "keyPressed");
im.put(KeyStroke.getKeyStroke(keyCode, modifier, true), "keyReleased");
am.put("keyPressed", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
setBackground(Color.RED);
}
});
am.put("keyReleased", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
setBackground(UIManager.getColor("Panel.background"));
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(20, 20);
}
}
}
java for循环 等待_java-等待在循环内按下键相关推荐
- java 循环写法_java的for循环的几种写法
J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象.本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类 ...
- java for怎么跳出_java跳出for循环的方法
java跳出for循环的方法 发布时间:2020-06-26 15:56:42 来源:亿速云 阅读:193 作者:Leah 这篇文章将为大家详细讲解有关java跳出for循环的方法,文章内容质量较高, ...
- java双重for循环流程图_java 流程执行 循环 foreach循环
一. if分支 1. 结构 if else if else 2.执行原则 if if if 结构 会一直去执行()里的判断语句 if else if else if 结构 只要一条( ...
- java双重for循环流程图_Java的for循环
Java有好几种循环语句. for循环是Java的循环之一. for循环在java中用于重复执行一些语句,直到条件返回false. for循环有以下三个部分. 初始化 循环条件 自增或自减 for循环 ...
- java中的循环结构_Java中的循环结构进阶
循环结构进阶 学习本章用到的单词 triangle:三角形 circle:圆形 diamond:钻石 password:密码 row:行.排列 二重循环结构 简单的说:二重循环就是一个循环体内又包含另 ...
- java 对象向上转型_JAVA对象向上转型和向下转型
今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...
- java二重循环计数_java的二重循环代码样例
1.计算三个班的平均分 import java.util.Scanner; public class AvgScore{ public static void main (Sting[] args){ ...
- java合并sheet行_java poi Excel循环合并行
//Java poi 实现循环合并行,还是第一次遇到这种问题 //在网上查了很多资料,都不是自己想要的 //以下为自己研究后,写的一点东西,给大家分享,希望对大家能有思路上的启发,也希望大家能提出宝贵 ...
- java for循环 写法_java中for循环的6种写法
packageForLoop;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;/*** java中for ...
最新文章
- PCL:点云配准1、基础知识:平面3自由度、旋转矩阵精讲
- Science:基于微生物条形码系统的高分辨率物源追踪技术
- 018_Spring+ActiveMQ(消息中间件)
- Android中使用SeekBar拖动条实现改变图片透明度
- php 不支持无符号整数,是否可以使用大型无符号int64而不会在PHP中失去精度?
- Charlse 抓包
- 查看Ubuntu中的ip地址
- 2016年ICT行业前瞻:竞合生态,牵着手 一起走
- 04-07递归解法问题
- (轉載)HDMI之EDID字段解析
- FISCO BCOS v3.x 多群组区块链Pro版本搭建说明(ubuntu)
- 单片机c语言有没有跳转指令,51单片机跳转指令
- 代码整洁之道 1-3阅读笔记
- 2015 数学建模 国赛(高教杯)-B题 “互联网+”时代的出租车资源配置
- 如何彻底卸载MySQL5.7
- 解决:sql server无法在C盘下创建database/操作系统错误5(拒绝访问)
- 回忆杀,pythonQ版泡泡堂
- 电阻、电容、电感的高频等效电路详细分析
- [JavaScript]根据中文(拼音)英文进行分类
- HEIC图片转换软件
热门文章
- 全球首发!计算机视觉Polygon Mesh Processing总结8——Remeshing Global Structure和Correspondences
- 卷积神经网络——第一周 卷积神经网络基础——第三部分
- ModuleNotFoundError: No module named 'sklearn.grid_search'报错
- 综述!信息检索中的花式预训练
- 时钟服务器地址_时钟同步 Chrony 教程
- 对最大熵模型为什么要最大化熵的一点理解
- Vue源码学习(三)——数据双向绑定
- el-tree 拖拽互换位置_那些我们与UI交互的动作(三·拖拽)
- 多线程 转账_Java多线程编程基础三(原子性,可见性和有序性)
- [Ext JS ]3.4 数字输入框 numberfield