Swing 自動鎖定 鎖屏功能
.在網上搜集的一些關于Swing鎖屏的Java代碼.
.記錄備用.
.
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.Toolkit; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.Dimension; import java.awt.Color; import net.miginfocom.swing.MigLayout; import java.awt.Font; import javax.swing.border.EtchedBorder; import com.gohighsoft.db.DBSet; import com.pos.LoginDialog; import com.pos.dao.WorkersDao; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent;public class LockFrame extends JDialog { BorderLayout borderLayout1 = new BorderLayout(); JButton jButton2 = new JButton(); boolean isOK = true; JLabel jlableInfo = null; private boolean canRunCount = true; private JPasswordField passwordField; private JLabel label_3; public static void main(String[] args){ LockFrame lock = new LockFrame(null, "系統鎖屏", true); lock.setVisible(true); } public LockFrame(JFrame jframe, String str, boolean bool) { super(jframe, str, true); setSize(300, 130); //這個方法尤為重要,只要屏蔽了右上角的關閉按鈕 setUndecorated(true); //設置總是將dialog顯示在屏幕的最前面 setAlwaysOnTop(true); setLocation( (Toolkit.getDefaultToolkit().getScreenSize().width - getWidth()) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - getHeight()) / 2); setPreferredSize(new Dimension(200, 130)); getContentPane().setLayout(new BorderLayout(0, 0)); JPanel rootPanel = new JPanel(); rootPanel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, new Color(0, 255, 255), null)); getContentPane().add(rootPanel, BorderLayout.CENTER); rootPanel.setLayout(new BorderLayout(0, 0)); JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(10, 60)); rootPanel.add(panel, BorderLayout.NORTH); panel.setLayout(new MigLayout("", "[][][][]", "[][]")); JLabel label = new JLabel( "\u7CFB\u7EDF\u8FD0\u884C\u6B63\u5E38\uFF0C\u4F46\u5DF2\u9501\u5B9A\u3002"); label.setFont(new Font("宋體", Font.PLAIN, 14)); panel.add(label, "cell 1 0"); JLabel label_1 = new JLabel( " 請您輸入登錄的密碼解鎖! "); label_1.setFont(new Font("宋體", Font.PLAIN, 14)); panel.add(label_1, "cell 1 1"); JPanel panel_1 = new JPanel(); panel_1.setPreferredSize(new Dimension(10, 5)); rootPanel.add(panel_1, BorderLayout.CENTER); panel_1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); JSeparator separator = new JSeparator(); separator.setForeground(new Color(0, 255, 255)); separator.setPreferredSize(new Dimension(280, 2)); panel_1.add(separator); JPanel panel_2 = new JPanel(); panel_2.setPreferredSize(new Dimension(10, 60)); rootPanel.add(panel_2, BorderLayout.SOUTH); panel_2.setLayout(null); JLabel label_2 = new JLabel("\u5BC6\u7801\uFF1A"); label_2.setBounds(26, 10, 36, 15); panel_2.add(label_2); passwordField = new JPasswordField(); passwordField.setBounds(66, 7, 210, 21); passwordField.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent event) { System.out.println(event.getKeyCode()); if (event.getKeyCode() == 10) { String pw = passwordField.getText(); //獲取登錄的用戶密碼 if (pw.equals("123456")) { dispose(); } else { label_3.setText("對不起,請您輸入正確的密碼!"); passwordField.setText(""); return; } } } }); passwordField.setPreferredSize(new Dimension(210, 21)); panel_2.add(passwordField); label_3 = new JLabel(""); label_3.setBackground(Color.ORANGE); label_3.setBounds(66, 35, 210, 15); panel_2.add(label_3); } }</pre>.
.
.public class Demo6 { public static void main(String[] args) { JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Listener listener = new Listener(); Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.MOUSE_EVENT_MASK); Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.FOCUS_EVENT_MASK); Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK); frame.setSize(new Dimension(500, 500)); frame.setVisible(true); } static class Listener implements AWTEventListener { public void eventDispatched(AWTEvent event) { System.out.println("Handle Event: " + event.getClass()); } } }.
.
https://code.google.com/p/sprbus3/source/browse/?repo=sprbus-hdwangyuan
package com.sprbus.swing.hdwangyuan.panel.lockscreen;import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField;
/**
- @author jnzhangyq
鎖屏功能模塊 */ public class LockScreenPanel extends JPanel {
private JFrame mainFrame; private JPasswordField inputField; private JLabel inputLabel; private JButton subButton; private JLabel msgLabel; private JButton setHookBtn;
public LockScreenPanel(JFrame mainFrame) {
this.mainFrame = mainFrame; inputField = new JPasswordField(20); inputLabel = new JLabel("請輸入密碼"); subButton = new JButton("解除鎖定 提交 ( 測試階段 密碼為 1 ) "); setHookBtn = new JButton("鎖住屏幕"); msgLabel = new JLabel(); init();
}
private void init() {
this.setLayout(new FlowLayout()); this.add(setHookBtn); this.add(inputField); this.add(inputLabel); this.add(subButton); this.add(msgLabel); addEventHandle(); // 啟動后,立即將程序鎖定 setKeyboardHook();
}
/**
添加面板中的各個組件的事件處理 */ private void addEventHandle() {
setHookBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) { inputField.setText(""); setKeyboardHook(); }
});
subButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) { String pwd = inputField.getText(); if ("1".equals(pwd)) { unsetKeyboardHook(); msgLabel.setText(""); inputField.setText(""); LockScreenPanel.this.setScreenToNormal(); } else { msgLabel.setText("對不起,密碼錯誤"); msgLabel.setForeground(Color.red); inputField.setText(""); } }
}); }
private void setKeyboardHook() {
setHookBtn.setEnabled(false); subButton.setEnabled(true); LockScreenUtil.setKeyboardHook(); this.setScreenToLock();
}
private void unsetKeyboardHook() { setHookBtn.setEnabled(true); subButton.setEnabled(false); LockScreenUtil.unsetKeyboardHook(); this.setScreenToNormal();
}
private void setScreenToLock() {
// 想重新設這大小和 屬性,必須先調用 dispose 方法
mainFrame.dispose(); // 設置沒有關閉按鈕 mainFrame.setUndecorated(true); // 設置總在最前端 mainFrame.setAlwaysOnTop(true); // 重新顯示 mainFrame.setVisible(true); }
private void setScreenToNormal() { // 想重新設這大小和 屬性,必須先調用 dispose 方法 mainFrame.dispose(); // 設置沒有關閉按鈕失效 mainFrame.setUndecorated(false); // 設置總在最前端失效 mainFrame.setAlwaysOnTop(false); // 重新顯示 mainFrame.setVisible(true); }
private void showByFrame() {
mainFrame.setSize(
(int) Toolkit.getDefaultToolkit().getScreenSize().getWidth(), (int) Toolkit.getDefaultToolkit().getScreenSize() .getHeight()); mainFrame.setLayout(new BorderLayout()); mainFrame.add(this,BorderLayout.CENTER);
mainFrame.setLocation(0, 0); mainFrame.setVisible(true); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) { JFrame frame = new JFrame(); new LockScreenPanel(frame).showByFrame(); } }</pre>.
.
package show;
import java.awt.;
import java.awt.image.ColorModel;
import java.awt.event.;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.*;
import javax.swing.border.Border;
import com.sun.java.swing.plaf.windows.resources.windows;
public class ShowMian extends JFrame {
JFrame lockjf;// 鎖屏界面
boolean isexit = false;
JPanel lockjp = new JPanel();;
JLabel jl_username;
JLabel jl_password;
JButton jb_ensure;// 確定按鈕
JButton jb_result;// 撤消按鈕
JTextField jtf_username;// 用戶名
JPasswordField jtf_password;// 用戶密碼
// 用來得到屏幕的分辨率
Toolkit toolkit;
// 用來接受屏幕返回的分辨率
int xscreen;// 屏幕的x坐標
int yscreen;// 屏幕的y坐標
// 定義線程讓窗體每秒獲得一次焦點
Thread thread;
public ShowMian() {
// TODO Auto-generated constructor stu
// 初始化界面
lockjp = new driver();
lockjf = this;
jl_username = new JLabel("用戶名:");
jl_password = new JLabel("密 碼:");
jtf_username = new JTextField();
jtf_password = new JPasswordField();
jb_ensure = new JButton("確定");
jb_result = new JButton("取消");
// 得到當前的分辨率
toolkit = this.getToolkit();
final Dimension dimension = toolkit.getScreenSize();
xscreen = dimension.width;
yscreen = dimension.height;
// System.out.println(xscreen + ":" + yscreen);
// 設置主窗體的大小
// 把各個組件注冊到jframe
add(lockjp);
lockjp.setLayout(null);
lockjp.add(jl_username);
lockjp.add(jl_password);
lockjp.add(jtf_username);
lockjp.add(jtf_password);
lockjp.add(jb_ensure);
lockjp.add(jb_result);
// 設置各個組件的位置
this.setBounds(0, 0, 1280, 800);
// lable的設置
jl_username.setBounds(xscreen - 270, yscreen - 150, 60, 20);
jl_password.setBounds(jl_username.getX(), jl_username.getY() + 60, 60,
20);
// textare的設置
jtf_username.setBounds(jl_username.getX() + 60, jl_username.getY(),
140, 20);
jtf_username.setBorder(null);
jtf_password.setBounds(jl_password.getX() + 60, jl_password.getY(),
140, 20);
jtf_password.setBorder(null);
// button的設置
jb_ensure.setBounds(jl_username.getX(), jl_username.getY() + 110, 60,
30);
jb_result.setBounds(jb_ensure.getX() + 140, jb_ensure.getY(), 60, 30);
// 設置按鈕事件
jb_ensure.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// System.out.println(jtf_username.getText().equals("wayking")+":"+jtf_password.getText().equals("2925138"));
// TODO Auto-generated method stub
System.out.println(jtf_password.getPassword());
if (jtf_username.getText().equalsIgnoreCase("wayking")
&& jtf_password.getText().equalsIgnoreCase("2925138")) {
// System.out.println("11111111111111111111111111");
System.exit(1);
} else {
jtf_username.setText("");
jtf_password.setText("");
}
}
});
jb_result.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
jtf_username.setText("");
jtf_password.setText("");
}
});
// 設置焦點
thread = new Thread(new Runnable() {
public void run() {
while (true) {
toFront();
try {
thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
// 去掉工具欄
setUndecorated(true);
// 添加窗口監聽
this.addWindowListener(new WindowListener() {
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowClosing(WindowEvent arg0) {
// DO_NOTHING_ON_CLOSE(在 WindowConstants 中定義):不執行任何操作;要求程序在已注冊的
// WindowListener 對象的 windowClosing 方法中處理該操作。
// HIDE_ON_CLOSE(在 WindowConstants 中定義):調用任意已注冊的 WindowListener
// 對象后自動隱藏該窗體。
// DISPOSE_ON_CLOSE(在 WindowConstants 中定義):調用任意已注冊
// WindowListener 的對象后自動隱藏并釋放該窗體。
// EXIT_ON_CLOSE(在 JFrame 中定義):使用 System exit
// 方法退出應用程序。僅在應用程序中使用。
// System.out.println("2222222222222");
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);// 不執行任何操作;要求程序在已注冊的
}
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub
}
});
try {
//建立FileWriter對象,并實例化fw
FileWriter fw = new FileWriter("mymusic.txt");
//將字符串寫入文件
fw.write("mymusic");
fw.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//添加音樂
//讀取用戶配置的音樂信息
try {
FileReader reader=new FileReader("mymusic.txt");//實例化讀入對象
BufferedReader readers=new BufferedReader(reader);
String musicsrc= readers.readLine();//得到音樂路徑
Runtime.getRuntime().exec("cmd /c e://"+musicsrc+".mp3");//調用cmd運行命令
readers.close();//關閉對象
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("沒有找到指定音樂");
}
// 開始獲取焦點
thread.start();
setVisible(true);
}
// class driwer extends JPanel {
// protected void paintComponents(Graphics g) {
//
// }
// }
public static void main(String[] args) {
new ShowMian();
}
// 畫出面板上的圖片
// 如果要畫圖,必須用一個類繼承panel 然后重寫其paintcomponent方法
class driver extends JPanel {
@Override
protected void paintComponent(Graphics g) {
g.setColor(null);
// g.drawImage(new ImageIcon("2.jpg").getImage(), 0, 0, this
// .getWidth(), this.getHeight(), this);
g.drawImage(new ImageIcon("./3.jpg").getImage(), 0, 0, this
.getWidth(), this.getHeight(), this);
g.drawRect(960, 600, 320, 200);
g.drawRect(960, 600, 318, 198);
// super.paintComponent(arg0);
}
}
} </pre>