主观
本题的功能是定义自已的组件类。窗口中排布着12个按钮,鼠标移动按钮时,按钮背景颜色改变,用鼠标单击 按钮时,后台将显示该按钮对应的字符。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class java3 extends Frame{
String keys="l23456789*0#";
java3{
super("java3");
addWindowListener(new WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(O);
}
});
setLayout(new GridLayout(4,3,6,6));
for(int i=0;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){
newjava3;
}
}
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 addKeyListerner(KeyLis-
tener l){
keyListener=AWTEventMuhieaster.add(key-
Listener,1);
}
public synchronized void removeKeyListener(Key-
Listener l){
keyListener=AWTEventMuhicaster.remove
(keyListener,1);
}
}