Rayyyyy20569 2021-03-23 03:48 采纳率: 100%
浏览 133
已采纳

关于重写tostring并且引用于treemap

这个是Treemap在MyeventInfo类中
public MyEventInfo(String myEvent, int myEventValue) {
    this.myEvent = myEvent;
    this.myEventValue = myEventValue;
}
static Map<MyEventInfo, Integer> myMap = new TreeMap<MyEventInfo,Integer>();


这一段是在MyEventInfo中重写的tostring方法


@Override
public String toString() {
    if (this.myEvent.equals("MouseButton")) {
        return ("MouseButton" + this.myEventValue);
    } else if (this.myEvent.equals("Key")) {
        return ("Key" + String.valueOf(this.myEventValue));
    } else {
        return "000000";
    }
}

本来的代码是每次敲击一个键盘就会记录次数

myMap.put(mei,mapValue);

map.value是往treemap中加入的int数

MyEventInfo mei = new MyEventInfo("Key",e.getKeyChar());

mei就是 MyEventInfo

想打印的格式是比如Key e :1之类

直接打印是没有把ASCII换成字符Key113=3, Key119=3,

 

如何写或者添加代码 在打印map的过程中把ASCII码换成字符

自己写好像一直报错

MyComponent2.java

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import javax.swing.JComponent;

public class MyComponent2 extends JComponent implements MouseListener {

   private static final long serialVersionUID = 1L;

   //build hashset
     static  Set<Object> mySet = new HashSet();
     //build tree map
       static Map<MyEventInfo, Integer> myMap = new TreeMap<MyEventInfo,Integer>();

       //static Integer mbi = null;
       
       public MyComponent2(Set<Object> mySet,Map<MyEventInfo, Integer> myMap){
          this.mySet = mySet;
          this.myMap = myMap;
       }

   @Override
   public void mouseClicked(MouseEvent e) {
   }

   @Override
   public void mousePressed(MouseEvent e) {
      mySet.add(e.getButton());
        System.out.println("Mouse Button" +  e.getButton());
        MyEventInfo mei = new MyEventInfo("MouseButton",e.getButton());
        //check the exist of mousebutton
      if(myMap.containsKey(mei)){
         Integer mapValue = new Integer(myMap.get(mei));
         mapValue += 1;
         myMap.put(mei,mapValue);
      }
      else{
         myMap.put(mei,1);
      }
   }

   @Override
   public void mouseReleased(MouseEvent e) {
   }

   @Override
   public void mouseEntered(MouseEvent e) {
   }

   @Override
   public void mouseExited(MouseEvent e) {
   }
}

MyEventInfo.java

import java.util.*;
public class MyEventInfo implements Comparable<MyEventInfo> {

    public String myEvent;
    public Integer myEventValue;

    public MyEventInfo(String myEvent, int myEventValue) {
        this.myEvent = myEvent;
        this.myEventValue = myEventValue;
    }

    //override the compareTo,to sort the TreeMap
    @Override
    public int compareTo(MyEventInfo mei) {
        return this.myEventValue.compareTo(mei.myEventValue);
    }

    //overrride the tostring to print the Mousebutton/key
    @Override
    public String toString() {
        if (this.myEvent.equals("MouseButton")) {
            return ("MouseButton" + this.myEventValue);
        } else if (this.myEvent.equals("Key")) {
            return ("Key" + String.valueOf(this.myEventValue));
        } else {
            return "000000";
        }
    }

}

MyMain.java

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseListener;
import java.util.*;

import javax.swing.*;

public class MyMain{
    //instantiate hashset and treemap
    static  Set<Object> mySet = new HashSet();
    static Map<MyEventInfo, Integer> myMap = new TreeMap<MyEventInfo,Integer>();
    //static String myEvent;
    //static Integer myEventValue;
    public static void main(String[] args) {

        JFrame f = new JFrame("MyMain");
        f.setSize(500, 500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        MyComponent2 a2 = new MyComponent2(mySet,myMap);
        f.add(a2);
        f.addMouseListener((MouseListener) a2);
        KeyAdapter adper = new KeyAdapter() {
          @Override
            public void keyPressed(KeyEvent e){
              //if input enter, print
             if (e.getKeyCode() == e.VK_ENTER) {
                     for (Object s : mySet) {
                         System.out.println(s);
                     }

                     System.out.println(myMap);

                 }
                 else{
                     System.out.println(e.getKeyChar());
                     mySet.add(Character.toString(e.getKeyChar()));
                     MyEventInfo mei = new MyEventInfo("Key",e.getKeyChar());
                     //Check if there is a MEI in the map. If there is +1, create it if not
                     if(myMap.containsKey(mei)){
                         Integer mapValue = new Integer(myMap.get(mei));
                         mapValue += 1;
                         myMap.put(mei,mapValue);
                     }
                     else{
                         myMap.put(mei,1);
                     }
                     }
               
                }
          };
          
          f.addKeyListener(adper);



    }
}
  • 写回答

3条回答 默认 最新

  • 关注
    ASCII码转字符串的地方可以这么写 return ("Key" + (char) this.myEventValue.intValue());
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分