Changeset 626 for trunk/src/org/expeditee/items/widgets
- Timestamp:
- 12/16/13 12:01:14 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/items/widgets/InteractiveWidget.java
r573 r626 8 8 import java.awt.Point; 9 9 import java.awt.Rectangle; 10 import java.awt.event.ContainerEvent; 11 import java.awt.event.ContainerListener; 12 import java.awt.event.KeyEvent; 13 import java.awt.event.KeyListener; 10 14 import java.awt.event.MouseEvent; 11 15 import java.lang.reflect.Constructor; 12 16 import java.util.ArrayList; 17 import java.util.Arrays; 13 18 import java.util.Collection; 14 19 import java.util.Collections; … … 25 30 import org.expeditee.gui.FrameGraphics; 26 31 import org.expeditee.gui.FrameIO; 32 import org.expeditee.gui.FrameKeyboardActions; 27 33 import org.expeditee.gui.FreeItems; 28 34 import org.expeditee.gui.MouseEventRouter; … … 39 45 * 40 46 */ 41 public abstract class InteractiveWidget {47 public abstract class InteractiveWidget implements ContainerListener, KeyListener { 42 48 43 49 protected JComponent _swingComponent; … … 431 437 432 438 _swingComponent = component; 439 _swingComponent.addContainerListener(this); 440 keyListenerToChildren(_swingComponent, true); 441 433 442 _textRepresentation = source; 434 443 … … 1749 1758 } 1750 1759 1760 /** 1761 * Makes sure we add our KeyListener to every child component, 1762 * since it seems that's the only way to make sure we capture key events in Java 1763 * (without using KeyBindings which seem to only support the keyTyped event) 1764 */ 1765 @Override 1766 public void componentAdded(ContainerEvent e) { 1767 if(e == null || e.getChild() == null) { 1768 return; 1769 } 1770 keyListenerToChildren(e.getChild(), true); 1771 } 1772 1773 @Override 1774 public void componentRemoved(ContainerEvent e) { 1775 if(e == null || e.getChild() == null) { 1776 return; 1777 } 1778 keyListenerToChildren(e.getChild(), false); 1779 } 1780 1781 @Override 1782 public void keyTyped(KeyEvent e) { 1783 1784 int keyCode = e.getKeyCode(); 1785 1786 if (keyCode >= KeyEvent.VK_F1 && keyCode <= KeyEvent.VK_F12) { 1787 FrameKeyboardActions.getInstance().keyTyped(e); 1788 } 1789 } 1790 1791 @Override 1792 public void keyPressed(KeyEvent e) { 1793 int keyCode = e.getKeyCode(); 1794 1795 if (keyCode >= KeyEvent.VK_F1 && keyCode <= KeyEvent.VK_F12) { 1796 FrameKeyboardActions.getInstance().keyPressed(e); 1797 } 1798 } 1799 1800 @Override 1801 public void keyReleased(KeyEvent e) { 1802 int keyCode = e.getKeyCode(); 1803 1804 if (keyCode >= KeyEvent.VK_F1 && keyCode <= KeyEvent.VK_F12) { 1805 FrameKeyboardActions.getInstance().keyReleased(e); 1806 } 1807 } 1808 1809 private void keyListenerToChildren(Component parent, boolean add) { 1810 List<Component> components = new LinkedList<Component>(); 1811 components.add(parent); 1812 while(!components.isEmpty()) { 1813 Component c = components.remove(0); 1814 if(c instanceof Container) { 1815 components.addAll(Arrays.asList(((Container)c).getComponents())); 1816 } 1817 if(add && !Arrays.asList(c.getKeyListeners()).contains(this)) { 1818 c.addKeyListener(this); 1819 } else if (!add && Arrays.asList(c.getKeyListeners()).contains(this)) { 1820 c.removeKeyListener(this); 1821 } 1822 } 1823 } 1824 1825 public void onResized() { 1826 invalidateSelf(); 1827 onBoundsChanged(); 1828 layout(_swingComponent); 1829 } 1830 1751 1831 }
Note:
See TracChangeset
for help on using the changeset viewer.