2014-05-08 65 views
0

在下面的代碼我創建了一個哈希表存儲整型數字,並用Jbutton將「放」的方法。獲取來自哈希表方法在Java中

,但是當我試圖「獲取」從哈希表與INT編號我得到一個編譯錯誤 - 「類型不匹配:不能轉換整數到JButton的」

這是爲什麼?我想回到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) { 
     } 
    } 
} 
+1

'哈希表'意味着你的鍵是'JButton's和的值是'Integer's。使用get時,您提供密鑰並返回值 – VBCPP

回答

1

你有你的泛型類的哈希表聲明周圍走錯了路。交換JButton和Integer。

private Hashtable<Integer, JButton> keyboardHash;