一个更复杂的Bean[Java编程]
本文“一个更复杂的Bean[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
接下的程序例子略微复杂一些,固然这没有什么代价.这个程序是一张不管鼠标什么时刻移动都环绕它画一个小圆的,并且一个行动接纳器被激活.画布.当按下鼠标键时,我们可以改变的属性是圆的大小,除此之外还有被显示文字的色彩,大小,内容.BangBean一样拥有它自己的addActionListener()和removeActionListener()办法,因此我们可以附上自己的当用户单击在BangBean上时会被激活的接纳器.这样,我们将可以确承认支持的属性和事件:
//: BangBean.java
// A graphical Bean
package bangbean;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
public class BangBean extends Canvas
implements Serializable {
protected int xm, ym;
protected int cSize = 20; // Circle size
protected String text = "Bang!";
protected int fontSize = 48;
protected Color tColor = Color.red;
protected ActionListener actionListener;
public BangBean() {
addMouseListener(new ML());
addMouseMotionListener(new MML());
}
public int getCircleSize() { return cSize; }
public void setCircleSize(int newSize) {
cSize = newSize;
}
public String getBangText() { return text; }
public void setBangText(String newText) {
text = newText;
}
public int getFontSize() { return fontSize; }
public void setFontSize(int newSize) {
fontSize = newSize;
}
public Color getTextColor() { return tColor; }
public void setTextColor(Color newColor) {
tColor = newColor;
}
public void paint(Graphics g) {
g.setColor(Color.black);
g.drawOval(xm - cSize/2, ym - cSize/2,
cSize, cSize);
}
// This is a unicast listener, which is
// the simplest form of listener management:
public void addActionListener (
ActionListener l)
throws TooManyListenersException {
if(actionListener != null)
throw new TooManyListenersException();
actionListener = l;
}
public void removeActionListener(
ActionListener l) {
actionListener = null;
}
class ML extends MouseAdapter {
public void mousePressed(MouseEvent e) {
Graphics g = getGraphics();
g.setColor(tColor);
g.setFont(
new Font(
"TimesRoman", Font.BOLD, fontSize));
int width =
g.getFontMetrics().stringWidth(text);
g.drawString(text,
(getSize().width - width) /2,
getSize().height/2);
g.dispose();
// Call the listener's method:
if(actionListener != null)
actionListener.actionPerformed(
new ActionEvent(BangBean.this,
ActionEvent.ACTION_PERFORMED, null));
}
}
class MML extends MouseMotionAdapter {
public void mouseMoved(MouseEvent e) {
xm = e.getX();
ym = e.getY();
repaint();
}
}
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
// Testing the BangBean:
public static void main(String[] args) {
BangBean bb = new BangBean();
try {
bb.addActionListener(new BBL());
} catch(TooManyListenersException e) {}
Frame aFrame = new Frame("BangBean Test");
aFrame.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
aFrame.add(bb, BorderLayout.CENTER);
aFrame.setSize(300,300);
aFrame.setVisible(true);
}
// During testing, send action information
// to the console:
static class BBL implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("BangBean action");
}
}
} ///:~
最重要的是我们会注意到BangBean履行了这种串通化的接口.这意味着利用程序构建工具可以在程序计划者调整完属性值后操纵串通为BangBean储藏全部的信息.当Bean作为运行的利用程序的一部份被成立时,那些被储藏的属性被重新恢复,因此我们可以精确地得到我们的计划.
我们能看到普通同Bean一同运行的全部的字段都是专用的——答应只能通过办法来拜候,普通操纵“属性”构造.
当我们凝视着addActionListener()的签名时,我们会注意到它可以产生出一个TooManyListenerException(太多接纳器非常).这个非常指明它是一个单一的范例的,意味着当事件发生时,它只能告诉一个接纳器.普通情形下,我们会利用具有多种范例的事件,以便一个事件告诉多个的接纳器.但是,那样会陷入直到下一章我们才能预备好的终局中,因此这些内容会被重新回想(下一个标题是“Java Beans 的重新回想”).单一范例的事件躲避了这个难题.
当我们按下鼠标键时,文字被安入BangBean中间,并且假如行动接纳器字段存在,它的actionPerformed()办法就被调用,成立一个新的ActionEvent对象在处理历程中.无论什么时刻鼠标移动,它的新座标将被捕捉,并且画布会被重画(像我们所看到的抹去一些画布上的文字).
main()办法增添了答应我们从号令行中测试程序的功效.当一个Bean在一个开辟环境中,main()办法不会被利用,但拥有它是绝对有益的,因为它供应了快速的测试本领.无论什么时刻一个ActionEvent发生,main()办法都将成立了一个帧并安设了一个BangBean在它里面,还在BangBean中附上了一个简单的行动接纳器以打印到掌握台.当然,普通来说利用程序构建工具将成立大大都的Bean的代码.当我们通过BeanDumper大概安设BangBean到一个可激活Bean的开辟环境中去运行BangBean时,我们会注意到会有很多额外的属性和行动明显超越了上面的代码.那是因为BangBean从画布中担当,并且画布就是一个Bean,因此我们看到它的属性和事件一样的符合.
以上是“一个更复杂的Bean[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |