⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyset.java

📁 希望大家多多交流
💻 JAVA
字号:
package system;

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;

import system.*;

//键设置界面
public class KeySet
    extends JDialog {
  private JTextField upField;
  private JTextField downField;
  private JTextField leftField;
  private JTextField rightField;

  //默认键设置
  private static final int UP = KeyEvent.VK_UP;
  private static final int DOWN = KeyEvent.VK_DOWN;
  private static final int LEFT = KeyEvent.VK_LEFT;
  private static final int RIGHT = KeyEvent.VK_RIGHT;

  private static final int WIDTH = 300;
  private static final int HEIGHT = 120;

  public KeySet(JFrame owner) {
    super(owner, true); //模式对话框
    this.initUI();
  }

  //初始化界面
  public void initUI() {
    JPanel p = new JPanel();
    Border e = BorderFactory.createEtchedBorder();
    p.setBorder(e);

    JLabel up = new JLabel("向上键:");
    upField = new JTextField(6);
    upField.setOpaque(false);
    JLabel down = new JLabel("向下键:");
    downField = new JTextField(6);
    downField.setOpaque(false);
    JLabel left = new JLabel("向左键:");
    leftField = new JTextField(6);
    leftField.setOpaque(false);
    JLabel right = new JLabel("向右键:");
    rightField = new JTextField(6);
    rightField.setOpaque(false);

    JButton resume = new JButton("恢复默认值");
    resume.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        Config.UP = KeyEvent.VK_UP;
        Config.DOWN = KeyEvent.VK_DOWN;
        Config.LEFT = KeyEvent.VK_LEFT;
        Config.RIGHT = KeyEvent.VK_RIGHT;

        //显示恢复后的默认值
        upField.setText(KeyEvent.getKeyText(Config.UP));
        downField.setText(KeyEvent.getKeyText(Config.DOWN));
        leftField.setText(KeyEvent.getKeyText(Config.LEFT));
        rightField.setText(KeyEvent.getKeyText(Config.RIGHT));

        Config.saveSystemConfig();//保存
        Config.loadSystemConfig();//重新加载
      }
    });

    p.add(up);
    p.add(upField);
    p.add(down);
    p.add(downField);
    p.add(left);
    p.add(leftField);
    p.add(right);
    p.add(rightField);
    p.add(resume);

    this.getContentPane().add(p);

    //=======================为文本域注册监听器==============================
    this.addFieldListener(upField, Config.UP);
    this.addFieldListener(downField, Config.DOWN);
    this.addFieldListener(leftField, Config.LEFT);
    this.addFieldListener(rightField, Config.RIGHT);
  }

  //为文本域注册监听器
  public void addFieldListener(final JTextField f, int key) {
    //以文本形式显示默认的的键
    f.setText(KeyEvent.getKeyText(key));
    f.setEditable(false);
    f.setSelectedTextColor(new Color(20,200,20));
    //==========================注册键盘事件监听器==============================
    f.addKeyListener(new KeyAdapter() {
      public void keyPressed(KeyEvent e) {
        if (isValidKey(e)) {
          int k = e.getKeyCode();
          String name = e.getKeyText(k); //获得按键的文本
          f.setText(name); //以文本形式显示设置的键

          Object source = e.getSource();
          if(source == upField){
            Config.UP = k;
          }
          else if(source == downField){
            Config.DOWN = k;
          }
          else if(source == leftField){
            Config.LEFT = k;
          }
          else if(source == rightField){
            Config.RIGHT = k;
          }

          Config.saveSystemConfig(); //保存设置
          Config.loadSystemConfig(); //重新加载系统配置
        }
      }
    });
    //=========================注册焦点时间监听器================================
    f.addFocusListener(new FocusAdapter(){
      public void focusGained(FocusEvent e){
        f.setForeground(new Color(20,200,20));//设置前景色
      }

      public void focusLost(FocusEvent e){
        f.setForeground(Color.black);//当失去焦点时恢复前景色
      }
    });
  }

  //判断按键是否是有效键
  public boolean isValidKey(KeyEvent e) {
    int k = e.getKeyCode();

    //判断是否是方向键上下左右
    for (int i = KeyEvent.VK_LEFT; i <= KeyEvent.VK_DOWN; i++) {
      if (k == i) {
        return true;
      }
    }

    //判断是否是字母a到z
    for (int i = KeyEvent.VK_A; i <= KeyEvent.VK_Z; i++) {
      if (k == i) {
        return true;
      }
    }

    //判断是否是小键盘的数字键0到9
    for (int i = KeyEvent.VK_NUMPAD0; i <= KeyEvent.VK_NUMPAD9; i++) {
      if (k == i) {
        return true;
      }
    }

    //判断是否是数字0到9
    for (int i = KeyEvent.VK_0; i <= KeyEvent.VK_9; i++) {
      if (k == i) {
        return true;
      }
    }

    return false;
  }

  //显示键设置的静态方法
  public static void showKeySetDialog(JFrame owner) {
    new KeySet(owner).show();
  }

  public void show() {
    this.setTitle("设置");
    this.setResizable(false);
    this.setSize(this.WIDTH, this.HEIGHT);

    Dimension s = Toolkit.getDefaultToolkit().getScreenSize();
    int width = s.width;
    int height = s.height;
    this.setLocation( (width - this.WIDTH) / 2, (height - this.HEIGHT) / 2);

    super.show();
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -