Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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_Hash_Jbutton - Fatal编程技术网

java中从哈希表中获取方法

java中从哈希表中获取方法,java,hash,jbutton,Java,Hash,Jbutton,在下面的代码中,我创建了一个哈希表,它存储int number和带有“put”方法的JButtons 但是,当我试图用整数从哈希表中“获取”时,我得到了一个编译器错误——“类型不匹配:无法从整数转换为JButton” 为什么呢?我要拿一个钮扣回来不 代码如下: package Q2; import javax.swing.*; import java.util.Hashtable; import java.awt.BorderLayout; import java.awt.Color; impo

在下面的代码中,我创建了一个哈希表,它存储int number和带有“put”方法的JButtons

但是,当我试图用整数从哈希表中“获取”时,我得到了一个编译器错误——“类型不匹配:无法从整数转换为JButton”

为什么呢?我要拿一个钮扣回来不

代码如下:

package Q2;
import javax.swing.*;
import java.util.Hashtable;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.TextField;
import java.awt.event.*;
import java.util.EventListener;
import java.util.Hashtable;

public class MainPanel extends JPanel{

    **private Hashtable<JButton, Integer> keyboardHash;**
    private JButton[][] button;
    private JPanel[] panel;                                                     //Array of panels for each buttons line
    private JPanel parent;
    private static final String[][] key = {
        {"`","1","2","3","4","5","6","7","8","9","0","-","+","Backspace"},
        {"Tab","Q","W","E","R","T","Y","U","I","O","P","[","]"},
        {"Caps","A","S","D","F","G","H","J","K","L",";","'","\\","Enter"},
        {"Shif","Z","X","C","V","B","N","M",",",".","?","/"},
        {"                                                          ",",","<","v",">"}};

    private static final int[][] keyNumber = {
        {192,49,50,51,52,53,54,55,56,57,48,45,61,8},
        {9,81,87,69,82,84,89,85,73,79,80,91,93},
        {20,65,83,68,70,71,72,74,75,76,59,192,222,10},
        {16,90,88,67,86,66,66,78,77,44,46,47},
        {32,37,40,39,86}};

    //Constructor for main Panel
    public MainPanel(){
        super();
        setLayout(new BorderLayout());

        **keyboardHash = new Hashtable<JButton,Integer>();**



        TextField textField = new TextField(20);
        MyKeyListener myKeyListener = new MyKeyListener();
        textField.addKeyListener(myKeyListener);
        Font font1 = new Font("david", Font.BOLD, 22);

        textField.setFont(font1);
        add(textField,BorderLayout.CENTER);

        //initialize the parent panel and array of 5 panels and the buttons array
        parent = new JPanel();
        parent.setLayout(new GridLayout(0,1));
        panel = new JPanel[5];
        button = new JButton[20][20];

        for (int row = 0; row<key.length; row++){
            panel[row] = new JPanel();
            for (int column = 0; column<key[row].length; column++){
                button[row][column] = new JButton(key[row][column]);
                button[row][column].setFont(new Font("Ariel",Font.PLAIN, 22));
                button[row][column].setMargin(new Insets(10, 20, 10, 20));
                **keyboardHash.put(button[row][column], keyNumber[row][column]);**
                /*
                button[row][column].putClientProperty("row", row);
                button[row][column].putClientProperty("column", column);
                button[row][column].putClientProperty("key", key[row][column]);
                */
                panel[row].add(button[row][column]);
            }
            parent.add(panel[row]);
        }
        add(parent,BorderLayout.SOUTH);

    }

    public class MyKeyListener implements KeyListener{

        @Override
        public void keyPressed(KeyEvent e) {
            int numKey = e.getKeyCode();
            **JButton btnToColor = keyboardHash.get(numKey);**

            System.out.println(numKey);
            button[2][2].setBackground(Color.yellow);
        }

        @Override
        public void keyReleased(KeyEvent e) {
            button[2][2].setBackground(null);
        }

        @Override
        public void keyTyped(KeyEvent e) {
        }
    }
}
Q2包;
导入javax.swing.*;
导入java.util.Hashtable;
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.GridLayout;
导入java.awt.Insets;
导入java.awt.TextField;
导入java.awt.event.*;
导入java.util.EventListener;
导入java.util.Hashtable;
公共类主面板扩展了JPanel{
**私有哈希表键盘哈希**
专用JButton[]]按钮;
私有JPanel[]面板;//每个按钮行的面板数组
私人JPanel家长;
私有静态最终字符串[][]密钥={
{“`”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“0”,“-”,“+”,“Backspace”},
{“Tab”,“Q”,“W”,“E”,“R”,“T”,“Y”,“U”,“I”,“O”,“P”,“[”,“].”,
{“Caps”、“A”、“S”、“D”、“F”、“G”、“H”、“J”、“K”、“L”、“;”、“'”、“\\”、“Enter”},
{“Shif”,“Z”,“X”,“C”,“V”,“B”,“N”,“M”,“N”,“M”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N,
{"                                                          ",",",""}};
专用静态最终int[][]键号={
{192,49,50,51,52,53,54,55,56,57,48,45,61,8},
{9,81,87,69,82,84,89,85,73,79,80,91,93},
{20,65,83,68,70,71,72,74,75,76,59,192,222,10},
{16,90,88,67,86,66,66,78,77,44,46,47},
{32,37,40,39,86}};
//主面板的构造
公共主面板(){
超级();
setLayout(新的BorderLayout());
**keyboardHash=新哈希表()**
TextField TextField=新的TextField(20);
MyKeyListener MyKeyListener=新建MyKeyListener();
addKeyListener(myKeyListener);
Font font1=新字体(“david”,Font.BOLD,22);
textField.setFont(font1);
添加(textField,BorderLayout.CENTER);
//初始化父面板和5个面板的阵列以及按钮阵列
父项=新的JPanel();
setLayout(新的GridLayout(0,1));
面板=新JPanel[5];
按钮=新的JButton[20][20];

对于(int row=0;row,您的泛型类在哈希表声明中的位置是错误的。请交换JButton和Integer

private Hashtable<Integer, JButton> keyboardHash;
私有哈希表键盘哈希;
Hashtable
表示您的键是
JButton
s,值是
Integer
s。使用get时,您提供键并返回值