如何获取大写锁定状态,并在未打开时将其打开?

10

我希望能够得到一个具体的示例,以便在小写锁定处于关闭状态时打开大写锁定。

我知道如何切换按键,我一直在使用这个:

toolkit.setLockingKeyState(KeyEvent.VK_CAPS_LOCK, Boolean.TRUE);
那会改变按键的状态,无论它原本是开还是关。 但我想确保在应用程序开始时它处于开启状态。
(最终目标是让键盘LED以特定的顺序闪烁,如果有特定的起始状态,效果会更好。)

1
你看过getLockingKeyState()吗?http://download.oracle.com/javase/1.5.0/docs/api/java/awt/Toolkit.html#getLockingKeyState(int) - NPE
我实际上尝试过使用它,但由于某些原因,我在if else语句中遇到了麻烦。我想以这种方式使用它。我能够将其用作布尔值,并尝试以此方式执行操作。您是否有一个示例,可以检查大写锁定切换的状态,如果已经打开,则继续使用,否则使用我上面列出的方法打开它。感谢您的帮助。我现在也会查看您的链接。 - Mike George
你试图通过这样做达到什么目的?无论它是什么,似乎你的方法不正确。 - Andrew Thompson
2
我只是在为AP计算机科学做一个有趣的项目,我想让键盘上的灯以特定的顺序闪烁,为了获得最佳效果,所有的键都必须开始时处于开启或关闭状态。 - Mike George
3个回答

19
您可以使用getLockingKeyState 来检查当前是否设置了大写锁定键:
boolean isOn = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
然而,这是不必要的--setLockingKeyState不会切换键的状态,它只会设置它。如果你传递true,它将无论原始状态设置键状态为打开:
Toolkit.getDefaultToolkit().setLockingKeyState(KeyEvent.VK_CAPS_LOCK, true);

好的,我尝试了这种方式,如果它是真的,它会关闭它,如果它是开着的,它会打开它。奇怪... - Mike George
哦。等等,也许如果我将 boolean.TRUE 移除,只是放一个 , true 就好了。 - Mike George
1
@Mike 这没关系;该函数接受一个布尔值,因此传递一个 Boolean 只会强制 Java 对其进行拆箱。 - Michael Mrozek

0
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication52;

import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;

/**
 *
 * @author DSF Inc - Admin
 */
public class JavaApplication52 extends JFrame {

    JavaApplication52() {
        setLayout(null);

    
        JTextField t = new  JTextField();
        t.setBounds(0,0,300,20);
        add(t);
    
        t.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                boolean isOn = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);

                if (isOn == true) {
                    System.err.println("ON");
                } else {
                    System.err.println("OFF");
                }
            }
        });

        setSize(300, 400);
        setVisible(true);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        JavaApplication52 fr = new JavaApplication52();
    }
}

0
Toolkit toolkit = Toolkit.getDefaultToolkit();

robik.keyPress(KeyEvent.VK_SPACE); // PRESS ANY KEY // Any key needs to be pressed
Toolkit.getDefaultToolkit().setLockingKeyState(KeyEvent.VK_CAPS_LOCK, true);
robik.keyRelease(KeyEvent.VK_SPACE);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接