Java- Toolkit.getLockingState 没有更新
Java- Toolkit.getLockingState not updating
我正在尝试制作一个简单的机器人程序,它需要知道滚动锁定是否打开。我读了一个不同的问题,并被指向 Toolkit.getLockingKeyState()。
然而,当我启动程序时,这个方法正确地告诉了 scoll lock 是否打开,当 scroll lock 被更改时它拒绝更新。这是我的代码:
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
/**
* @author Luke Senseney
*
*/
public class Mouse
{
/**
* @param args
*/
public static void main(String[] args)
{
Toolkit t=Toolkit.getDefaultToolkit();
while(true)
{
t.sync();
System.out.println(t.getLockingKeyState(KeyEvent.VK_NUM_LOCK));
try
{
Thread.sleep(1000);
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
此版本与宣传的完全一样。我预计不同之处在于这段代码从事件调度线程中请求状态(尽管我无法解释为什么会这样)。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class CheckLockingState {
private JComponent ui = null;
CheckLockingState() {
initUI();
}
public void initUI() {
if (ui != null) {
return;
}
ui = new JPanel(new BorderLayout(4, 4));
ui.setBorder(new EmptyBorder(4, 4, 4, 4));
final JLabel l = new JLabel("Click button to check locking state..");
ui.add(l, BorderLayout.PAGE_START);
final Toolkit t = Toolkit.getDefaultToolkit();
ActionListener checkStateListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean b = t.getLockingKeyState(KeyEvent.VK_NUM_LOCK);
System.out.println(b);
l.setText("" + b);
}
};
JButton b = new JButton("Check Locking State");
b.addActionListener(checkStateListener);
ui.add(b);
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
CheckLockingState o = new CheckLockingState();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
我正在尝试制作一个简单的机器人程序,它需要知道滚动锁定是否打开。我读了一个不同的问题,并被指向 Toolkit.getLockingKeyState()。 然而,当我启动程序时,这个方法正确地告诉了 scoll lock 是否打开,当 scroll lock 被更改时它拒绝更新。这是我的代码:
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
/**
* @author Luke Senseney
*
*/
public class Mouse
{
/**
* @param args
*/
public static void main(String[] args)
{
Toolkit t=Toolkit.getDefaultToolkit();
while(true)
{
t.sync();
System.out.println(t.getLockingKeyState(KeyEvent.VK_NUM_LOCK));
try
{
Thread.sleep(1000);
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
此版本与宣传的完全一样。我预计不同之处在于这段代码从事件调度线程中请求状态(尽管我无法解释为什么会这样)。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class CheckLockingState {
private JComponent ui = null;
CheckLockingState() {
initUI();
}
public void initUI() {
if (ui != null) {
return;
}
ui = new JPanel(new BorderLayout(4, 4));
ui.setBorder(new EmptyBorder(4, 4, 4, 4));
final JLabel l = new JLabel("Click button to check locking state..");
ui.add(l, BorderLayout.PAGE_START);
final Toolkit t = Toolkit.getDefaultToolkit();
ActionListener checkStateListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean b = t.getLockingKeyState(KeyEvent.VK_NUM_LOCK);
System.out.println(b);
l.setText("" + b);
}
};
JButton b = new JButton("Check Locking State");
b.addActionListener(checkStateListener);
ui.add(b);
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
CheckLockingState o = new CheckLockingState();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}