问题 问答题

本题的功能是定义自己的组件类。窗口中排布着12个按钮,鼠标移动按钮时,按钮背景颜色改变,用鼠标单击按钮时,后台将显示该按钮对应的字符。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class java3 extends Frame
String keys="123456789*0#";
java3()
super("java3");
addWindowListener(new WindowAdapter()
public void windowClosing(WindowEvent e)
System.exit(0);

);
setLayout(new GridLayout(4,3,6,6));
for(int i=0;i<keyslength;i++))
KeyButton kb=new KeyButton(keys.charAt(i));
kb.addkeyListener(this);
kb.setBackground(Color.pink);
kb.setForeground(Color.black);
add(kb);

setSize(200,200);
show();

class KeyEventHandler extends KeyAdapter
public void keyTyped(KeyEvent evt)
System.out.println(evt.getChar());


public static void main(String[]args)
new java3();


class KeyButton extends Component
KeyListener keyListener;
boolean highlighted;
char key;
KeyButton(char k)
this.key=k;
addMouseListener(new MouseEventHandler());

public void paint(Graphics g)
int w=getSize().width;
int h=getSize().height;
String s=""+key;
FontMetrics fm=g.getFontMetrics();
if(highlighted)
g.setColor(getBackground());
g.fillRoundRect(0,0,w-1,h-1,10,10);

g.setColor(getForeground());
g.drawRoundRect(0,0,w-1,h-1,10,10);
g.drawstring(s,(w-fm.stringWidth(s))/2,
(h-fm.getHeight())/2+fm.getAscent());

class MouseEventHandler extends MouseAdapter
public void mousePressed(MouseEvent evt)
if(keyListener!=null)
keyListener.keyTyped(
new KeyEvent(KeyButton.this,KeyEvent.KEY_TYPED,
System.currentTimeMillis(),
0,KeyEvent.VK_UNDEFINED,key));


public void mouseEntered(MouseEvent evt)
highlighted=true;
repaint();

public void mouseExited(MouseEvent evt)
highlighted=false;
repaint();


public synchronized void addKeyListener(KeyListener 1)
keyListener=AWTEventMulticaster.add(keyListener,1);

public synchronized void removeKeyListener(KeyListener 1)
keyListener=AWTEventMulticaster.remove(keyListener,1);

答案

参考答案:第1处:int i=0;i<keys.length();i++
第2处:kb.addKeyListener(new KeyEventHandler())
第3处:system.out.println(evt.getKeyChar())

解析: 第1处是作为遍历keys中元素的条件,而keys中的字符元素就是各个按钮对应的字符。第2处注册键盘事件监听功能,KeyButton实现了KeyLIstener接口,而kb是KeyButton类的对象,所以它是合格的监听者。第3处将从键盘读到的字符输出。

填空题
多项选择题