簡體   English   中英

Java JSlider 為左右箭頭鍵實現自己的邏輯

[英]Java JSlider implementing own logic for left and right arrow keys

我正在嘗試為 JSlider 中的左右箭頭鍵實現我自己的邏輯。 默認情況下,JSlider 根據左右箭頭向左和向右移動滑塊。 我可以阻止它移動滑塊的唯一方法是將 setFocusable 設置為 false,但這會阻止我的 addKeyListener 工作。 有什么方法可以覆蓋或關閉此默認操作,因此我的 addKeyListener 是響應關鍵事件的唯一方法嗎?

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


public class slider {

public static void main(String[] args) {      
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}


private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("Slider Test");

    JSlider slider = new JSlider();
    slider.setToolTipText("Slide the time.");
    slider.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
    slider.setOpaque(false);
    slider.setPaintTrack(true);
    slider.setPaintTicks(true);
    slider.setPaintLabels(false);
    slider.setMinimum(0);
    slider.setMaximum(100);
    slider.setMajorTickSpacing(20);
    slider.setMinorTickSpacing(5);
    slider.setOrientation(JSlider.HORIZONTAL);
    slider.setSnapToTicks(false);
    slider.setFocusable(true);
    slider.addChangeListener(new ChangeListener() { 

        public void stateChanged(ChangeEvent e) {
            System.out.println("I have changed :(");
        }
    });     
    slider.addKeyListener(new KeyListener() {

        public void keyPressed(KeyEvent e)
        {
            int keyCode = e.getKeyCode();

            // right arrow
            if(keyCode == 39) {
                System.out.println("do right arrow key logic");
            }

            // left arrow
            if(keyCode == 37) {
                System.out.println("do left arrow key logic");
            }
        }

        public void keyReleased(KeyEvent arg0) {
            // TODO Auto-generated method stub

        }

        public void keyTyped(KeyEvent arg0) {
            // TODO Auto-generated method stub

        }


});


    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(slider);
    frame.pack();
    frame.setVisible(true);

}

}

不要使用 KeyListener。

Swing 旨在與鍵綁定一起使用。 如果您不喜歡給定鍵綁定的默認操作,則可以替換該操作。

查看Key Bindings以獲取更多信息,這些信息顯示給定組件的默認綁定以及如何替換右/左 KeyStroke 的 Action。

通過替換現有綁定的Action來更改現有功能的基礎是:

 Action action = new AbstractAction() {...};
 KeyStroke keyStroke = KeyStroke.getKeyStroke(...);
 InputMap im = component.getInputMap(...);
 component.getActionMap().put(im.get(keyStroke), action);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM