?? 自定義組件和自定義事件.txt
字號:
/**
* @(#) ODTButtonEvent.java
*
* Copyright 2004 Opensource Develop Team. All rights reserved.
*/
// package
package com.opensource.event;
// import classes
import java.awt.AWTEvent;
/**
* 自定義按鈕事件。
*
* @author ODT
* @version 1.0 06/05/2004
* @see AWTEvent
* @since JDK 1.3
*/
public class ODTButtonEvent extends AWTEvent
{
public static final int ENTERED = 1; // 鼠標進入BUTTON
l public static final int EXITED = 2; // 鼠標退出BUTTON
public static final int PRESSED = 3; // 鼠標按下
public static final int RELEASED = 4; // 鼠標釋放
Object item;
int buttonState;
public ODTButtonEvent(ODTButtonable source, Object item, int buttonState)
{
super(source, -1);
this.item = item;
this.buttonState = buttonState;
}
public ODTButtonable getODTButtonable()
{
return (ODTButtonable) source; // 返回被監聽的對象
}
public Object getItem()
{
return item;
}
public int getButtonState()
{
return buttonState; // 返回按鈕狀態
}
public String paramString()
{
String s = null;
switch (buttonState)
{
case ENTERED:
s = "ENTERED";
break;
case EXITED:
s = "EXITED";
break;
case PRESSED:
s = "PRESSED";
break;
case RELEASED:
s = "RELEASED";
break;
default:
s = "unknown button state";
}
return super.paramString() + " [button=" + s + "]";
}
}
自定義監聽接口:
代碼:
/**
* @(#) ODTButtonListener.java
*
* Copyright 2004 Opensource Develop Team. All rights reserved.
*/
// package
package com.opensource.event;
// import classes
import java.util.EventListener;
/**
* 監聽ODTButtonEvent接口
*
* @author ODT
* @version 1.0 06/05/2004
* @see EventListener
* @since JDK 1.3
*/
public interface ODTButtonListener extends EventListener
{
void buttonStateChanged(ODTButtonEvent event); // 觸發事件
}
自定義構件注冊監聽器接口:
代碼:
/**
* @(#) ODTButtonable.java
*
* Copyright 2004 Opensource Develop Team. All rights reserved.
*/
// package
package com.opensource.event;
// import classes
/**
* 構件實現此接口,可以擴展監聽者注冊感興趣的擴展事件
*
* @author ODT
* @version 1.0 06/05/2004
* @since JDK 1.3
*/
public interface ODTButtonable
{
public void addButtonListener(ODTButtonListener l); // 注冊監聽器
public void removeButtonListener(ODTButtonListener l); // 取消監聽器
}
以上是對自定義事件機制的描述,下面是自定義組件。
自定義組件:
代碼:
/**
* @(#) ODTButton.java
*
* Copyright 2004 Opensource Develop Team. All rights reserved.
*/
// package
package com.opensource.odt;
// import classes
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import com.opensource.event.*;
/**
* 實現ItemExpandable接口的構件
*
* @author ODT
* @version 1.0 06/05/2004
* @see Component
* @see ODTButtonable
* @since JDK 1.3
*/
public class ODTButton extends Component implements ODTButtonable
{
private int stated;
private Vector listeners = new Vector();
public ODTButton()
{
addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent event)
{
stated = ODTButtonEvent.ENTERED;
entered(stated);
repaint();
}
public void mousePressed(MouseEvent event)
{
stated = ODTButtonEvent.PRESSED;
pressed(stated);
repaint();
}
public void mouseExited(MouseEvent event)
{
stated = ODTButtonEvent.EXITED;
exited(stated);
repaint();
}
});
}
public void entered(int stated)
{
ODTButtonEvent e = new ODTButtonEvent(this, this, stated);
processButtonEvent(e); // 利用processButtonEvent(e)來觸發事件
}
public void pressed(int stated)
{
ODTButtonEvent e = new ODTButtonEvent(this, this, stated);
processButtonEvent(e);
}
public void exited(int stated)
{
ODTButtonEvent e = new ODTButtonEvent(this, this, stated);
processButtonEvent(e);
}
public void paint(Graphics g)
{
drawBorder(g);
drawContent(g);
}
public Dimension getPreferredSize()
{
return new Dimension(50, 20);
}
public void addButtonListener(ODTButtonListener l)
{
listeners.addElement(l);
}
public void removeButtonListener(ODTButtonListener l)
{
listeners.removeElement(l);
}
public synchronized void processButtonEvent(ODTButtonEvent event)
{
Enumeration e = listeners.elements();
while (e.hasMoreElements())
{
ODTButtonListener l = (ODTButtonListener) e.nextElement();
l.buttonStateChanged(event); // 觸發事件
}
}
// 按鈕邊框
public void drawBorder(Graphics g)
{
Dimension size = getSize();
g.setColor(new Color(174, 23, 145));
g.drawRoundRect(0, 0, size.width-1, size.height-1, 5, 5);
}
// 改變按鈕顏色
public void drawContent(Graphics g)
{
Dimension size = getSize();
if (stated == ODTButtonEvent.ENTERED)
{
g.setColor(new Color(248, 199, 238));
}
else
g.setColor(new Color(236, 111, 210));
g.fillRoundRect(1, 1, size.width-2, size.height-2, 5, 5);
}
}
測試自定義組件和事件:
代碼:
/**
* @(#) ODTButtonTest.java
*
* Copyright 2004 Opensource Develop Team. All rights reserved.
*/
// package
package com.opensource.odt;
// import classes
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import com.opensource.event.*;
/**
* 測試自定義組件和事件代碼范例
*
* @author ODT
* @version 1.0 06/05/2004
* @see JFrame
* @see ODTButtonListener
* @since JDK 1.3
*/
public class ODTButtonTest extends JFrame implements ODTButtonListener
{
public ODTButtonTest()
{
ODTButton button = new ODTButton();
button.addButtonListener(this); // 注冊監聽器
getContentPane().setLayout(new FlowLayout());
getContentPane().add(button);
getContentPane().setBackground(Color.WHITE);
setSize(400, 500);
setVisible(true);
}
// 所觸發的事件
public void buttonStateChanged(ODTButtonEvent event)
{
ODTButtonable ie = event.getODTButtonable();
System.out.println(event.paramString());
}
public static void main(String[] args)
{
new ODTButtonTest();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -