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);
  }

 
posted @ 2020-05-12 19:37  dajgh  阅读(652)  评论(0)    收藏  举报