Java 创建一个;锁屏;根据我的申请
我想知道是否有可能为我的应用程序创建一个类似锁屏的面板。基本上,我有一个用java编写的程序,我希望有一个透明的屏幕(这样用户仍然可以看到正在发生的事情),但除非使用密码,否则他什么也做不了。 我在考虑在windows本身上实现这一点,而不是使用Java框架等等。 我在互联网上找到了这张图片,大概是这样的:Java 创建一个;锁屏;根据我的申请,java,lockscreen,Java,Lockscreen,我想知道是否有可能为我的应用程序创建一个类似锁屏的面板。基本上,我有一个用java编写的程序,我希望有一个透明的屏幕(这样用户仍然可以看到正在发生的事情),但除非使用密码,否则他什么也做不了。 我在考虑在windows本身上实现这一点,而不是使用Java框架等等。 我在互联网上找到了这张图片,大概是这样的: 有什么办法吗?要锁定整个Windows环境还是只锁定应用程序窗口 整个桌面:您可以使用java.awt.Robot类获取当前状态的屏幕截图,然后使其透明,并在其上显示自定义的锁屏面板 更可
有什么办法吗?要锁定整个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();
}
}
使用了三个层:
- mainLayer:应用程序的内容
- 衬底:半透明层,模糊主层
- 上层:带有密码输入窗体或进度条的面板
“衬底”层是非不透明的,以使主层可见。此外,Subscriber会使用鼠标事件拒绝将其传递到主级别。提示:如果要使用桌面应用程序,请使用swing else查找web应用程序。该应用程序已使用swing完成。我只想按照我描述的方式“锁定它”。嗨!谢谢你的回复!我认为最好锁定windows环境,因为应用程序将在3个不同的屏幕上运行。我希望锁屏是透明的,因为用户需要看到锁屏后面发生了什么。