62,620
社区成员
发帖
与我相关
我的任务
分享import java.awt.*;
import java.awt.event.*;
class Display
{
public static final int
EVENT=0,COMPONENT=1,
MOUSE=2,MOUSE_MOVE=3,
FOCUS=4,KEY=5,ACTION=6,LAST=7;
public String[] evnt;
Display()
{
evnt=new String[LAST];
for(int i=0;i<LAST;i++)
evnt[i]=new String();
}
public void show(Graphics g)
{
for(int i=0;i<LAST;i++)
g.drawString(evnt[i],0,10*i+10);
}
}
class EnabledPanel extends Panel
{
Color c;
int id;
Display display=new Display();
public EnabledPanel(int i,Color mc)
{
c=mc;
id=i;
setLayout(new BorderLayout());
add(new myButton(),BorderLayout.SOUTH);
addComponentListener(new CL());
addFocusListener(new FL());
addKeyListener(new KL());
addMouseListener(new ML());
addMouseMotionListener(new MML());
}
//为消除闪烁
public void update(Graphics g)
{
paint(g);
}
//
public void paint(Graphics g)
{
g.setColor(c);
Dimension s=getSize();
g.fillRect(0,0,s.width,s.height);//用指定颜色填充面板矩形
g.setColor(Color.black);
display.show(g); //设置黑色,将evnt的字符串显示出来
}
public void processEvent(AWTEvent e)
{
display.evnt[Display.EVENT]=e.toString();
repaint(); //更新evnt的字符串后重画
super.processEvent(e); //调用父类的processEvent()方法
}
class CL implements ComponentListener
{
public void componentMoved(ComponentEvent e) //组件移动
{
display.evnt[Display.COMPONENT]="Component Move";
repaint();
}
public void componentResized(ComponentEvent e) //组件重置大小
{
display.evnt[Display.COMPONENT]="Component Resize";
repaint();
}
public void componentHidden(ComponentEvent e) //组件隐藏
{
display.evnt[Display.COMPONENT]="Component Hidden";
repaint();
}
public void componentShown(ComponentEvent e) //组件移动
{
display.evnt[Display.COMPONENT]="Component Show";
repaint();
}
}
class FL implements FocusListener
{
public void focusGained(FocusEvent e) //获取焦点
{
display.evnt[Display.FOCUS]="Focus Got";
repaint();
}
public void focusLost(FocusEvent e) //失去焦点
{
display.evnt[Display.FOCUS]="Focus Lost";
repaint();
}
}
class KL implements KeyListener
{
public void keyPressed(KeyEvent e) //按下一个键
{
display.evnt[Display.KEY]="Key Pressed";
showCode(e);
}
public void keyReleased(KeyEvent e) //释放一个键
{
display.evnt[Display.KEY]="Key Released";
showCode(e);
}
public void keyTyped(KeyEvent e) //输入一个键
{
display.evnt[Display.KEY]="Key Typed";
showCode(e);
}
void showCode(KeyEvent e) //显示键的代码
{
int code=e.getKeyCode();
display.evnt[Display.KEY]+=KeyEvent.getKeyText(code);
repaint();
}
}
class ML implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
requestFocus(); //给当前控件获得焦点
display.evnt[Display.MOUSE]="Mouse Click";
showMouse(e);
}
public void mousePressed(MouseEvent e)
{
display.evnt[Display.MOUSE]="Mouse Pressed";
showMouse(e);
}
public void mouseReleased(MouseEvent e)
{
display.evnt[Display.MOUSE]="Mouse Released";
showMouse(e);
}
public void mouseEntered(MouseEvent e)
{
display.evnt[Display.MOUSE]="Mouse Enter";
showMouse(e);
}
public void mouseExited(MouseEvent e)
{
display.evnt[Display.MOUSE]="Mouse Exit";
showMouse(e);
}
void showMouse(MouseEvent e)
{
display.evnt[Display.MOUSE]+=" x="+e.getX()+",y="+e.getY();
repaint();
}
}
class MML implements MouseMotionListener
{
public void mouseDragged(MouseEvent e)
{
display.evnt[Display.MOUSE_MOVE]="Mouse Dragged";
showMouse(e);
}
public void mouseMoved(MouseEvent e)
{
display.evnt[Display.MOUSE_MOVE]="Mouse Moved";
showMouse(e);
}
void showMouse(MouseEvent e)
{
display.evnt[Display.MOUSE_MOVE]+=" x="+e.getX()+",y="+e.getY();
repaint();
}
}
}
class myButton extends Button
{
int clickCounter=0;
String label="";
public myButton()
{
addActionListener(new AL());
}
public void paint(Graphics g)
{
g.setColor(Color.green);
Dimension s=getSize();
g.fillRect(0, 0, s.width, s.height);
g.setColor(Color.black);
g.drawRect(0, 0, s.width-1, s.height-1);
drawLabel(g);
}
private void drawLabel(Graphics g)
{
FontMetrics fm=g.getFontMetrics(); //用图形来得到字体规格
int width=fm.stringWidth(label); //得到字符串label的的基线长
int height=fm.getHeight(); //
int ascent=fm.getAscent();
int leading=fm.getLeading();
int horizMargin=(getSize().width-width)/2;
int verMargin=(getSize().height-height)/2;
g.setColor(Color.red);
g.drawString(label, horizMargin, verMargin+leading+ascent);
}
class AL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
clickCounter++;
label="click# "+clickCounter+" "+e.toString();
repaint();
}
}
}
public class GoodTechnique extends Frame{
GoodTechnique()
{
setLayout(new GridLayout(2,2));
add(new EnabledPanel(1,Color.cyan));
add(new EnabledPanel(2,Color.lightGray));
add(new EnabledPanel(3,Color.yellow));
}
public static void main(String[] args)
{
Frame f=new GoodTechnique();
f.setTitle("Good Technique");
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
f.setSize(700,700);
f.setVisible(true);
}
}
类myButton1的首字母是小写的。在eclipse中可以运行。
谁跟你讲Java类命名不区分大小写的,拖出去砍死!
import java.awt.*;
import java.applet.*;
import java.util.*;
class myButton1 extends Canvas
{
AutoEvent parent;
Color color;
String label;
myButton1(AutoEvent parent,Color color,String label)
{
this.parent=parent;
this.color=color;
this.label=label;
}
public void paint(Graphics g)
{
//用指定颜色对圆角矩形进行填充
g.setColor(color);
int rnd=30;
g.fillRoundRect(0, 0, size().width, size().height, rnd, rnd);
//黑色画出圆角矩形的边框
g.setColor(Color.black);
g.drawRoundRect(0, 0, size().width, size().height, rnd, rnd);
//对字体进行设置
FontMetrics fm=g.getFontMetrics(); //获取当前上下文字体的字体规格
int width=fm.stringWidth(label); //字符串label的advance width,其基线从左到右的距离
int height=fm.getHeight(); //Font中文本行的标准height
int ascent=fm.getAscent(); //
int leading=fm.getLeading(); //Font的标准行间距
int horizMargin=(size().width-width)/2; //字符串左边空距离
int verMargin=(size().height-height)/2; //字符串上边缘到Top的距离
g.setColor(Color.white);
g.drawString(label, horizMargin, verMargin+ascent+leading);
}
//按下键盘事件
public boolean keyDown(Event evt,int key)
{
TextField t=(TextField)parent.h.get("keyDown");
t.setText(evt.toString());
return true;
}
//键盘弹起事件
public boolean keyUp(Event evt,int key)
{
TextField t=(TextField)parent.h.get("keyUp");
t.setText(evt.toString());
return true;
}
//丢失焦点事件
public boolean lostFocus(Event evt,Object w)
{
TextField t=(TextField)parent.h.get("lostFocus");
t.setText(evt.toString());
return true;
}
//获取焦点事件
public boolean gotFocus(Event evt,Object w)
{
TextField t=(TextField)parent.h.get("gotFocus");
t.setText(evt.toString());
return true;
}
//鼠标按下事件
public boolean mouseDown(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseDown");
t.setText(evt.toString());
return true;
}
//鼠标拖拽事件
public boolean mouseDrag(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseDrag");
t.setText(evt.toString());
return true;
}
//鼠标进入事件
public boolean mouseEnter(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseEnter");
t.setText(evt.toString());
return true;
}
//鼠标离开事件
public boolean mouseExit(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseExit");
t.setText(evt.toString());
return true;
}
//鼠标移动事件
public boolean mouseMove(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseMove");
t.setText(evt.toString());
return true;
}
//鼠标弹起事件
public boolean mouseUp(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseUp");
t.setText(evt.toString());
return true;
}
}
public class AutoEvent extends Applet{
Hashtable h=new Hashtable();
String[] event={"keyDown", "keyUp", "lostFocus",
"gotFocus", "mouseDown", "mouseUp",
"mouseMove", "mouseDrag", "mouseEnter",
"mouseExit"};
myButton1 b1=new myButton1(this,Color.blue,"test1");
myButton1 b2=new myButton1(this,Color.red,"test2");
public void init()
{
setLayout(new GridLayout(event.length+1,2));
for(int i=0;i<event.length;i++)
{
TextField t=new TextField();
t.setEditable(false);
add(new Label(event[i],Label.CENTER));
add(t);
h.put(event[i],t);
}
add(b1);
add(b2);
}
}
类myButton1的首字母是小写的。在eclipse中可以运行。