gpt4 book ai didi

java - Action/Keylisteners 不能正常工作

转载 作者:行者123 更新时间:2023-11-29 06:39:32 25 4
gpt4 key购买 nike

我有两个框架(一个主窗口和一个弹出窗口)。在主框架上添加了键和鼠标监听器。两者都工作得很好。在弹出窗口中有 50 个按钮。我为所有这些设置了一个 Action 监听器。它工作正常。我也有按键和鼠标监听器。鼠标工作。键是片状的。主框架中使用的相同 keyListener 类也被添加到弹出框架中。一旦弹出窗口显示,key listener 就会工作,一旦发生鼠标单击(Action listener 启动)keylistener 就会停止工作。请帮忙。附上的代码是简化版


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class key {
private static class toolsAction implements ActionListener {
public void actionPerformed (ActionEvent ae) {
log("Command " + Integer.parseInt(ae.getActionCommand()));
}
}
private static void log(String s) { System.out.println(s); }
private static class keyboardHandler implements KeyListener {
public void keyPressed( KeyEvent e) { log("KB Press called "); }
public void keyReleased(KeyEvent e) { log("KB Release called "); }
public void keyTyped (KeyEvent e) { log("KB Typed called "); }
}
public static void main(String [] args) {
JFrame pFrame = new JFrame("Frame");
pFrame.addKeyListener(new keyboardHandler());
Container pane = pFrame.getContentPane();
pane.setLayout(null);
pane.setVisible(true);
pFrame.setSize(650, 300);
pFrame.setVisible(true);
JButton[] buttons = new JButton[50];
toolsAction action = new toolsAction();
for (int i = 0; i < 50; i++) {
buttons[i] = new JButton("" + i);
buttons[i].setActionCommand("" + i);
buttons[i].addActionListener(action);
pane.add(buttons[i]);
buttons[i].setBounds(((i % 10) * 60), ((i / 10) * 40), 60, 40);
}
}
}

最佳答案

另一种方法是使用 Actionkey bindings .下面的示例将 10 个按钮绑定(bind)到数字键,还使用数字作为每个按钮的 MNEMONIC_KEY

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/** @see http://stackoverflow.com/a/14182227/230513 */
public class Key {

public static final int SIZE = 10;

private static class ToolAction extends AbstractAction {

public ToolAction(int i) {
super(String.valueOf(i));
putValue(MNEMONIC_KEY, KeyEvent.VK_0 + i);
}

@Override
public void actionPerformed(ActionEvent ae) {
System.out.println(ae.getActionCommand());
}
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
JFrame f = new JFrame("Frame");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new GridLayout(0, SIZE / 2));
for (int i = 0; i < SIZE; i++) {
final ToolAction toolAction = new ToolAction(i);
JButton b = new JButton(toolAction);
String name = b.getText();
b.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_0 + i, 0), name);
b.getActionMap().put(name, toolAction);
f.add(b);
}
f.pack();
f.setVisible(true);
}
});
}
}

关于java - Action/Keylisteners 不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com