java2图形设计卷Ⅱ学习小结.docx

上传人:b****5 文档编号:3025604 上传时间:2022-11-17 格式:DOCX 页数:46 大小:151.56KB
下载 相关 举报
java2图形设计卷Ⅱ学习小结.docx_第1页
第1页 / 共46页
java2图形设计卷Ⅱ学习小结.docx_第2页
第2页 / 共46页
java2图形设计卷Ⅱ学习小结.docx_第3页
第3页 / 共46页
java2图形设计卷Ⅱ学习小结.docx_第4页
第4页 / 共46页
java2图形设计卷Ⅱ学习小结.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

java2图形设计卷Ⅱ学习小结.docx

《java2图形设计卷Ⅱ学习小结.docx》由会员分享,可在线阅读,更多相关《java2图形设计卷Ⅱ学习小结.docx(46页珍藏版)》请在冰豆网上搜索。

java2图形设计卷Ⅱ学习小结.docx

java2图形设计卷Ⅱ学习小结

《java2图形设计卷Ⅱ》学习小结

4.轻量事件通知

  由“模型”一节我们知道,模型能够提供轻量通知和状态通知两种通知。

轻量通知使用一个只知道事件源的ChangeEvent(

变化事件),状态通知则使用提供有关变化的更多信息的事件。

  变化事件由一些事件来处理,这些对象的类实现ChangeListener接口。

接口总结3-1对ChangeListener接口进行了总结。

  接口总结3-1ChangeListener

  publicabstractvoidstateChanged(ChageEvent)

  与大多数监听器一样,ChangeListener接口只定义了一个方法。

StateChanged方法以ChangeEvent的一个实例作为参数。

类总结3-1中介绍了ChangeEvent类。

  类总结3-1ChangeEvent

  扩展:

java.util.EventObject

  构造方法

  publicChageEvent(Objectsource)

  ChangeEvent类仅提供了一个构造方法,没有提供其他方法。

ChangeEvent构造方法以事件源作为参数。

  图3-9所示的小应用程序通过监控滑杆的值来说明轻量通知。

一个变化监听器添加到这个小应用程序的滑杆中以获得滑杆

值并更新这个小应用程序的状态区。

  图3-9轻量通知

  例3-2列出了图3-9所示的小应用程序的代码

例3-2一个滑杆的轻量通知

  importjava.awt.*;

  importjavax.swing.*;

  importjavax.swing.event.*;

  publicclassTestextendsJApplet{

   publicvoidinit(){

    JSliderslider=newJSlider(0,100,50);

     getContentPane().add(slider,BorderLayout.CENTER);

     slider.addChangeListener(newChangeListener(){

      publicvoidstateChanged(ChangeEvente){

      JSliders=(JSlider)e.getSource();

      showStatus(Integer.toString(s.getValue()));

     }

    });

   }

  }

  5.状态事件通知

  对不经常变化的模型属性,模型使用状态通知。

状态通知激发所有类型的事件,并且提供比事件源更多信息(轻量事件通

知仅提供事件源一种信息)。

例如,当选取或取消选取一个单选按钮时,按钮模型将激发一个项事件。

  6.属性变化通知

  当模型的关联属性变化时(当一个属性的变化激发一个属性变化事件,则这个属性称作关联属性。

)模型会以一个

java.beans.PropertyChangeEvent的形式产生状态通知。

属性变化通知由一些对象来处理,这些对象的类实现

java.beans.PropertyChangeListener接口,接口总结3-2中总结了这个接口。

importjavax.swing.*;

  importjava.awt.*;

  importjava.awt.event.*;

  importjava.util.*;

  importjava.beans.*;

  publicclassTestextendsJFrame{

   JTreetree=newJTree();

   publicTest(){

    ContainercontentPane=getContentPane();

    JScrollPanescrollPane=newJScrollPane(tree);

    contentPane.add(newControlPanel(),BorderLayout.NORTH);

    contentPane.add(scrollPane,BorderLayout.CENTER);

    tree.addPropertyChangeListener(newPropertyListener());

   }

   classControlPanelextendsJPanel{

    JCheckBoxshowRoot=newJCheckBox("showrootnode");

    publicControlPanel(){

     showRoot.setSelected(tree.isRootVisible());

     setLayout(newFlowLayout());

     add(showRoot);

     showRoot.addActionListener(newActionListener(){

      publicvoidactionPerformed(ActionEvente){

       tree.setRootVisible(showRoot.isSelected());

      }

     });

    }

   }

   classPropertyListenerimplementsPropertyChangeListener{

    publicvoidpropertyChange(PropertyChangeEvente){

     Stringname=e.getPropertyName();

     if(name.equals(JTree.ROOT_VISIBLE_PROPERTY)){

      Stringmsg="RootVisibleProperty:

"+

      e.getNewValue().toString();

      JOptionPane.showMessageDialog(

      Test.this,//parentcomp

      msg,//message

      "PropertyChange",//title

      JOptionPane.INFORMATION_MESSAGE);

     }

    }

   }

例4-7不容透明Swing组件

importjavax.swing.*;

importjava.awt.*;

publicclassOpaqueTestextendsJApplet{

publicvoidinit(){

ContainercontentPane=getContentPane();

RainPanelrainPanel=newRainPanel();

ColoredPanelopaque=newColoredPanel(),

transparent=newColoredPanel();

//JComponentsareopaquebydefault,sotheopaque

//propertyonlyneedstobesetfortransparent

transparent.setOpaque(false);

rainPanel.add(opaque);

rainPanel.add(transparent);

contentPane.add(rainPanel,BorderLayout.CENTER);

System.out.println(opaque.isOpaque());

System.out.println(transparent.isOpaque());

}

}

classRainPanelextendsJPanel{

ImageIconrain=newImageIcon(this.getClass().getResource("rain.gif"));

privateintrainw=rain.getIconWidth();

privateintrainh=rain.getIconHeight();

publicvoidpaintComponent(Graphicsg){

Dimensionsize=getSize();

for(introw=0;row

for(intcol=0;col

rain.paintIcon(this,g,col,row);

}

}

classColoredPanelextendsJPanel{

publicvoidpaintComponent(Graphicsg){

super.paintComponent(g);

Dimensionsize=getSize();

g.setColor(Color.black);

g.drawRect(0,0,size.width-1,size.height-1);

g.setColor(Color.red);

g.fillRect(size.width/2-25,size.height/2-25,50,50);

}

publicDimensiongetPreferredSize(){

returnnewDimension(100,100);

}

}

4.3.7立即绘制Swing组件

例4-8在事件处理方法中使用paintImmediately()

importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

publicclassTestAppletextendsJApplet{

publicvoidinit(){

ContainercontentPane=getContentPane();

finalJPanelpanel=newJPanel();

JButtonbutton=newJButton("repaint");

panel.setBackground(Color.blue);

panel.setPreferredSize(newDimension(100,100));

contentPane.setLayout(newFlowLayout());

contentPane.add(button);

contentPane.add(panel);

button.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

Colorc=panel.getBackground();

Dimensionsz=panel.getSize();

panel.setBackground(

c==Color.blue?

Color.red:

Color.blue);

panel.paintImmediately(

0,0,sz.width,sz.height);

//for

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1