001 /* 002 * @(#)FloatingTextField.java 003 * 004 * Project: JHotdraw - a GUI framework for technical drawings 005 * http://www.jhotdraw.org 006 * http://jhotdraw.sourceforge.net 007 * Copyright: © by the original author(s) and all contributors 008 * License: Lesser GNU Public License (LGPL) 009 * http://www.opensource.org/licenses/lgpl-license.html 010 */ 011 012 package org.objectweb.jac.ide.diagrams; 013 014 import java.awt.Container; 015 import java.awt.Dimension; 016 import java.awt.Font; 017 import java.awt.Rectangle; 018 import java.awt.event.ActionListener; 019 import java.awt.event.KeyListener; 020 import javax.swing.JTextField; 021 022 /** 023 * A text field overlay that is used to edit a TextFigure. 024 * A FloatingTextField requires a two step initialization: 025 * In a first step the overlay is created and in a 026 * second step it can be positioned. 027 * 028 * @see CH.ifa.draw.figures.TextFigure 029 * 030 * @version <$CURRENT_VERSION$> 031 */ 032 public class FloatingTextField { 033 034 private JTextField fEditWidget; 035 private Container fContainer; 036 037 public FloatingTextField() { 038 fEditWidget = new JTextField(20); 039 } 040 041 /** 042 * Creates the overlay for the given Component. 043 */ 044 public void createOverlay(Container container) { 045 createOverlay(container, null); 046 } 047 048 /** 049 * Creates the overlay for the given Container using a 050 * specific font. 051 */ 052 public void createOverlay(Container container, Font font) { 053 container.add(fEditWidget, 0); 054 if (font != null) { 055 fEditWidget.setFont(font); 056 } 057 fContainer = container; 058 } 059 060 /** 061 * Adds an action listener 062 */ 063 public void addActionListener(ActionListener listener) { 064 fEditWidget.addActionListener(listener); 065 } 066 067 /** 068 * Remove an action listener 069 */ 070 public void removeActionListener(ActionListener listener) { 071 fEditWidget.removeActionListener(listener); 072 } 073 074 /** 075 * Adds an action listener 076 */ 077 public void addKeyListener(KeyListener listener) { 078 fEditWidget.addKeyListener(listener); 079 } 080 081 /** 082 * Remove an action listener 083 */ 084 public void removeKeyListener(KeyListener listener) { 085 fEditWidget.removeKeyListener(listener); 086 } 087 088 /** 089 * Positions the overlay. 090 */ 091 public void setBounds(Rectangle r, String text) { 092 fEditWidget.setText(text); 093 fEditWidget.setBounds(r.x, r.y, r.width, r.height); 094 fEditWidget.setVisible(true); 095 fEditWidget.selectAll(); 096 fEditWidget.requestFocus(); 097 } 098 099 /** 100 * Gets the text contents of the overlay. 101 */ 102 public String getText() { 103 return fEditWidget.getText(); 104 } 105 106 /** 107 * Gets the preferred size of the overlay. 108 */ 109 public Dimension getPreferredSize(int cols) { 110 fEditWidget.setColumns(cols); 111 return fEditWidget.getPreferredSize(); 112 } 113 114 /** 115 * Removes the overlay. 116 */ 117 public void endOverlay() { 118 fContainer.requestFocus(); 119 if (fEditWidget != null) { 120 fEditWidget.setVisible(false); 121 fContainer.remove(fEditWidget); 122 123 Rectangle bounds = fEditWidget.getBounds(); 124 fContainer.repaint(bounds.x, bounds.y, bounds.width, bounds.height); 125 } 126 } 127 } 128