如果不使用,我如何返回挥杆事件?

ham*_*mid 2 java swing event-handling mouseevent

在此输入图像描述

文本在里面JPanels,它们都在里面JScrollPane.我已设置捕捉MouseWheelEvent(滚动)所以当Ctrl按下键,并且转动鼠标滚轮时,文本将放大/缩小(字体大小增加/减少).这导致无法再滚动字体列表,除非我将鼠标光标直接指向滚动条.我想知道是否有办法return当事件Ctrl关键是不按住.那可能吗?我浏览了MouseWheelEventapi并没有找到任何有用的东西.谷歌搜索也没有给我任何东西.

mus*_*oid 5

如果我确实理解了你正在寻找的答案应该是这样的主要想法,为你的表单和你的滚动窗格创建不同的鼠标滚轮事件.观看整个动画,你会发现你的问题已得到修复,你可以根据这个想法进行操作

在此输入图像描述

你应该在下面添加到你的领域;

     public int defaultTextSize = 12;
     boolean ctrlcheck =false;
Run Code Online (Sandbox Code Playgroud)

这是jLabel4显示CTRL未在构造函数中按下

   jLabel4.setText("CTRL IS NOT PRESSED");
Run Code Online (Sandbox Code Playgroud)

你的滚动窗格鼠标事件应该是这样的

  private void jScrollPane1MouseWheelMoved(java.awt.event.MouseWheelEvent evt) {                                             

int notches = evt.getWheelRotation();

if (notches < 0) {            
    if (ctrlcheck == true) {
        defaultTextSize = defaultTextSize + 3;
        Font zoomfont = new Font("Monospaced", Font.PLAIN, defaultTextSize);
        jLabel1.setFont(zoomfont);
        jLabel2.setFont(zoomfont);
        jLabel3.setFont(zoomfont);
        jLabel1.repaint();
        jLabel2.repaint();
        jLabel3.repaint();

    } else {

        System.out.println("CTRL IS NOT PRESSED");

    }
} else {
    if (ctrlcheck == true) {
        defaultTextSize = defaultTextSize - 3;
        Font zoomfont2 = new Font("Monospaced", Font.ITALIC, defaultTextSize);

        jLabel1.setFont(zoomfont2);
        jLabel2.setFont(zoomfont2);
        jLabel3.setFont(zoomfont2);
        jLabel1.repaint();
        jLabel2.repaint();
        jLabel3.repaint();
    }

}


  } 
Run Code Online (Sandbox Code Playgroud)

你需要FORM Key Released Event这样的

private void formKeyReleased(java.awt.event.KeyEvent evt) {                                 

    jLabel4.setText("CTRL IS  NOT PRESSED");
    ctrlcheck = false;


}  
Run Code Online (Sandbox Code Playgroud)

formMouseWheelMoved需要单独的事件

private void formMouseWheelMoved(java.awt.event.MouseWheelEvent evt) {                                     

int notches = evt.getWheelRotation();

if (notches < 0) {            
    if (ctrlcheck == true) {
        defaultTextSize = defaultTextSize + 3;
        Font zoomfont = new Font("Monospaced", Font.PLAIN, defaultTextSize);
        jLabel1.setFont(zoomfont);
        jLabel2.setFont(zoomfont);
        jLabel3.setFont(zoomfont);
        jLabel1.repaint();
        jLabel2.repaint();
        jLabel3.repaint();

    } else {

        System.out.println("CTRL IS NOT PRESSED");

    }
} else {
    if (ctrlcheck == true) {
        defaultTextSize = defaultTextSize - 3;
        Font zoomfont2 = new Font("Monospaced", Font.ITALIC, defaultTextSize);

        jLabel1.setFont(zoomfont2);
        jLabel2.setFont(zoomfont2);
        jLabel3.setFont(zoomfont2);
        jLabel1.repaint();
        jLabel2.repaint();
        jLabel3.repaint();

      }   
   }   
}  
Run Code Online (Sandbox Code Playgroud)

您还需要表单按键事件以检查按键是否仍然按下

 private void formKeyPressed(java.awt.event.KeyEvent evt) {                                

int key = evt.getKeyCode();
if (key == KeyEvent.VK_CONTROL) {

    jLabel4.setText("CTRL IS  PRESSED");
    ctrlcheck = true;

}
}  
Run Code Online (Sandbox Code Playgroud)