有谁现在如何实现“安全,桌面模式”(效果),如一个从Windows Vista / 7的UAC同意块变?
我认为这是一些功能,这将去除像素,在这里,和那里(也可能是他们老龄化),然后最后绘制到屏幕...我想将它应用到我的应用程序,以保持用户做任何事情,直到另一个用户连接到该系统(但是这是除了点)
我会很感激的建议。
亲切的问候
一个
编辑:我真的只是寻找这个
graphicsFX.setColor(new Color(0, 0, 0, 0.8f));
graphicsFX.fillRect(0, 0, 800, 600);
输入的defering我可以做的相当不错...
感谢所有....
我们使用JXLayer为此确切的目的...
![](https://www.manongdao.com/static/images/pcload.jpg)
![](https://www.manongdao.com/static/images/pcload.jpg)
这是真的有用,因为它锁定用户从给定的容器不锁定了应用程序像一个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
:
![](https://www.manongdao.com/static/images/pcload.jpg)