欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
6:古老的事件处理
applet中 的消息处理函数基本都是继承自 Class Component,
public boolean action(Event evt,Object what);
handleEvent();
例子如下,因为他们不是不是面向对象的,也没有switch-case语句,所以就必须调用复杂的if-else语句,并且还得返回父类的程序,例子如下:
public boolean action (Event evt, Object arg) {
if(arg.equals(“Button 1”))
getAppletContext().showStatus(“Button 1”);
else if(arg.equals(“Button 2”))
getAppletContext().showStatus(“Button 2”);
// Let the base class handle it:
else
return super.action(evt, arg);
return true; // We’ve handled it here
}
handleEvent 是单独处理一个对象的一个时间,当一些action不方便处理的事情就可以通过handleEvent来处理,因为它是原子性质的。下面的两段代码将是等价的:
public boolean action (Event evt, Object arg) {
if(evt.target.equals(lst)) {
t.setText(“”);
String[] items = lst.getSelectedItems();
for(int i = 0; i < items.length; i++)
t.appendText(items[i] + “\n”);
}
else if(evt.target.equals(b)) {
if(count < flavors.length)
lst.addItem(flavors[count++], 0);
}
else
return super.action(evt, arg);
return true;
}
}
*************************************************************************
public boolean handleEvent(Event evt) {
if(evt.id == Event.LIST_SELECT || evt.id == Event.LIST_DESELECT) {
if(evt.target.equals(lst)) {
t.setText(“”);
String[] items = lst.getSelectedItems();
for(int i = 0; i < items.length; i++)
t.appendText(items[i] +”\n”);
}
else
return super.handleEvent(evt);
}
else
// must return super.handleEvent(evt);
return super.handleEvent(evt);
return true;
}
public boolean action(Event evt, Object arg) {
if(evt.target.equals(b)) {
if(count < flavors.length)
lst.addItem(flavors[count++], 0);
}
else
return super.action(evt, arg);
return true;
}
并且必须强调的是handle中的最后一个必须返回super.handle(evt);因为必须把handle中不想处理的事情交给父类,要不然例子中的action将不会被执行。
7:布局
java中的布局有多个,我们可以采取各种各样的布局,是界面呈现自己想要的姿态
(1)FlowLayout:
按照顺序依次排放各个组件
(2)BorderLayout
将整个布局分为上下左右中五个部位
(3)GridLayout
将整个布局分为m×n块均匀大小
(4)CardLayout
一个平面上所有的组件重合,但是某一个时刻只有一个是被及激活的。通过下面这样的方式来改变激活重合的组件。
if (evt.target.equals(first)) {
cl.first(cards);
}
else if (evt.target.equals(second)) {
cl.first(cards);
cl.next(cards);
}
else if (evt.target.equals(third)) {
cl.last(cards);
}
8:程序片applet的限制
applet出于安全机制考虑,它不能访问本地磁盘,不能拥有菜单,对话框不被信任;
9:新的事件委托事件函数
新的事件处理机制采用事件源和监听器的模式,程序如下所示:
class B1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
t.setText(“Button 1”);
}
}
通过设置内部类来实现UI和事件处理相互分离的作用
10:applet 和 窗口程序的结合
通过在类中添加一个main函数就可以将程序变成一个既能在HTML中运行的程序片,又能在桌面中运行的程序片。
public static void main(String[] args) {
TextNew applet = new TextNew();
Frame aFrame = new Frame(“TextNew”);
aFrame.addWindowListener(
new Win dowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
aFrame.add(applet, BorderLayout.CENTER);
aFrame.setSize(300,200);
applet.init();
applet.start();
aFrame.setVisible(true);
}
[1][2]
发光并非太阳的专利,你也可以发光