2015-04-25 2 views
2

Я пытаюсь создать простую программу Robot, которая должна знать, включена ли функция прокрутки. Я прочитал другой вопрос и указал на Toolkit.getLockingKeyState(). Однако этот метод правильно указывает, была ли включена блокировка scoll при запуске программы, она отказывается обновляться при изменении блокировки прокрутки. Вот мой код:Java-Toolkit.getLockingState не обновляется

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

ответ

1

Эта версия работает точно так же, как рекламируется. Я ожидаю, что разница в том, что этот код запрашивает состояние из потока событий Dispatch (хотя я не могу точно объяснить, почему это будет так).

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); 
    } 
} 
Смежные вопросы