我想知道是否可以爲我的應用程序創建像面板一樣的鎖定屏幕。基本上我有一個用java編寫的程序,我想有一個透明的屏幕(所以用戶仍然可以看到發生了什麼),但除非他使用密碼,否則他什麼也不能做。 我正在考慮在Windows本身上實現此功能,而不是使用Java框架等。 我在互聯網上發現這個圖像,它會是這樣的: LockScreen在我的應用程序上創建「鎖定屏幕」
任何想法,我該如何做到這一點?
我想知道是否可以爲我的應用程序創建像面板一樣的鎖定屏幕。基本上我有一個用java編寫的程序,我想有一個透明的屏幕(所以用戶仍然可以看到發生了什麼),但除非他使用密碼,否則他什麼也不能做。 我正在考慮在Windows本身上實現此功能,而不是使用Java框架等。 我在互聯網上發現這個圖像,它會是這樣的: LockScreen在我的應用程序上創建「鎖定屏幕」
任何想法,我該如何做到這一點?
你想鎖定整個Windows環境還是隻鎖定應用程序窗口?
整個桌面:您可以使用類java.awt.Robot截取當前狀態的屏幕截圖,然後使其透明並在其上顯示自定義鎖定屏幕面板。
更可能的是,您希望只鎖定您的應用程序窗口。使用類javax.swing.JLayeredPane在另一個層上繪製一個圖層。下面是一個例子:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class LockScreen {
private JPanel substrate;
private JPanel upperLayer;
public LockScreen() {
int width = 500;
int height = 600;
final JButton lockButton = new JButton("Lock");
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean lock = e.getSource() == lockButton;
substrate.setVisible(lock);
upperLayer.setVisible(lock);
}
};
lockButton.addActionListener(actionListener);
JPanel mainLayer = new JPanel();
mainLayer.add(lockButton);
mainLayer.add(new JButton("Button"));
mainLayer.add(new JLabel("Label"));
mainLayer.setBounds(0, 0, width, height);
final Color transparentWhite = new Color(255, 255, 255, 127);
substrate = new JPanel() {
@Override
public void paint(Graphics g) {
g.setColor(transparentWhite);
g.fillRect(0, 0, getWidth(), getHeight());
}
};
substrate.setOpaque(false);
substrate.setBounds(0, 0, width, height);
substrate.addMouseListener(new MouseAdapter() {});
substrate.setVisible(false);
JButton unlockButton = new JButton("Unlock");
unlockButton.addActionListener(actionListener);
upperLayer = new JPanel();
upperLayer.setBounds(width/2 - 50, height/2 - 50, 100, 100);
upperLayer.setBorder(new LineBorder(Color.BLACK, 1));
upperLayer.add(unlockButton);
upperLayer.setVisible(false);
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.setLayout(null);
layeredPane.setLayer(mainLayer, 0);
layeredPane.add(mainLayer);
layeredPane.setLayer(substrate, 1);
layeredPane.add(substrate);
layeredPane.setLayer(upperLayer, 2);
layeredPane.add(upperLayer);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds((screenSize.width - width)/2, (screenSize.height - height)/2, width, height);
frame.add(layeredPane);
frame.setVisible(true);
}
public static void main(String args[]) {
new LockScreen();
}
}
有使用三層:
使層「襯底」變得不透明以讓主圖層可見。此外,襯底消耗鼠標事件以拒絕將它們傳遞到主層。
嗨!感謝您的回覆!我認爲鎖定Windows環境會更好,因爲應用程序將在3個不同的屏幕上運行。我希望鎖定屏幕是透明的,因爲用戶需要查看鎖定屏幕後面的內容。 – 2015-02-09 21:01:54
提示:如果您希望桌面應用程序使用swing,則可以查找Web應用程序。 – SMA 2015-02-07 14:13:09
該應用程序已經完成使用擺動。我只想按照我所描述的方式「鎖定」它。 – 2015-02-07 14:17:40