小编Aks*_*sel的帖子

java swing键绑定 - 释放键的缺失操作

注册了"SPACE"和"已发布的SPACE"的键绑定,当空格是唯一按下/释放的键时,我按照广告说明,按下空格,然后按ctrl(或任何其他修改键),然后释放空格,最后释放ctrl将导致执行与"SPACE"关联的操作,但不会执行与"已释放的SPACE"关联的操作.

一旦不再按空格(或同时按下修改键),导致动作执行的首选方法是什么?我只在Windows 7,64位上试过这个.

import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.AbstractAction;
import javax.swing.KeyStroke;
import java.awt.event.ActionEvent;
import java.awt.Cursor;

class Bind extends JPanel {
  {
    getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "pressed");
    getInputMap().put(KeyStroke.getKeyStroke("released SPACE"), "released");
    getActionMap().put("pressed", new AbstractAction() {
      @Override public void actionPerformed(ActionEvent e) {
        System.out.println("pressed");
        setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); 
      }
    });
    getActionMap().put("released", new AbstractAction() {
      @Override public void actionPerformed(ActionEvent e) {
        System.out.println("released");
        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); 
      }
    });
  }
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      @Override public void run() {
        JFrame f = new JFrame("Key Bindings");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        f.add(new Bind()); …
Run Code Online (Sandbox Code Playgroud)

java swing key key-bindings

10
推荐指数
1
解决办法
4308
查看次数

这是不可变类和Builder模式的有效Java实现吗?

Builder实现Cloneable并覆盖clone(),而不是复制构建器的每个字段,不可变类保留构建器的私有克隆.这样可以轻松返回新构建器并创建不可变实例的略微修改的副本.

这样我就可以了

MyImmutable i1 = new MyImmutable.Builder().foo(1).bar(2).build();
MyImmutable i2 = i1.builder().foo(3).build();
Run Code Online (Sandbox Code Playgroud)

据说Cloneable接口有点坏了,但是这有什么违反了良好的java编码习惯,这个构造有什么问题吗?

final class MyImmutable { 
  public int foo() { return builder.foo; }
  public int bar() { return builder.bar; }
  public Builder builder() { return builder.clone(); }
  public static final class Builder implements Cloneable {
    public Builder foo(int val) { foo = val; return this; }
    public Builder bar(int val) { bar = val; return this; }
    public MyImmutable build() { return new MyImmutable(this.clone()); }
    private int foo = 0; …
Run Code Online (Sandbox Code Playgroud)

java immutability builder-pattern

9
推荐指数
1
解决办法
1494
查看次数

标签 统计

java ×2

builder-pattern ×1

immutability ×1

key ×1

key-bindings ×1

swing ×1