安全桌面模式效果的Java应用程序

现在有没有人如何实现“安全桌面模式”(效果),例如从Windows Vista / 7 UAC同意块获得?

我假设它是一些function,将在这里删除像素(并可能使它们变灰),然后最终将其绘制到屏幕…我想将它应用到我的应用程序,以防止用户做任何事情,直到另一个用户连接到系统(但除此之外)

我真的很感激这个建议。

亲切的问候

一个

编辑:我真的只是在寻找这个

graphicsFX.setColor(new Color(0, 0, 0, 0.8f)); graphicsFX.fillRect(0, 0, 800, 600); 

延迟输入我可以做得很好……

谢谢大家……

我们使用JXLayer来达到这个目的……

在此处输入图像描述在此处输入图像描述

这非常有用,因为它将用户锁定在给定容器之外,而不像GlassPane解决方案那样锁定应用程序。 它就像一个容器的玻璃窗;)

我偷了这里的基本想法

  public class JXLayerTest { public static void main(String[] args) { new JXLayerTest(); } public JXLayerTest() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException ex) { } catch (InstantiationException ex) { } catch (IllegalAccessException ex) { } catch (UnsupportedLookAndFeelException ex) { } final LockableUI ui = new LockableUI(); JPanel panel = new JPanel(new GridBagLayout()); buildUI(panel); // This stolen directly from the JXLayer lockable blog JXLayer layer = new JXLayer(panel, ui); // Java2D grayScale BufferedImageOp ColorConvertOp grayScale = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null); // wrap it with the jxlayer's BufferedImageOpEffect BufferedImageOpEffect effect = new BufferedImageOpEffect(grayScale); // set it as the locked effect ui.setLockedEffects(effect); ui.setLocked(false); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(layer); JPanel panelButtons = new JPanel(new GridBagLayout()); final JButton lock = new JButton("Lock"); lock.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { boolean locked = !ui.isLocked(); ui.setLocked(locked); lock.setText(locked ? "Unlock" : "Lock"); } }); panelButtons.add(lock); frame.add(panelButtons, BorderLayout.SOUTH); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } protected void buildUI(JPanel panel) { GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; JLabel label = new JLabel(); try { BufferedImage image = ImageIO.read(new File("megatokyo.png")); label.setIcon(new ImageIcon(image)); } catch (IOException ex) { label.setText("Nothing to see here"); } panel.add(label, gbc); JButton button = new JButton("Clickl me"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Clicked"); } }); gbc.gridy++; panel.add(button, gbc); } }); } } 

不要重新发明轮子,而是尝试在组件上使用setEnabled(false)来禁用它,并在与系统建立连接时调用setEnabled(true)以再次启用组件。

请参阅此示例以获取更多显示灰色/不可单击的JButton示例:

在此处输入图像描述