swing中按钮绑定多个快捷键和实现对鼠标滚轮滚动监听
工作中遇到需求: 给已有的Jbutton添加多个键盘按钮快捷键, 以及使用鼠标滚轮滑动绑定按钮功能,
以下是给按钮添加键盘点击事件, 一个按钮绑定多个按键
//先定义鼠标点击监听器
class BrowserButtonActionListener implements ActionListener{ //上一张 static final String SELECT_BEFORE = "SELECT_BEFORE"; static final String SELECT_BEFORE_LEFT = "SELECT_BEFORE_LEFT"; static final String SELECT_BEFORE_UP = "SELECT_BEFORE_UP"; //下一张 static final String SELECT_NEXT = "SELECT_NEXT"; static final String SELECT_NEXT_RIGHT = "SELECT_NEXT_RIGHT"; static final String SELECT_NEXT_DOWN = "SELECT_NEXT_DOWN"; //放大 static final String ENLATGER = "ENLATGER"; //缩小 static final String REDUCE = "REDUCE"; @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if(SELECT_BEFORE.equals(command)|| SELECT_BEFORE_LEFT.equals(command)|| SELECT_BEFORE_UP.equals(command)){ // 上一张, 这里逻辑隐去 }else if(SELECT_NEXT.equals(command)|| SELECT_NEXT_DOWN.equals(command)|| SELECT_NEXT_RIGHT.equals(command)){ //下一张, 隐去 }else if(ENLATGER.equals(command)){ //放大 previewPane.zoomIn(); }else if(REDUCE.equals(command)){ //缩小 previewPane.zoomOut(); }else{ System.out.println("不存在的命令..."); } } }
//以下是构建按钮和绑定
public void init(){
//鼠标点击事件
BrowserButtonActionListener buttonActionListener = new BrowserButtonActionListener();
JButton preButton = new JButton("上一张");
JButton nextButton = new JButton("下一张");
JButton zoomInButton = new JButton("放大");
JButton zoomOutButton = new JButton("缩小");
//以下添加键盘快捷键 ,分别绑定两个按键
//左上--上一张
preButton.registerKeyboardAction(buttonActionListener,BrowserButtonActionListener.SELECT_BEFORE_LEFT,
KeyStroke.getKeyStroke(KeyEvent.VK_UP,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
preButton.registerKeyboardAction(buttonActionListener,BrowserButtonActionListener.SELECT_BEFORE_UP,
KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
//右下 下一张
nextButton.registerKeyboardAction(buttonActionListener,BrowserButtonActionListener.SELECT_NEXT_DOWN,
KeyStroke.getKeyStroke(KeyEvent.VK_DOWN,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
nextButton.registerKeyboardAction(buttonActionListener,BrowserButtonActionListener.SELECT_NEXT_RIGHT,
KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0),JComponent.WHEN_IN_FOCUSED_WINDOW);initButton(preButton, BrowserButtonActionListener.SELECT_BEFORE);
//
//鼠标滚轮放大缩小用到的鼠标滚轮监听
MouseWheelListener mouseWheelListener = new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
int wheelRotation = e.getWheelRotation();
if(wheelRotation==1){
System.out.println("向前/缩小");
//previewPane.zoomIn(); //业务实现, 这里不重要
}else if(wheelRotation == -1){
System.out.println("向后/放大");
//previewPane.zoomOut();
}
}
};
//this 是jpanel
//主体绑定滚轮事件
this.addMouseWheelListener(mouseWheelListener);
//正常的按钮事件绑定
initButton(firstButton, BrowserButtonActionListener.SELECT_FIRST);
initButton(nextButton, BrowserButtonActionListener.SELECT_NEXT);
}
//绑定事件, 保留默认的手动点击事件,
private void initButton(JButton button,String command){
button.setActionCommand(command);
button.addActionListener(buttonActionListener);
toolBar.add(button);
}