Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据按下的键更改标签文本_Java_Swing_User Interface_Key Bindings - Fatal编程技术网

Java 根据按下的键更改标签文本

Java 根据按下的键更改标签文本,java,swing,user-interface,key-bindings,Java,Swing,User Interface,Key Bindings,在下面的程序中,我试图根据按下的键更改标签的文本,但我不知道如何操作。按下键时要执行的语句在TimerListener InnerClass的actionPerformed()方法中定义。但我不明白如何从那里获取标签 package aircraftPackage; import java.awt.*; import java.awt.event.*; import java.awt.geom.AffineTransform; import java.awt.image.BufferedIma

在下面的程序中,我试图根据按下的键更改标签的文本,但我不知道如何操作。按下键时要执行的语句在TimerListener InnerClass的actionPerformed()方法中定义。但我不明白如何从那里获取标签

package aircraftPackage;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.*;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.swing.*;

public class Controller extends JPanel {

    private static final long serialVersionUID = 1L;
    public static final int STEP = 3;
    private static final int TIMER_DELAY = STEP * 8;
    private BufferedImage playerImage = null;
    private Map<Direction, Boolean> directionMap = new HashMap<Direction, Boolean>();



    enum Direction {

        UP(KeyEvent.VK_UP, 0, -1), DOWN(KeyEvent.VK_DOWN, 0, 1),
        LEFT(KeyEvent.VK_LEFT, -1, 0), RIGHT(KeyEvent.VK_RIGHT, 1, 0);
        private int keyCode;
        private int xDirection;
        private int yDirection;

        private Direction(int keyCode, int xDirection, int yDirection) {
            this.keyCode = keyCode;
            this.xDirection = xDirection;
            this.yDirection = yDirection;
        }

        public int getKeyCode() {
            return keyCode;
        }

        public int getXDirection() {
            return xDirection;
        }

        public int getYDirection() {
            return yDirection;
        }
    }

    public Controller() {

        for (Direction direction : Direction.values()) {
            directionMap.put(direction, false);
        }
        setKeyBindings();
        Timer timer = new Timer(TIMER_DELAY, new TimerListener());
        timer.start();
    }

    private void setKeyBindings() {
        InputMap inMap = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        ActionMap actMap = getActionMap();
        for (final Direction direction : Direction.values()) {
            KeyStroke pressed = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, false);
            KeyStroke released = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, true);
            inMap.put(pressed, direction.toString() + "pressed");
            inMap.put(released, direction.toString() + "released");
            actMap.put(direction.toString() + "pressed", new AbstractAction() {

                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    directionMap.put(direction, true);
                }
            });
            actMap.put(direction.toString() + "released", new AbstractAction() {

                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    directionMap.put(direction, false);
                }
            });
        }

    }



    private class TimerListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean moved = false;
            for (Direction direction : Direction.values()) {
                if (directionMap.get(direction)) {
                    if (direction.keyCode == 37) {
                        System.out.println("go LEFT");

                    } else if (direction.getKeyCode() == 39) {
                        System.out.println("go RIGHT");
                    } else if (direction.getKeyCode() == 38) {
                        System.out.println("go UP");
                    }
                    else if (direction.getKeyCode()==40){
                        System.out.println("go DOWN");
                    }
                }
            }
        }
    }

    public static void createAndShowUI() {
        JFrame frame = new JFrame("MoveIcon");
        JPanel panel = new JPanel();
        JLabel jl = new JLabel();
        jl.setText("testing....");
        frame.add(jl);
        frame.add(panel);
        frame.getContentPane().add(new Controller());
        new Controller();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

    public static void main(String[] args) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            @SuppressWarnings("static-access")
            public void run() {
                createAndShowUI();
            }
        });
    }
}
包装飞机包装;
导入java.awt.*;
导入java.awt.event.*;
导入java.awt.geom.AffineTransform;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入java.net。*;
导入java.util.HashMap;
导入java.util.Map;
导入javax.imageio.imageio;
导入javax.swing.*;
公共类控制器扩展了JPanel{
私有静态最终长serialVersionUID=1L;
公共静态最终int步骤=3;
专用静态最终int定时器_延迟=步骤*8;
private BuffereImage playerImage=null;
private Map directionMap=新HashMap();
枚举方向{
向上(KeyEvent.VK_向上,0,-1),向下(KeyEvent.VK_向下,0,1),
左(KeyEvent.VK_LEFT,-1,0),右(KeyEvent.VK_RIGHT,1,0);
私钥密码;
私有int-xDirection;
私人内部指导;
专用方向(int键码、int xDirection、int yDirection){
this.keyCode=keyCode;
this.xDirection=xDirection;
this.yDirection=yDirection;
}
public int getKeyCode(){
返回键码;
}
public int getXDirection(){
返回方向;
}
public int getYDirection(){
返回方向;
}
}
公共控制员(){
对于(方向:Direction.values()){
directionMap.put(方向,false);
}
setKeyBindings();
定时器定时器=新定时器(定时器延迟,新定时器延迟();
timer.start();
}
私有void setKeyBindings(){
InputMap inMap=getInputMap(JComponent.WHEN_IN_FOCUSED_窗口);
ActionMap actMap=getActionMap();
对于(最终方向:Direction.values()){
按下击键=击键.getKeyStroke(direction.getKeyCode(),0,false);
击键释放=击键.getKeyStroke(direction.getKeyCode(),0,true);
inMap.put(按下,方向.toString()+“按下”);
inMap.put(已释放,direction.toString()+“已释放”);
actMap.put(direction.toString()+“按下”,新的AbstractAction(){
私有静态最终长serialVersionUID=1L;
@凌驾
已执行的公共无效操作(操作事件e){
directionMap.put(方向,true);
}
});
put(direction.toString()+“released”,新的AbstractAction()){
私有静态最终长serialVersionUID=1L;
@凌驾
已执行的公共无效操作(操作事件e){
directionMap.put(方向,false);
}
});
}
}
私有类TimerListener实现ActionListener{
@凌驾
已执行的公共无效操作(操作事件e){
布尔值=假;
对于(方向:Direction.values()){
if(directionMap.get(direction)){
如果(direction.keyCode==37){
System.out.println(“向左走”);
}else if(direction.getKeyCode()==39){
System.out.println(“向右走”);
}else if(direction.getKeyCode()==38){
System.out.println(“上升”);
}
else if(direction.getKeyCode()==40){
System.out.println(“向下”);
}
}
}
}
}
公共静态void createAndShowUI(){
JFrame=新JFrame(“移动图标”);
JPanel面板=新的JPanel();
JLabel jl=新的JLabel();
jl.setText(“测试…”);
帧。添加(jl);
框架。添加(面板);
frame.getContentPane().add(新控制器());
新控制器();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
invokeLater(new Runnable()){
@凌驾
@抑制警告(“静态访问”)
公开募捐{
createAndShowUI();
}
});
}
}
实际上,我想做的是,创建一个漂亮的表单,它将在Netbeans中包含各种标签(在那里更容易实现),并使用上面的代码只知道按下了哪个键,并相应地更改每个标签的值。 我试过了,但没用。 请帮我做这个。 谢谢


PS:您可以在一些问题或网站上找到上述代码的部分,因为我并不是自己写的。我以前没有任何键绑定/键侦听器等方面的经验。这只是我正在做的一个项目的一部分。

我尝试删除您现在不需要的所有内容,并添加了一个
JLabel
,它显示如下方向:


这应该让你开始

import java.awt.event.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;

public class Controller extends JPanel {

    private static final long serialVersionUID = 1L;
    private static final int STEP = 3;
    private static final int TIMER_DELAY = STEP * 8;
    private Map<Direction, Boolean> directionMap = new HashMap<Direction, Boolean>();

    private JLabel lblDirection = new JLabel();

    enum Direction {

        UP(KeyEvent.VK_UP), DOWN(KeyEvent.VK_DOWN),
        LEFT(KeyEvent.VK_LEFT), RIGHT(KeyEvent.VK_RIGHT);

        private int keyCode;

        private Direction(int keyCode) {
            this.keyCode = keyCode;
        }

        public int getKeyCode() {
            return keyCode;
        }
    }

    public Controller() {

        add(lblDirection);

        for (Direction direction : Direction.values()) {
            directionMap.put(direction, false);
        }
        setKeyBindings();
        Timer timer = new Timer(TIMER_DELAY, new TimerListener());
        timer.start();
    }

    private void setKeyBindings() {
        InputMap inMap = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        ActionMap actMap = getActionMap();
        for (final Direction direction : Direction.values()) {
            KeyStroke pressed = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, false);
            KeyStroke released = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, true);
            inMap.put(pressed, direction.toString() + "pressed");
            inMap.put(released, direction.toString() + "released");
            actMap.put(direction.toString() + "pressed", new AbstractAction() {

                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    directionMap.put(direction, true);
                }
            });
            actMap.put(direction.toString() + "released", new AbstractAction() {

                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    directionMap.put(direction, false);
                }
            });
        }
    }

    private class TimerListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            StringBuilder s = new StringBuilder("go ");
            for (Direction direction : Direction.values()) {
                if (directionMap.get(direction)) {
                    s.append(direction.name() + " ");
                }
            }
            lblDirection.setText(s.toString());
        }
    }

    public static void createAndShowUI() {
        JFrame frame = new JFrame("KeyMapping");
        frame.getContentPane().add(new Controller());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 80);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowUI();
            }
        });
    }
}
导入java.awt.event.*;
导入java.util.HashMap;
导入java.util.Map;
导入javax.swing.*;
公共类控制器扩展了JPanel{
私有静态最终长serialVersionUID=1L;
私有静态最终int步骤=3;
专用静态最终int定时器_延迟=步骤*8;
private Map directionMap=新HashMap();
私有JLabel lblDirection=新JLabel();
枚举方向{
向上(KeyEvent.VK_向上),向下(KeyEvent.VK_向下),
左(KeyEvent.VK_左),右(KeyEvent.VK_右);
私钥密码;
私人直接