我有以下内容:
import javax.swing.JFrame;
public class Directions {
public Directions(){
JFrame frame = new JFrame("Direction");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new DirectionPanel());
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
Directions myTest = new Directions();
}
}
Run Code Online (Sandbox Code Playgroud)
第二课:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DirectionPanel extends JPanel{
public DirectionPanel(){
addKeyListener(new DirectionListener());
setBackground(Color.yellow);
}
private class DirectionListener implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
//JOptionPane.showMessageDialog(null, "Hello Johnny");
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_LEFT){
setBackground(Color.red);
}
repaint();
}
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我正在进行必须使用AWT完成的Java任务.我想在按钮处于焦点时按下回车键来触发按钮.我想知道如何使用doClick()方法在Swing中执行此操作,但这似乎在AWT中不起作用.到目前为止我正在尝试这个:
button.addActionListener(this); // Passes value from a TextBox to actionPerformed()
button.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER) {
actionPerformed(null);
}
}
});
public void actionPerformed (ActionEvent e) {
try {
if (e.getSource() == button) {
// Stuff I want to happen
} else if (e.getSource() == anotherButton) {
// Other Stuff
} else { //third button
// More stuff
}
} catch (NumberFormatException nfe) {
// Null argument in keyPressed triggers this
// catches empty string exception from …Run Code Online (Sandbox Code Playgroud) 我有一个QTabWidget在我的QT窗口中,它似乎吞下了左/右按键事件.在主窗口中,我有以下功能:
void VisionWindow::keyPressEvent(QKeyEvent* event) {
std::cout << event->key() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
当我按下除左或右之外的任何键时,处理程序将关闭并将键代码打印到控制台.当我按下左边或右边,它移动到下一个左侧的标签窗口小部件(或右)选项卡和VisionWindow的keyPressEvent方法永远不会触发.
我试图用一个忽略该事件的子类来解决这个问题:
class KeylessTabWidget : public QTabWidget {
public:
KeylessTabWidget(QWidget* parent) : QTabWidget(parent) {}
void keyPressEvent(QKeyEvent* event) { event->ignore(); std::cout << "ignored an event\n"; }
};
Run Code Online (Sandbox Code Playgroud)
与主窗口类似,只有在按下左或右按键时才会调用此窗口.我也看到基于焦点的位置,有时向左或向右击中会将焦点切换到主窗口中的不同小部件,如复选框.如果有任何方法可以回收左右键,或者我应该接受这些在QT中被广泛使用并默认切换到其他东西?
更新:
最后我用#include <QApplication>一起qApp->installEventFilter(this);在我的窗口构造.缺点是标签小部件仍在切换标签.这似乎是一个linux问题.从好的方面来说,我能够捕获所有关键事件.我正在让子窗口小部件吞下其他键的事件,这解决了它.
这段代码构建正确,一切似乎都有效,但键无效.我认为它是动作监听器或椭圆形不更新.我正在尝试通过初学者java游戏编程.我相信这很容易,但我没有抓住它.如果这有所不同,我在sublime text 2中使用mac.
package javagame;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JavaGame extends JFrame {
int x, y;
public class AL extends KeyAdapter {
public void keyPressed(KeyEvent e) {
int keycode = e.getKeyCode();
if(keycode == e.VK_LEFT); {
x-= 3;
}
if(keycode == e.VK_RIGHT); {
x+= 3;
}
if(keycode == e.VK_UP); {
y-= 3;
}
if(keycode == e.VK_DOWN); {
y+= 3;
}
}
public void keyReleased(KeyEvent e) {
}
}
public JavaGame() {
addKeyListener(new AL());
setTitle("Jave Game");
setSize(700, 700); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Java中使用Robot类并输入一些文本.不幸的是,我在找到方括号的键码,这个符号|和这个符号时遇到了问题.我无法在KeyEvent常量中找到它们.我想使用它们,因为我输入的文本是西里尔字母,这些符号代表字母表中的字符.提前致谢.
我有一个班级世界如下:
public class World extends JFrame implements KeyListener {
public boolean left = false, right = false, back = false, fwd = false;
public World() {
this.setSize(600, 600);
this.setVisible(true);
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getExtendedKeyCode() == KeyEvent.VK_LEFT) left = true;
if(e.getExtendedKeyCode() == KeyEvent.VK_RIGHT) right = true;
if(e.getExtendedKeyCode() == KeyEvent.VK_UP) fwd= true;
if(e.getExtendedKeyCode() == KeyEvent.VK_DOWN) back = true;
System.out.println("L:"+left+" R:"+right+" F:"+fwd+" B:"+back);
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getExtendedKeyCode() == KeyEvent.VK_LEFT) left = false;
if(e.getExtendedKeyCode() == KeyEvent.VK_RIGHT) right …Run Code Online (Sandbox Code Playgroud) 老实说,我不知道我做错了什么.
有时,关键事件会记录,有时则不会.
我的意思是,有时当我运行Frogger2时,我会注册事件,有时甚至没有.
当关键事件记录或不记录时,它似乎是完全随机的.通常,如果我暂时不测试任何东西并运行Frogger2事件注册,当我关闭它并重新运行完全相同的程序时,我没有事件.
请帮忙.
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class Frogger2 extends JPanel {
public static JFrame frame;
public static Frogger2 F;
public Frogger2() {}
public Dimension getPreferredSize() { return new Dimension(500,500); }
public void paintComponent(Graphics g) { super.paintComponent(g); }
private int fdir;
public void moveLeft() {
travel(2);
}
public void moveRight() {
travel(0);
}
public void moveUp() {
travel(3);
}
public void moveDown() {
travel(1);
}
private void travel(int ddd) {
System.out.println(ddd); …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个Web应用程序,它要求我检测是否按下了控件.
如果按下的键是ctrl,则使用keydown事件将标志设置为true,然后使用keyup事件将该标志设置为false.evt.ctrlKey如果按下的键是控制键,我正在使用轻松返回true.
但令我惊讶的是,我可以看到evt.keyCode等于17,同时evt.ctrlKey给我一个假.
这不会发生在keydown事件中.
请看这个简单的小提琴复制.我正在使用Firefox 27.
PS:我知道我可以测试keyCode是否为17,但我想知道我是否错过了什么.
我正在努力创造一种识别关键组合的方法.在我甚至可以设置任何布尔值之前,我注意到某些键组合会导致忽略其他键.
package question;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
public class Example extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
public Example() {
setBackground(Color.DARK_GRAY);
setPreferredSize(new Dimension(500,500));
setFocusable(true);
requestFocusInWindow();
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), "action_a");
getActionMap().put("action_a", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("A has been pressed!");
}
});
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_S, 0), "action_s");
getActionMap().put("action_s", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("S …Run Code Online (Sandbox Code Playgroud) 我的JavaFX 8场景很顺利.现在,当其他所有事情发生时,我想在程序运行时不断检查任何KeyEvent/KeyCode.我有一个名为时间轴的时间轴设置为INDEFINITE,我将循环计数设置为无限期
timeline.setCycleCount(Timeline.INDEFINITE);
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个简单的方法,也很干净,不会让我的程序不稳定.
keyevent ×10
java ×8
swing ×4
keylistener ×3
events ×2
keycode ×2
awt ×1
combinations ×1
javafx ×1
javascript ×1
jpanel ×1
jquery ×1
key-events ×1
qt ×1
scene ×1
windows ×1