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条)

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况