Swing 自動鎖定 鎖屏功能

灬猜想灬 11年前發布 | 4K 次閱讀 SQL Server 下載 二維

.在網上搜集的一些關于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>

 本文由用戶 灬猜想灬 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!