Java Tutorial/Swing Event/VetoableChangeListener

Материал из Java эксперт
Перейти к: навигация, поиск

implements VetoableChangeListener to block focus change events

   <source lang="java">

import java.awt.ruponent; import java.awt.KeyboardFocusManager; import java.beans.PropertyChangeEvent; import java.beans.PropertyVetoException; import java.beans.VetoableChangeListener; public class Main {

 public static void main(String[] argv) {
   KeyboardFocusManager.getCurrentKeyboardFocusManager().addVetoableChangeListener(
       new FocusVetoableChangeListener());
 }

} class FocusVetoableChangeListener implements VetoableChangeListener {

 public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException {
   Component oldComp = (Component) evt.getOldValue();
   Component newComp = (Component) evt.getNewValue();
   if ("focusOwner".equals(evt.getPropertyName())) {
     if (oldComp == null) {
       System.out.println(newComp.getName());
     } else {
       System.out.println(oldComp.getName());
     }
   } else if ("focusedWindow".equals(evt.getPropertyName())) {
     if (oldComp == null) {
       System.out.println(newComp.getName());
     } else {
       System.out.println(oldComp.getName());
     }
   }
   boolean vetoFocusChange = false;
   if (vetoFocusChange) {
     throw new PropertyVetoException("message", evt);
   }
 }

}</source>





Listening to JComponent Events with a VetoableChangeListener

   <source lang="java">

import java.awt.BorderLayout; import java.beans.PropertyChangeEvent; import java.beans.PropertyVetoException; import java.beans.VetoableChangeListener; import javax.swing.JDesktopPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; public class VetoableChangeListenerDemo {

 public static void main(final String args[]) {
   JFrame frame = new JFrame();
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JDesktopPane desktop = new JDesktopPane();
   JInternalFrame palette = new JInternalFrame("Palette", true, true, true, true);
   palette.addVetoableChangeListener(new IconPolice());
   palette.setBounds(350, 150, 100, 100);
   desktop.add(palette, JDesktopPane.PALETTE_LAYER);
   palette.setVisible(true);
   frame.add(desktop, BorderLayout.CENTER);
   frame.setSize(500, 300);
   frame.setVisible(true);
 }

} class IconPolice implements VetoableChangeListener {

 public void vetoableChange(PropertyChangeEvent ev) throws PropertyVetoException {
   String name = ev.getPropertyName();
   if (name.equals(JInternalFrame.IS_ICON_PROPERTY) && (ev.getNewValue() == Boolean.TRUE)) {
     System.out.println("JInternalFrame.IS_ICON_PROPERTY");
   }
 }

}</source>