Paste inside JTable CellEditor
I have a JTable in which I've implemented a TextArea CellEditor. In this component, I've caught the Ctrl-V KeyEvent and have called a paste method accordingly. Also in the table I've caught the same event and called the same paste method. The problem is when I double click on the cell (editor is available now) my paste method gets called and then the default windows (i'm guessing) paste functionality also kicks in. So the cell gets overwritten, and my data (which I had considerably formatted) is lost. Is there any way I can stop this from happening??
JTable has a default Action for the Ctrl+V KeyStroke. You should replace this default with your Action. Here is an [url http://forum.java.sun.com/thread.jsp?forum=57&thread=509913]example of how you can replace/remove an Action.
Similar Messages
-
Combobox Autocomplete editor inside Jtable cell
I have a custom combobox editor which supports the autocomplete feature as follows:
as soon as the user keys in any character, this editor searches for the item that starts with keyed in character. This item is displayed in the editor text field and the combobox popup is set to visible and the this item is set to selected.
this editor works fine when standalone. but the popup fails to become visible when this combobox is used as an celleditor inside jtable. infact the focus is lost from the entire table.
can anyone suggest the possible reason (and solution if possible).
following are the code snippets for the same: -
private TableCellEditor addCellEditor() {
final JComboBox myJComboBox = new PIComboBox();
myJComboBox.setModel(new DefaultComboBoxModel(// some data model //));
//change the size of popup window
BasicComboPopup comboPopup = null;
for (int i=0, n=getUI().getAccessibleChildrenCount(myJComboBox); i<n; i++) {
Object component = getUI().getAccessibleChild(myJComboBox, i);
if (component instanceof BasicComboPopup) {
comboPopup = (BasicComboPopup) component;
break;
if(null != comboPopup)
comboPopup.setLayout(new GridLayout(1,1));
comboPopup.setPopupSize(new Dimension(200, 150));
myJComboBox.setEditable(true);
myJComboBox.setEditor(new ComboBoxAutoCompleteEditor(myJComboBox, 3));
myJComboBox.setUI(new ComboBoxAutoCompleteUI());
TableCellEditor myCellEditor = new DefaultCellEditor(myJComboBox );
return myCellEditor;
public class ComboBoxAutoCompleteEditor extends BasicComboBoxEditor {
public ComboBoxAutoCompleteEditor(PIComboBox comboBox, int maxLength) {
super();
this.comboBox = comboBox;
this.maxLength = maxLength;
@Override
public Component getEditorComponent() {
if(null == editorComponent)
editorComponent = new PITextField();
editorComponent.setBorder(null);
editorComponent.setMaxLength(maxLength);
editorComponent.setDocument(getDocument());
return editorComponent;
private ComboBoxAutoCompleteDocument getDocument()
if(null == comboBoxAutoCompleteDocument)
comboBoxAutoCompleteDocument = new ComboBoxAutoCompleteDocument(
this.comboBox.getModel());
comboBoxAutoCompleteDocument.addDocumentListener(new ComboBoxDocumentListener());
return comboBoxAutoCompleteDocument;
private class ComboBoxDocumentListener implements DocumentListener {
public void insertUpdate(DocumentEvent e) {
if (updatingSelection) {
return;
SwingUtilities.invokeLater(new ScrollHandler());
public void removeUpdate(DocumentEvent e) {
public void changedUpdate(DocumentEvent e) {
private class ScrollHandler implements Runnable {
private String scrollToString;
private int scrollToRow;
private ScrollHandler() {
try {
int length = getDocument().getLength();
String text = getDocument().getText(0, length);
scrollToRow = -1;
scrollToString = (String) comboBox.getSelectedItem();
ComboBoxModel model = comboBox.getModel();
int size = model.getSize();
for (int i = 0; i < size; i++) {
String item = model.getElementAt(i).toString();
if (item.startsWith(text)) {
scrollToString = item;
break;
scrollToRow++;
} catch (BadLocationException ble) {
// TODO: handle
ble.printStackTrace();
public void run() {
final int matchCount = getDocument()
.getCurrentMatchCount();
updatingSelection = true;
comboBox.setSelectedItem(scrollToString);
if (comboBox.isDisplayable())
comboBox.showPopup();
updatingSelection = false;
if (scrollToRow != comboBox.getItemCount() - 1) {
ComboBoxAutoCompleteUI ui = (ComboBoxAutoCompleteUI) comboBox
.getUI();
JList popupList = ui.getPopupList();
int rowsToAdd = Math.min(comboBox.getMaximumRowCount(), comboBox
.getItemCount()
- scrollToRow - 1);
popupList.scrollRectToVisible(popupList.getCellBounds(
scrollToRow + rowsToAdd, scrollToRow + rowsToAdd));
if (matchCount > 0) {
((PITextField)getEditorComponent()).setSelectionStart(matchCount);
((PITextField)getEditorComponent()).setSelectionEnd(
getDocument().getLength());
public class ComboBoxAutoCompleteUI extends BasicComboBoxUI {
JList getPopupList() {
return popup.getList();
public class ComboBoxAutoCompleteDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
currentMatchCount = getLength() + str.length();
String currentText = getText(0, getLength());
//search the matching string here
offs = 0;
remove(0, getLength());
super.insertString(offs, str, a);
**************You need to create a custom CellEditor which will prevent these problems from occurring. The explanation behind the problem and source code for the new editor can be found at Thomas Bierhance's site http://www.orbital-computer.de/JComboBox/. The description of the problem and the workaround are at the bottom of the page.
-
Can't move objects after Pasting inside?
Using CS5.5,
I made a series of shapes like the attached one, and then I select the outer square shape and I choose to edit>paste inside the shape. I then group all of the pieces making up the shapes and I want to move it to a lower portion of my document, though when I do this the image does not come along with the shape and text.
What am I doing wrong? How should I be doing this?
Thanks.Remember: The Layers panel is your friend! The Paste Inside command creates a mask, which is a special type of group. To move your image independently from its mask—in other words, to reposition it within the square—go to the Layers panel and click on the Link symbol between the thumbnails to unlink the two components. Then click on the image thumbnail to select the image, go to the canvas and start moving the image around (using the Pointer tool). After that, you'll probably want to relink the image and the mask—again, using the Layers panel—so they can be moved around the canvas as a unit.
As I said, masks are just a special type of group. You can unmask an object at any time using the Modify > Ungroup command, which will restore the original components as separate, independent objects. You can then regroup those objects into a mask by selecting them and choosing Modify > Mask > Group as Mask. This is my preferred way to create a mask. It produces the same results as Paste Inside but doesn't require cutting an object beforehand; instead, you simply stack the objects, select them, and run the command, with the top object—e.g., the square—becoming the mask to the bottom object(s)—e.g., the image.
If you have other, non-masked elements involved—like your gradient block with text—and you want to move them all as a unit, you have several options. One option is include all the elements in a single layer and use the Layers panel to select all the elements in that layer—by clicking on the layer folder/name. Another option would be to simply drag-select all the elements on the canvas before moving them. And a third option would be to group all the elements by selecting them and choosing Modify > Group. This last option makes it easy to move all the elements together on the canvas but makes it more awkward to edit the elements individually (which might require ungrouping using Modify > Ungroup), so it's probably not the best for you.
Finally, since your gradient block with text appears to be contained within the square that you're using to mask the image, you could opt to include that gradient block as part of your mask group as well. To do this, you'd simply stack the image, the gradient block, the text, and then the square on top. Then select them all, and choose Modify > Mask > Group as Mask. The square would become the mask for all three of the selected objects beneath it. -
Hi,
I have a custom JList Renderer/Editor inside a JTable. Both the renderer and editor seem to be working fine, but if the List contains more data than will fit in the table cell, you can't see the rest of the data. I have a separate class for the renderer and the editor (both of which extend JList) and I have tried using the setAutoscrolls method and creating a JScrollPane in the constructor, neither of which seems to work. How can I put a scrollable JList as a cell in a JTable?Hi jhooie,
Will you please send me the working codes for creating the JList inside JTable. I am in urgent need of the help.
My email id is [email protected]
Thank you,
satheesh kumar -
JTable CellEditor does not reflect UI changes
When I change the application font size vi a UIManager property change and call updateComponentTreeUI the font changes for everything but my JTable CellEditors. Anybody have a suggested solution.
thanksThe font change property is set with a customizer and propagated to the entire app via updateComponentTreeUI. If I don't call updateComponentTreeUI I will not see the font change. Calling updateComponentTreeUI is the standard way to propagate property changes. It just doesn't seem to work for TableCellEditors. I need to do something in addition to updateComponentTreeUI so the TableCellEditors will reflect the font customization.
Steve -
Need help with "paste inside" feature, please!
Hello. I'm a former Freehand user who needs to know how to accomplish the "paste inside" task in Illustrator. I have a graphic which I want to show through only in the areas where the other graphic exists. I don't know how else to explain it. Help!
Hi JBinReno,
You may be referring to a clipping mask. Say I want this image of a city to be contained inside of this sheared rectangle.
Just select both the shape and the image and choose Object > Clipping Mask > Make.
To edit the image inside of the shape, simply double click on the graphic and you can edit "inside".
Is this the solution you're looking for?
Michael -
Hi,
I'd like to have my flash movie happen within the borders of a rounded rectangle. Is this possible in Flash? Is it easier to do with a combination of fireworks/ dreamweaver/ flash? I can do something like it in Fireworks using the "paste inside" command. Any help would be welcomeSorry, I'm still having problems. I have lots of little moving concentric circles in different folders. Does this matter? Flash Help says the mask only masks the layer below. Do I have to nest the layer folders?
-
Freehand MX paste inside problemto fix
Suddenly my Freehand MX paste inside cannot work. When I move the paste inside object, the picture inside don't move. Please help me.
Hi Perry,
The behavior of pasted-inside contents is controlled by the ‘Contents’ checkbox in the Transform panel.
Open the Transform panel
Click on the Move icon
Check the ‘Contents’ checkbox
The other transform actions like scale and rotate also allow you to control the behavior of contents. This is very handy, because sometimes you will want to move or scale the clipping path without moving the contents.
Judy Arndt -
CS4 How to Paste Inside like Freehand
How do you "Paste inside" like the old Freehand?
in clipping masks and groups, double click with the black arrow to get inside de mask/group, keep double clicking if there's more groups till you get to the desired position and paste. double click on an empty area to come back out of the mask/group.
-
I have a jcombobox inside jtable.now i want to access its items by keys only..without using F2 key.for example if i press 's' key..the whole combobox shud popup and value 'string' is selected.please help me regarding this.
I am not sure if I understand your question exactly. Your table's row height is not high enough so you may need to add a line of code like:
table.setRowHeight(table.getRowHeight() + 4);to solve your problem. -
How to "paste inside" like in Freehand
In Freehand you cut paste inside (cut a larger object and paste it inside of a smaller object). How do you do this in Illustator?
Thanks!function(){return A.apply(null,[this].concat($A(arguments)))}
It seems as if you haven't been an Illustrator user from the beginning, you're left in the dust.
Many who have been Illustrator users from the beginning have been left in the dust ever since--and just don't know it. ;-)
function(){return A.apply(null,[this].concat($A(arguments)))}
I really hope Adobe lets someone who is capable and cares to take the reigns of Freehand and resurrect the best drawing program ever!
Gag me.
Mainstream 2D vector drawing was set back a decade when FreeHand's competitive development was discontinued. But I'm not interested in returning to 10 years ago, even though in many important ways doing so would still leapfrog Illustrator's current functionality.
In other words, I'm not interested in a ressurrection of FreeHand per se. FreeHand had its problems, too, albeit far less than Illustrator. For example: Tell me how to, in FreeHand, call for a straight single-segment path in terms of length and angle. Tell me how to specify a movement in terms of direction and distance. That's pretty basic stuff, wouldn't you say?
The fact is, mainstream 2D vector drawing is stagnant and has been for many years. There is no mainstream 2D vector drawing progam I would call no-nonsense, full-featured, industrial-strength. There should be--and should have been long before now--but there isn't. The whole category is cheezy grade-school crap. This is largely due to Illustrator's market dominance. But the blame for "market dominance" falls to the addicted-to-mediocrity market, not to the vendor. If users don't demand better, they won't get it.
As for the clipping path thing: The largest problem (display of masked portion) has at long last been corrected. It took decades for this to occur. The stupid and backward behavior of stripping the clipping path of its appearance still needs to be reversed. But there are many similarly inefficient, inelegant, cumbersome and tedious behaviors in AI. Given AI's development history, how many decades will it take to correct them all?
I don't have that much time. A new-from-the-ground-up, truly industrial-strength (truly "professional") 2D drawing program is sorely needed to re-invigorate this important graphics segment.
JET -
No paste inside indicator to use for conToPath
Wondering why I couldnt snap to point a guideline to an
object when the objects appeared to be grouped. No paste inside
indicator so it must be a group. Turns out I had done a paste
inside before bringing the set of objects in, but why no indicator
to differentiate between grouped and paste inside in MX, we always
had the 4 pointed star in the middle before. This is most
confusing. Some programmer simply forgot to keep this most useful
feature. So why not correct that omission ?
I now need to convert to path the contents of the paste
inside, in FH9 I could double click the indicator , do a ConToPath,
deselect then export it as an eps, it has zero effect on this file,
having come from a much more complex file. With no 4 pointed icon
in the middle how can this be done in MX ? I dont wish to release
the paste insides layers from the source file into this files
layers, else 20 layers will become 220 ! I bet the styles list
would also grow with entries I dont want ! The clipping path is not
easily found so apart from the reasons mentioned, doing a cut
contents means trying to find it to deselect it for the paste
inside after the contopath.
I came across this omission when first trying MX upon its
appearance on the market and running away from what I saw, as my
work has lots of paste insides, now after this length of time how
become this useful star thingy is still not back with us ?
Envirographicsenvirographics wrote:
> You mention need for Subselect several times to get to
text, is this a
> question of going down through the depths as it were for
each text block, or
> will it do them all with a few sub selects.
In my experience, it should expose all the text in all
clipping paths, but I
don't work a great deal with text in clipping paths, so there
may be
exceptions I haven't encountered. If the text is part of
nested groups or is
attached to paths and then pasted inside a clipping path, a
single Subselect
won't select it in such a way that you can use 'Convert to
Paths'.
This is another difference between FHMX and FH9. In FH9 you
could select all
on a page and 'Convert to Paths'. In FHMX, text within groups
must first be
subselected.
I use F1 as my Subselect shortcut. This makes it easy to
toggle between
Superselect (Tilde key) and Subselect to get to the desired
level.
Judy Arndt -
JTextArea inside Jtable - Tab, Focus issues
I am facing the following problems with JTextArea inside Jtable Cell
1. blinking cursor not visible on the cell(0,0) first time the UI is shown, although it has the focus
2. blinking cursor not visible on the 5th column (JTextArea) when it receives the focus nor the characters are visible when i start typing. i have to manually double click to force the focus to shift to the cell.
3. focus does not shit out of the 5th column (JTextArea) after pressing the tab key or enter key once. i have to do that twice to force the focus out.
Following is the code which i have implemented. Please let me know what is being missed out to rectify the above problems.
Thanks.
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class test extends JFrame {
JTable table;
public test() {
table = new JTable(15, 5) {
public boolean isCellEditable(int row, int column) {
return column % 2 == 0;
// return true;
public void changeSelection(final int row, final int column,
boolean toggle, boolean extend) {
super.changeSelection(row, column, toggle, extend);
if (editCellAt(row, column)) {
getEditorComponent().requestFocusInWindow();
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
TextAreaRenderer textAreaRenderer = new TextAreaRenderer();
TextAreaEditor textEditor = new TextAreaEditor();
table.getColumnModel().getColumn(4).setCellRenderer(textAreaRenderer);
table.getColumnModel().getColumn(4).setCellEditor(textEditor);
JTextField tf = new JTextField();
tf.setBorder(BorderFactory.createEmptyBorder());
table.setDefaultEditor(Object.class, new DefaultCellEditor((tf)));
JScrollPane scrollPane = new JScrollPane(table);
DefaultCellEditor dce = (DefaultCellEditor) table
.getDefaultEditor(Object.class);
dce.setClickCountToStart(1);
getContentPane().add(scrollPane);
InputMap im = table
.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
// Have the enter key work the same as the tab key
KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
im.put(enter, im.get(tab));
// Disable the right arrow key
KeyStroke right = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0);
im.put(right, "none");
// Override the default tab behaviour
// Tab to the next editable cell. When no editable cells goto next cell.
final Action oldTabAction = table.getActionMap().get(im.get(tab));
Action tabAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
oldTabAction.actionPerformed(e);
JTable table = (JTable) e.getSource();
int rowCount = table.getRowCount();
int columnCount = table.getColumnCount();
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
while (!table.isCellEditable(row, column)) {
column += 1;
if (column == columnCount) {
column = 0;
row += 1;
if (row == rowCount) {
row = 0;
// Back to where we started, get out.
if (row == table.getSelectedRow()
&& column == table.getSelectedColumn()) {
break;
table.changeSelection(row, column, false, false);
table.getActionMap().put(im.get(tab), tabAction);
table.setSurrendersFocusOnKeystroke(true);
public static void main(String[] args) {
test frame = new test();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
import java.awt.Component;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class TextAreaRenderer extends JTextArea implements TableCellRenderer {
private final DefaultTableCellRenderer adaptee = new DefaultTableCellRenderer();
/** map from table to map of rows to map of column heights */
private final Map cellSizes = new HashMap();
public TextAreaRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
public Component getTableCellRendererComponent(//
JTable table, Object obj, boolean isSelected, boolean hasFocus,
int row, int column) {
// set the colours, etc. using the standard for that platform
adaptee.getTableCellRendererComponent(table, obj, isSelected, hasFocus,
row, column);
setForeground(adaptee.getForeground());
setBackground(adaptee.getBackground());
setBorder(adaptee.getBorder());
setFont(adaptee.getFont());
setText(adaptee.getText());
// This line was very important to get it working with JDK1.4
TableColumnModel columnModel = table.getColumnModel();
setSize(columnModel.getColumn(column).getWidth(), 100000);
int height_wanted = (int) getPreferredSize().getHeight();
addSize(table, row, column, height_wanted);
height_wanted = findTotalMaximumRowSize(table, row);
if (height_wanted != table.getRowHeight(row)) {
table.setRowHeight(row, height_wanted);
return this;
private void addSize(JTable table, int row, int column, int height) {
Map rows = (Map) cellSizes.get(table);
if (rows == null) {
cellSizes.put(table, rows = new HashMap());
Map rowheights = (Map) rows.get(new Integer(row));
if (rowheights == null) {
rows.put(new Integer(row), rowheights = new HashMap());
rowheights.put(new Integer(column), new Integer(height));
* Look through all columns and get the renderer. If it is also a
* TextAreaRenderer, we look at the maximum height in its hash table for
* this row.
private int findTotalMaximumRowSize(JTable table, int row) {
int maximum_height = 0;
Enumeration columns = table.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn tc = (TableColumn) columns.nextElement();
TableCellRenderer cellRenderer = tc.getCellRenderer();
if (cellRenderer instanceof TextAreaRenderer) {
TextAreaRenderer tar = (TextAreaRenderer) cellRenderer;
maximum_height = Math.max(maximum_height, tar
.findMaximumRowSize(table, row));
return maximum_height;
private int findMaximumRowSize(JTable table, int row) {
Map rows = (Map) cellSizes.get(table);
if (rows == null)
return 0;
Map rowheights = (Map) rows.get(new Integer(row));
if (rowheights == null)
return 0;
int maximum_height = 0;
for (Iterator it = rowheights.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
int cellHeight = ((Integer) entry.getValue()).intValue();
maximum_height = Math.max(maximum_height, cellHeight);
return maximum_height;
import java.awt.KeyboardFocusManager;
import java.awt.event.FocusEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import java.util.Set;
import javax.swing.DefaultCellEditor;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class TextAreaEditor extends DefaultCellEditor {
public TextAreaEditor() {
super(new JTextField());
final JTextArea textArea = new JTextArea();
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBorder(null);
Set forwardTraversalKeys = new HashSet();
forwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
textArea.setFocusTraversalKeys(
KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
forwardTraversalKeys);
Set backwardTraversalKeys = new HashSet();
backwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,
InputEvent.SHIFT_MASK));
textArea.setFocusTraversalKeys(
KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
backwardTraversalKeys);
scrollPane.getVerticalScrollBar().setFocusable(false);
scrollPane.getVerticalScrollBar().setFocusable(false);
editorComponent = scrollPane;
delegate = new DefaultCellEditor.EditorDelegate() {
public void setValue(Object value) {
textArea.setText((value != null) ? value.toString() : "");
public Object getCellEditorValue() {
return textArea.getText();
public void lostFocus() {
stopCellEditing();
--------------------------------------------I am facing the following problems with JTextArea inside Jtable Cell
1. blinking cursor not visible on the cell(0,0) first time the UI is shown, although it has the focus
2. blinking cursor not visible on the 5th column (JTextArea) when it receives the focus nor the characters are visible when i start typing. i have to manually double click to force the focus to shift to the cell.
3. focus does not shit out of the 5th column (JTextArea) after pressing the tab key or enter key once. i have to do that twice to force the focus out.
Following is the code which i have implemented. Please let me know what is being missed out to rectify the above problems.
Thanks.
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class test extends JFrame {
JTable table;
public test() {
table = new JTable(15, 5) {
public boolean isCellEditable(int row, int column) {
return column % 2 == 0;
// return true;
public void changeSelection(final int row, final int column,
boolean toggle, boolean extend) {
super.changeSelection(row, column, toggle, extend);
if (editCellAt(row, column)) {
getEditorComponent().requestFocusInWindow();
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
TextAreaRenderer textAreaRenderer = new TextAreaRenderer();
TextAreaEditor textEditor = new TextAreaEditor();
table.getColumnModel().getColumn(4).setCellRenderer(textAreaRenderer);
table.getColumnModel().getColumn(4).setCellEditor(textEditor);
JTextField tf = new JTextField();
tf.setBorder(BorderFactory.createEmptyBorder());
table.setDefaultEditor(Object.class, new DefaultCellEditor((tf)));
JScrollPane scrollPane = new JScrollPane(table);
DefaultCellEditor dce = (DefaultCellEditor) table
.getDefaultEditor(Object.class);
dce.setClickCountToStart(1);
getContentPane().add(scrollPane);
InputMap im = table
.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
// Have the enter key work the same as the tab key
KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
im.put(enter, im.get(tab));
// Disable the right arrow key
KeyStroke right = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0);
im.put(right, "none");
// Override the default tab behaviour
// Tab to the next editable cell. When no editable cells goto next cell.
final Action oldTabAction = table.getActionMap().get(im.get(tab));
Action tabAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
oldTabAction.actionPerformed(e);
JTable table = (JTable) e.getSource();
int rowCount = table.getRowCount();
int columnCount = table.getColumnCount();
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
while (!table.isCellEditable(row, column)) {
column += 1;
if (column == columnCount) {
column = 0;
row += 1;
if (row == rowCount) {
row = 0;
// Back to where we started, get out.
if (row == table.getSelectedRow()
&& column == table.getSelectedColumn()) {
break;
table.changeSelection(row, column, false, false);
table.getActionMap().put(im.get(tab), tabAction);
table.setSurrendersFocusOnKeystroke(true);
public static void main(String[] args) {
test frame = new test();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
import java.awt.Component;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class TextAreaRenderer extends JTextArea implements TableCellRenderer {
private final DefaultTableCellRenderer adaptee = new DefaultTableCellRenderer();
/** map from table to map of rows to map of column heights */
private final Map cellSizes = new HashMap();
public TextAreaRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
public Component getTableCellRendererComponent(//
JTable table, Object obj, boolean isSelected, boolean hasFocus,
int row, int column) {
// set the colours, etc. using the standard for that platform
adaptee.getTableCellRendererComponent(table, obj, isSelected, hasFocus,
row, column);
setForeground(adaptee.getForeground());
setBackground(adaptee.getBackground());
setBorder(adaptee.getBorder());
setFont(adaptee.getFont());
setText(adaptee.getText());
// This line was very important to get it working with JDK1.4
TableColumnModel columnModel = table.getColumnModel();
setSize(columnModel.getColumn(column).getWidth(), 100000);
int height_wanted = (int) getPreferredSize().getHeight();
addSize(table, row, column, height_wanted);
height_wanted = findTotalMaximumRowSize(table, row);
if (height_wanted != table.getRowHeight(row)) {
table.setRowHeight(row, height_wanted);
return this;
private void addSize(JTable table, int row, int column, int height) {
Map rows = (Map) cellSizes.get(table);
if (rows == null) {
cellSizes.put(table, rows = new HashMap());
Map rowheights = (Map) rows.get(new Integer(row));
if (rowheights == null) {
rows.put(new Integer(row), rowheights = new HashMap());
rowheights.put(new Integer(column), new Integer(height));
* Look through all columns and get the renderer. If it is also a
* TextAreaRenderer, we look at the maximum height in its hash table for
* this row.
private int findTotalMaximumRowSize(JTable table, int row) {
int maximum_height = 0;
Enumeration columns = table.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn tc = (TableColumn) columns.nextElement();
TableCellRenderer cellRenderer = tc.getCellRenderer();
if (cellRenderer instanceof TextAreaRenderer) {
TextAreaRenderer tar = (TextAreaRenderer) cellRenderer;
maximum_height = Math.max(maximum_height, tar
.findMaximumRowSize(table, row));
return maximum_height;
private int findMaximumRowSize(JTable table, int row) {
Map rows = (Map) cellSizes.get(table);
if (rows == null)
return 0;
Map rowheights = (Map) rows.get(new Integer(row));
if (rowheights == null)
return 0;
int maximum_height = 0;
for (Iterator it = rowheights.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
int cellHeight = ((Integer) entry.getValue()).intValue();
maximum_height = Math.max(maximum_height, cellHeight);
return maximum_height;
import java.awt.KeyboardFocusManager;
import java.awt.event.FocusEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import java.util.Set;
import javax.swing.DefaultCellEditor;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class TextAreaEditor extends DefaultCellEditor {
public TextAreaEditor() {
super(new JTextField());
final JTextArea textArea = new JTextArea();
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBorder(null);
Set forwardTraversalKeys = new HashSet();
forwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
textArea.setFocusTraversalKeys(
KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
forwardTraversalKeys);
Set backwardTraversalKeys = new HashSet();
backwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,
InputEvent.SHIFT_MASK));
textArea.setFocusTraversalKeys(
KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
backwardTraversalKeys);
scrollPane.getVerticalScrollBar().setFocusable(false);
scrollPane.getVerticalScrollBar().setFocusable(false);
editorComponent = scrollPane;
delegate = new DefaultCellEditor.EditorDelegate() {
public void setValue(Object value) {
textArea.setText((value != null) ? value.toString() : "");
public Object getCellEditorValue() {
return textArea.getText();
public void lostFocus() {
stopCellEditing();
-------------------------------------------- -
Reposting - JTextArea inside Jtable - Tab, Focus issues
Sorry for reposting this again...I didn't format the code in my previous post.
I am facing the following problems with JTextArea inside Jtable Cell
1. blinking cursor not visible on the cell(0,0) first time the UI is shown, although it has the focus
2. blinking cursor not visible on the 5th column (JTextArea) when it receives the focus nor the characters are visible when i start typing. i have to manually double click to force the focus to shift to the cell.
3. focus does not shit out of the 5th column (JTextArea) after pressing the tab key or enter key once. i have to do that twice to force the focus out.
Following is the code which i have implemented. Please let me know what is being missed out to rectify the above problems.
Thanks.
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class test extends JFrame {
JTable table;
public test() {
table = new JTable(15, 5) {
public boolean isCellEditable(int row, int column) {
return column % 2 == 0;
// return true;
public void changeSelection(final int row, final int column,
boolean toggle, boolean extend) {
super.changeSelection(row, column, toggle, extend);
if (editCellAt(row, column)) {
getEditorComponent().requestFocusInWindow();
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
TextAreaRenderer textAreaRenderer = new TextAreaRenderer();
TextAreaEditor textEditor = new TextAreaEditor();
table.getColumnModel().getColumn(4).setCellRenderer(textAreaRenderer);
table.getColumnModel().getColumn(4).setCellEditor(textEditor);
JTextField tf = new JTextField();
tf.setBorder(BorderFactory.createEmptyBorder());
table.setDefaultEditor(Object.class, new DefaultCellEditor((tf)));
JScrollPane scrollPane = new JScrollPane(table);
DefaultCellEditor dce = (DefaultCellEditor) table
.getDefaultEditor(Object.class);
dce.setClickCountToStart(1);
getContentPane().add(scrollPane);
InputMap im = table
.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
// Have the enter key work the same as the tab key
KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
im.put(enter, im.get(tab));
// Disable the right arrow key
KeyStroke right = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0);
im.put(right, "none");
// Override the default tab behaviour
// Tab to the next editable cell. When no editable cells goto next cell.
final Action oldTabAction = table.getActionMap().get(im.get(tab));
Action tabAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
oldTabAction.actionPerformed(e);
JTable table = (JTable) e.getSource();
int rowCount = table.getRowCount();
int columnCount = table.getColumnCount();
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
while (!table.isCellEditable(row, column)) {
column += 1;
if (column == columnCount) {
column = 0;
row += 1;
if (row == rowCount) {
row = 0;
// Back to where we started, get out.
if (row == table.getSelectedRow()
&& column == table.getSelectedColumn()) {
break;
table.changeSelection(row, column, false, false);
table.getActionMap().put(im.get(tab), tabAction);
table.setSurrendersFocusOnKeystroke(true);
public static void main(String[] args) {
test frame = new test();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
import java.awt.Component;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class TextAreaRenderer extends JTextArea implements TableCellRenderer {
private final DefaultTableCellRenderer adaptee = new DefaultTableCellRenderer();
/** map from table to map of rows to map of column heights */
private final Map cellSizes = new HashMap();
public TextAreaRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
public Component getTableCellRendererComponent(//
JTable table, Object obj, boolean isSelected, boolean hasFocus,
int row, int column) {
// set the colours, etc. using the standard for that platform
adaptee.getTableCellRendererComponent(table, obj, isSelected, hasFocus,
row, column);
setForeground(adaptee.getForeground());
setBackground(adaptee.getBackground());
setBorder(adaptee.getBorder());
setFont(adaptee.getFont());
setText(adaptee.getText());
// This line was very important to get it working with JDK1.4
TableColumnModel columnModel = table.getColumnModel();
setSize(columnModel.getColumn(column).getWidth(), 100000);
int height_wanted = (int) getPreferredSize().getHeight();
addSize(table, row, column, height_wanted);
height_wanted = findTotalMaximumRowSize(table, row);
if (height_wanted != table.getRowHeight(row)) {
table.setRowHeight(row, height_wanted);
return this;
private void addSize(JTable table, int row, int column, int height) {
Map rows = (Map) cellSizes.get(table);
if (rows == null) {
cellSizes.put(table, rows = new HashMap());
Map rowheights = (Map) rows.get(new Integer(row));
if (rowheights == null) {
rows.put(new Integer(row), rowheights = new HashMap());
rowheights.put(new Integer(column), new Integer(height));
* Look through all columns and get the renderer. If it is also a
* TextAreaRenderer, we look at the maximum height in its hash table for
* this row.
private int findTotalMaximumRowSize(JTable table, int row) {
int maximum_height = 0;
Enumeration columns = table.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn tc = (TableColumn) columns.nextElement();
TableCellRenderer cellRenderer = tc.getCellRenderer();
if (cellRenderer instanceof TextAreaRenderer) {
TextAreaRenderer tar = (TextAreaRenderer) cellRenderer;
maximum_height = Math.max(maximum_height, tar
.findMaximumRowSize(table, row));
return maximum_height;
private int findMaximumRowSize(JTable table, int row) {
Map rows = (Map) cellSizes.get(table);
if (rows == null)
return 0;
Map rowheights = (Map) rows.get(new Integer(row));
if (rowheights == null)
return 0;
int maximum_height = 0;
for (Iterator it = rowheights.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
int cellHeight = ((Integer) entry.getValue()).intValue();
maximum_height = Math.max(maximum_height, cellHeight);
return maximum_height;
import java.awt.KeyboardFocusManager;
import java.awt.event.FocusEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import java.util.Set;
import javax.swing.DefaultCellEditor;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class TextAreaEditor extends DefaultCellEditor {
public TextAreaEditor() {
super(new JTextField());
final JTextArea textArea = new JTextArea();
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBorder(null);
Set forwardTraversalKeys = new HashSet();
forwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
textArea.setFocusTraversalKeys(
KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
forwardTraversalKeys);
Set backwardTraversalKeys = new HashSet();
backwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,
InputEvent.SHIFT_MASK));
textArea.setFocusTraversalKeys(
KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
backwardTraversalKeys);
scrollPane.getVerticalScrollBar().setFocusable(false);
scrollPane.getVerticalScrollBar().setFocusable(false);
editorComponent = scrollPane;
delegate = new DefaultCellEditor.EditorDelegate() {
public void setValue(Object value) {
textArea.setText((value != null) ? value.toString() : "");
public Object getCellEditorValue() {
return textArea.getText();
public void lostFocus() {
stopCellEditing();
}Sorry for reposting this again...I didn't format the code in my previous post.
I am facing the following problems with JTextArea inside Jtable Cell
1. blinking cursor not visible on the cell(0,0) first time the UI is shown, although it has the focus
2. blinking cursor not visible on the 5th column (JTextArea) when it receives the focus nor the characters are visible when i start typing. i have to manually double click to force the focus to shift to the cell.
3. focus does not shit out of the 5th column (JTextArea) after pressing the tab key or enter key once. i have to do that twice to force the focus out.
Following is the code which i have implemented. Please let me know what is being missed out to rectify the above problems.
Thanks.
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class test extends JFrame {
JTable table;
public test() {
table = new JTable(15, 5) {
public boolean isCellEditable(int row, int column) {
return column % 2 == 0;
// return true;
public void changeSelection(final int row, final int column,
boolean toggle, boolean extend) {
super.changeSelection(row, column, toggle, extend);
if (editCellAt(row, column)) {
getEditorComponent().requestFocusInWindow();
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
TextAreaRenderer textAreaRenderer = new TextAreaRenderer();
TextAreaEditor textEditor = new TextAreaEditor();
table.getColumnModel().getColumn(4).setCellRenderer(textAreaRenderer);
table.getColumnModel().getColumn(4).setCellEditor(textEditor);
JTextField tf = new JTextField();
tf.setBorder(BorderFactory.createEmptyBorder());
table.setDefaultEditor(Object.class, new DefaultCellEditor((tf)));
JScrollPane scrollPane = new JScrollPane(table);
DefaultCellEditor dce = (DefaultCellEditor) table
.getDefaultEditor(Object.class);
dce.setClickCountToStart(1);
getContentPane().add(scrollPane);
InputMap im = table
.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
// Have the enter key work the same as the tab key
KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
im.put(enter, im.get(tab));
// Disable the right arrow key
KeyStroke right = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0);
im.put(right, "none");
// Override the default tab behaviour
// Tab to the next editable cell. When no editable cells goto next cell.
final Action oldTabAction = table.getActionMap().get(im.get(tab));
Action tabAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
oldTabAction.actionPerformed(e);
JTable table = (JTable) e.getSource();
int rowCount = table.getRowCount();
int columnCount = table.getColumnCount();
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
while (!table.isCellEditable(row, column)) {
column += 1;
if (column == columnCount) {
column = 0;
row += 1;
if (row == rowCount) {
row = 0;
// Back to where we started, get out.
if (row == table.getSelectedRow()
&& column == table.getSelectedColumn()) {
break;
table.changeSelection(row, column, false, false);
table.getActionMap().put(im.get(tab), tabAction);
table.setSurrendersFocusOnKeystroke(true);
public static void main(String[] args) {
test frame = new test();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
import java.awt.Component;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class TextAreaRenderer extends JTextArea implements TableCellRenderer {
private final DefaultTableCellRenderer adaptee = new DefaultTableCellRenderer();
/** map from table to map of rows to map of column heights */
private final Map cellSizes = new HashMap();
public TextAreaRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
public Component getTableCellRendererComponent(//
JTable table, Object obj, boolean isSelected, boolean hasFocus,
int row, int column) {
// set the colours, etc. using the standard for that platform
adaptee.getTableCellRendererComponent(table, obj, isSelected, hasFocus,
row, column);
setForeground(adaptee.getForeground());
setBackground(adaptee.getBackground());
setBorder(adaptee.getBorder());
setFont(adaptee.getFont());
setText(adaptee.getText());
// This line was very important to get it working with JDK1.4
TableColumnModel columnModel = table.getColumnModel();
setSize(columnModel.getColumn(column).getWidth(), 100000);
int height_wanted = (int) getPreferredSize().getHeight();
addSize(table, row, column, height_wanted);
height_wanted = findTotalMaximumRowSize(table, row);
if (height_wanted != table.getRowHeight(row)) {
table.setRowHeight(row, height_wanted);
return this;
private void addSize(JTable table, int row, int column, int height) {
Map rows = (Map) cellSizes.get(table);
if (rows == null) {
cellSizes.put(table, rows = new HashMap());
Map rowheights = (Map) rows.get(new Integer(row));
if (rowheights == null) {
rows.put(new Integer(row), rowheights = new HashMap());
rowheights.put(new Integer(column), new Integer(height));
* Look through all columns and get the renderer. If it is also a
* TextAreaRenderer, we look at the maximum height in its hash table for
* this row.
private int findTotalMaximumRowSize(JTable table, int row) {
int maximum_height = 0;
Enumeration columns = table.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn tc = (TableColumn) columns.nextElement();
TableCellRenderer cellRenderer = tc.getCellRenderer();
if (cellRenderer instanceof TextAreaRenderer) {
TextAreaRenderer tar = (TextAreaRenderer) cellRenderer;
maximum_height = Math.max(maximum_height, tar
.findMaximumRowSize(table, row));
return maximum_height;
private int findMaximumRowSize(JTable table, int row) {
Map rows = (Map) cellSizes.get(table);
if (rows == null)
return 0;
Map rowheights = (Map) rows.get(new Integer(row));
if (rowheights == null)
return 0;
int maximum_height = 0;
for (Iterator it = rowheights.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
int cellHeight = ((Integer) entry.getValue()).intValue();
maximum_height = Math.max(maximum_height, cellHeight);
return maximum_height;
import java.awt.KeyboardFocusManager;
import java.awt.event.FocusEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import java.util.Set;
import javax.swing.DefaultCellEditor;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class TextAreaEditor extends DefaultCellEditor {
public TextAreaEditor() {
super(new JTextField());
final JTextArea textArea = new JTextArea();
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBorder(null);
Set forwardTraversalKeys = new HashSet();
forwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
textArea.setFocusTraversalKeys(
KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
forwardTraversalKeys);
Set backwardTraversalKeys = new HashSet();
backwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,
InputEvent.SHIFT_MASK));
textArea.setFocusTraversalKeys(
KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
backwardTraversalKeys);
scrollPane.getVerticalScrollBar().setFocusable(false);
scrollPane.getVerticalScrollBar().setFocusable(false);
editorComponent = scrollPane;
delegate = new DefaultCellEditor.EditorDelegate() {
public void setValue(Object value) {
textArea.setText((value != null) ? value.toString() : "");
public Object getCellEditorValue() {
return textArea.getText();
public void lostFocus() {
stopCellEditing();
} -
What is Illustrator's equivalent to Freehands "Paste Inside" feature?
I'm really new to Illustrator, having come over from Freehand MX (which no longer works on my OSX software), so I'm a little lost. Can anyone tell me if Illustrator has a feature that is the equivalent of Freehand's "Paste Inside" feature? I'm desperate! Thanks!
If you have CS5, it has a 'draw inside' feature, this is just automaticially making a mask from the object. (the paint tool and text works but with shapes you need to copy and paste them inside, which is what you're looking for.)
Hope you got your answer.
Maybe you are looking for
-
'''Moving Firefox URL Bookmarks from one Mac to another''' How do I drag-and-drop my web 'Bookmarks Toolbar' folder from one Mac to an external USB zip drive. Unable to network both Macs and use the migration feature. Must do this manually. Thanks!
-
Linked Image file path cleanup
Regex frustrates me, especially with trying to work with slashes... I just haven't got it yet. I'm looking just for a code snippet to thrown in another clean up script I use. To standardize to UNC, as some templates were created on workstaions (also
-
Accounting document created- not seen doc flow..
Hi, i have an issue with respect to accounting document. After saving the billing, accounting document is generated. When i see the document flow, Invoice is still open, accounting document is not seen in the flow. When i double check with customer
-
Transferring iPod photos to iBook
I had my friend upload a couple of pictures on my iPod at his house. I wanted to know how to get those pictures onto my computer, if possible. Thanks in advance to anyone that can help!
-
Download or save Text file in specified path from WEB UI
Hi Experts I am handling a requirment where user borwses the path and set on WEB UI and press on the Button to dowload the content with text file format in specified path(local PC). I tried to use CL_CRM_FRONTEND_SERVICES=>GUI_DOWNLOAD method to down