我在另一个问题中找到了一种创建JButton的好方法,该JButton的操作可以
通过简单的方式编写和查看:
public JButton makeToolbarButton(String title, String actionCommand) {
JButton button = new JButton(title);
button.setActionCommand(actionCommand);
button.addActionListener(this);
return button;
}
此方法所在的类实现ActionListener,并且按钮命令由以下方式分配:
public void actionPerformed(ActionEvent e) {
int action = Integer.parseInt(e.getActionCommand());
switch(action) {
case 1:
System.out.println("This button pressed.");
break;
}
}
And the buttons are made by:
JButton button1 = makeToolbarButton("Button 1", "1");
所以我的问题是:可以通过这种方法将KeyStrokes添加到按钮吗?我尝试过这样的事情(在makeToolbarButton
方法内部):
button.getInputMap().put(KeyStroke.getKeyStroke("B"), "button_pressed");
button.getActionMap().put("button_pressed", button.getAction());
但是我认为这是行不通的,因为action命令实际上并未将操作分配给特定的按钮。有没有一种方法来添加一些
的makeToolbarButton()
方法和参数的按键就能做到这一点?
我认为您缺少ActionAPI
的要点。AAction
旨在提供一个独立的工作单元。这意味着
actionCommand
实际上并不需要,因为 触发actionListener
事件时,您确切知道执行事件的上下文
我还要避免使用KeyStroke.getKeyStroke(String)
,因为文本是您要执行的操作的冗长描述(即pressed B
,但是,不必说,这是很痛苦的事情)
因此,以下内容演示了如何使用Actions并将它们分配给
按钮和键绑定
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class ActionTest {
public static void main(String[] args) {
new ActionTest();
}
public ActionTest() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
add(createButton(new ActionOne(), KeyStroke.getKeyStroke(KeyEvent.VK_1, 0)));
add(createButton(new ActionTwo(), KeyStroke.getKeyStroke(KeyEvent.VK_2, 0)));
}
public JButton createButton(Action action, KeyStroke keyStroke) {
JButton btn = new JButton(action);
btn.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(keyStroke, "button_pressed");
btn.getActionMap().put("button_pressed", action);
return btn;
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.dispose();
}
}
public class ActionOne extends AbstractAction {
public ActionOne() {
putValue(NAME, "1");
putValue(Action.ACTION_COMMAND_KEY, "Action.one");
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
}
public class ActionTwo extends AbstractAction {
public ActionTwo() {
putValue(NAME, "2");
putValue(Action.ACTION_COMMAND_KEY, "Action.two");
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
}
}
See How to Use
Actions for
more details
启动多个whistle 如果你想在同一台机器启动多个whistle,方便多个浏览器或者供多人使用,有两种方式: 切换到不同的系统用户,在每个系统用户启动一个whistle代理服务(每个服务的端口号可以用命令行参数w2 start -p xxxx来指定) 也可以通过切换规则目录和端口号的方式来解决(注意S、C都是大写, newStorageDir为空表示使用当前配置) w2 start -S new
1. echo :在命令行打印一些内容 redis 127.0.0.1:6379> echo HongWan “HongWan” 2. quit :退出连接。 redis 127.0.0.1:6379> quit 3. -x选项从标准输入(stdin)读取最后一个参数。 比如从管道中读取输入: echo -en “chen.qun” | redis-cli -x set name 4. -r -i
本文向大家介绍C#获取注册表指定键值操作,包括了C#获取注册表指定键值操作的使用技巧和注意事项,需要的朋友参考一下 某些程序必须依赖指定运行环境。那么读取注册表来判断此电脑是否有执行环境是个很不错的办法。因为每个软件安装之后都会在注册表中注册对应的键值,并且有些键值是独一无二的。 那么首先就需要找到那个具体的独一无二的键值,以便程序在运行之前能够去读取以判断。 代码如下: 现在查找含有E:\Arc
标准 go 语言项目文件目录格式 项目文件夹就是 GOPATH 指向的文件夹 src 文件夹是专门用于存放源码文件的 main 文件夹是专门用于存储 package main 包相关源码文件的 其它文件夹是专门用于存储除 package main 包以外源码文件的 bin 文件夹是专门用于存储编译之后的可执行程序的 pag 文件夹是专门用于存储编译之后的 .a 文件的 |---项目文件夹 ----
我做了,有一个按钮,我想在通知和按钮点击上执行两个不同的
主要内容:常用命令Redis string 类型提供了一些专门操作 数值的命令,比如 INCRBY(自增)、DECRBR(自减)、INCR(加1) 和 DECR(减1) 等命令。数值操作,同样有特定的应用场景,比如常见的点赞、取消点赞、关注、取消关注等,这类和计数相关的场景都可以使用数值操作来实现。 注意:此时 key 对应的 value 值是必须是一个整数,或浮点数,使用命令对这个数值进行自增或自减操作。当然,