Cell Def'n editor

When I create 2 structures and created a cell editor. 
I want to use one cell in the calculation.  But I want to display the rows in detail its just giving me only one row.   What if i have 2 char. in the rows structures.  how do i display them both in detail?  can any one help me?

Hi,
Yes, you can use the cell editor when you have two structures in a query.
In this case you have a rigid sequence of rows and columns in the output.
For example, in a one selection in a structure you have these chars: material and plant.
This will result in ONE ROW in the output. You cannot expect that this selection will be expanded (multiple rows) by all materials or plants automatically.
However, you may have an infoobject in free chars area of the query and drill down by this IO (if it is located in the particular structure selection).
But, the result of this operation might be determined only in a run-time environment.
Hence, the query designer (and the cell editor) cannot predict the drill down effect and you cannot create formulas for not-determined before the query execution result.
Best regards,
Eugene

Similar Messages

  • Can I set autoSubmit="true" and partial trigger in Application Def. Editor?

    Hello Expert,
    Can I set autoSubmit="true" and partial trigger or other properties through JHeadstart Application Definition Editor?
    If I have changed the layout or add item though the Def. Editor, I have to regenerate and the manually modification
    on jsff will be overridden. Any suggestion to solve this problem?
    So far I know the page generation can be disabled, however, what if I have to regenerate the definition but want
    to remain the manual modification in Jsff?
    Thanks
    Neon

    Neon,
    You can use the "Depends on Item" property in the application definition editor. You can set this property on an item, or an item region, region container.
    The items that is specified as depends on item, will get autoSubmit="true" and the dependent items of region will get partial triggers that listen to the depends on item.
    Even if you need settings you can't generate, there is no need to switch off generation of the entire page.
    We never do this, we always specify custom templates for the bits and pieces of the page that we want to customize.
    Have you read section 4.7 "Customizing Using Generator Templates" in JHeadstart Developer's Guide?
    Steven Davelaar,
    JHeadstart team.

  • JTable - help with custom cell renderers and editors

    I've got myself into a bit of a mess with cell renderers and editors.
    I've got a custom component that wants displaying in a column and then hand over all functionality to this component when you start editing it.
    Now how I went out about this was to create a custom cell renderer that extends this component and implements TableCellRenderer.
    I then created a table cell editor that extends AbstractCellEditor and implements TableCellEditor and this cell editor creates a new component when it's initialized. I then use setCellEditor(new MyCellEditor()) on the column and setCellRenderer(new MyCellRenderer()).
    This works slightly but I'm wondering how this is all implemented.
    When I set the cell editor on it's own it seems to be sharing a reference to the single component that's being used which means that if you edit one cell all the cells get changed to the new value.
    Thanks for the help,
    Alex

    only a few forums are actually browsedAnd theSwing forum is one of the most active. Did you search it for editiing examples? I've seen many editing examples posted in a SSCCE format.
    SSCEE is also impossible as the functionality spans over about 10 classes We did not ask for your application, we asked for a SSCCE. The whole point of a SSCCE is to simplify the 10 classes into a single class and maybe an inner class for the editor to make sure you haven't made a silly mistake that is hidden because of the complexity of your real application.

  • JTable custom cell renderer and editor breaks row sorting

    Hello Forum,
    I have a JTable on which I set setAutoCreateRowSorter(true); I then hook up a custom cell editor and renderer for the Date class.
    this.tblLeden.setDefaultRenderer(Date.class, new DateCellEditor());
    this.tblLeden.setDefaultEditor(Date.class, new DateCellEditor());
    The sorting for that particular row then breaks, it works fine for every other row. How do I fix this? Just directions where to look would be great too.
    Here is my code for the renderer/editor:
    (btw this is probably not the best way to do this so any suggestions for optimizing are great too)
    import java.awt.Component;
    import java.util.Date;
    import java.util.EventObject;
    import java.util.HashMap;
    import java.util.Vector;
    import javax.swing.JTable;
    import javax.swing.event.CellEditorListener;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;
    import com.toedter.calendar.JDateChooser;
    public class DateCellEditor extends JDateChooser implements TableCellRenderer, TableCellEditor
      private static final long serialVersionUID = -5073758499524392257L;
      private final Vector<CellEditorListener> listeners = new Vector<CellEditorListener>();
      // oops.. lingering objects problem when rows are deleted..
      private final HashMap<Integer, JDateChooser> components = new HashMap<Integer, JDateChooser>();
      @Override
      public final Component getTableCellRendererComponent(final JTable table,
          final Object value, final boolean isSelected, final boolean hasFocus,
          final int row, final int col)
        JDateChooser temp = this.components.get(Integer.valueOf(row));
        if (temp == null)
          temp = new JDateChooser();
          this.components.put(Integer.valueOf(row), temp);
        temp.setDate((Date) value);
        return temp;
      @Override
      public final Component getTableCellEditorComponent(final JTable table,
          final Object value, final boolean isSelected, final int row,
          final int column)
        JDateChooser temp = this.components.get(Integer.valueOf(row));
        if (temp == null)
          temp = new JDateChooser();
          this.components.put(Integer.valueOf(row), temp);
        temp.setDate((Date) value);
        return temp;
      @Override
      public final void addCellEditorListener(final CellEditorListener arg0)
        this.listeners.addElement(arg0);
      @Override
      public final void removeCellEditorListener(final CellEditorListener arg0)
        this.listeners.removeElement(arg0);
      @Override
      public final void cancelCellEditing()
        return;
      @Override
      public final Object getCellEditorValue()
        return null;
      @Override
      public final boolean isCellEditable(final EventObject arg0)
        return true;
      @Override
      public final boolean shouldSelectCell(final EventObject arg0)
        return true;
      @Override
      public final boolean stopCellEditing()
        return true;
    }

    This seems to work:
    import java.awt.Component;
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
    import java.sql.Date;
    import java.util.EventObject;
    import java.util.HashMap;
    import java.util.Vector;
    import javax.swing.JTable;
    import javax.swing.event.CellEditorListener;
    import javax.swing.event.ChangeEvent;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;
    import com.toedter.calendar.JDateChooser;
    public class DateCellEditor implements TableCellRenderer, TableCellEditor, PropertyChangeListener
      private static final long serialVersionUID = -5073758499524392257L;
      private final Vector<CellEditorListener> listeners = new Vector<CellEditorListener>();
      // oops.. lingering objects problem when rows are deleted..
      private final HashMap<Integer, JDateChooser> components = new HashMap<Integer, JDateChooser>();
      private Date storedValue = null;
      @Override
      public final Component getTableCellRendererComponent(final JTable table,
          final Object value, final boolean isSelected, final boolean hasFocus,
          final int row, final int col)
        JDateChooser temp = this.components.get(Integer.valueOf(row));
        if (temp == null)
          temp = new JDateChooser();
          temp.addPropertyChangeListener("date", this);
          this.components.put(Integer.valueOf(row), temp);
        temp.setDate((Date) value);
        return temp;
      @Override
      public final Component getTableCellEditorComponent(final JTable table,
          final Object value, final boolean isSelected, final int row,
          final int column)
        JDateChooser temp = this.components.get(Integer.valueOf(row));
        if (temp == null)
          temp = new JDateChooser();
          temp.addPropertyChangeListener("date", this);
          this.components.put(Integer.valueOf(row), temp);
        temp.setDate((Date) value);
        return temp;
      @Override
      public final void addCellEditorListener(final CellEditorListener arg0)
        this.listeners.addElement(arg0);
      @Override
      public final void removeCellEditorListener(final CellEditorListener arg0)
        this.listeners.removeElement(arg0);
      @Override
      public final void cancelCellEditing()
        return;
      @Override
      public final Object getCellEditorValue()
        return this.storedValue;
      @Override
      public final boolean isCellEditable(final EventObject arg0)
        return true;
      @Override
      public final boolean shouldSelectCell(final EventObject arg0)
        return true;
      @Override
      public final boolean stopCellEditing()
        return true;
      @Override
      public final void propertyChange(final PropertyChangeEvent arg0)
        if (((JDateChooser) arg0.getSource()).getDate() == null)
          return;
        this.storedValue = new Date(((JDateChooser) arg0.getSource()).getDate().getTime());
        ChangeEvent event = new ChangeEvent(arg0.getSource());
        for (int i = 0; i < this.listeners.size(); i++)
          this.listeners.elementAt(i).editingStopped(event);
    }

  • JTable Cell grays out when I click the cell below (JList editor & renderer)

    Click on any cell, then click on the cell immediately below.. and the first cell u clicked on goes gray... After repaints and stuff, it stills stays gray
    * TimetableCellGui.java
    * Created on April 12, 2007, 7:21 PM
    * To change this template, choose Tools | Template Manager
    * and open the template in the editor.
    package timetable.gui;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Font;
    import java.util.ArrayList;
    import java.util.EventObject;
    import javax.swing.DefaultListModel;
    import javax.swing.JList;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.event.CellEditorListener;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;
    * @author jay
    public class TimetableCellGui extends JList implements TableCellRenderer, TableCellEditor {
         * Creates a new instance of TimetableCellGui
        public TimetableCellGui() {
            this.setFont(new Font("Nice",Font.PLAIN,10));
            this.setForeground(new Color(150,150,250));
        private static String courseFilter = "";
        private static String roomFilter = "";
        private static boolean filterCourse = false;
        private static boolean filterRoom = false;
        public static String getCourseFilter() {
            return courseFilter;
        public static String getRoomFilter() {
            return roomFilter;
        public static boolean isFilterCourse() {
            return filterCourse;
        public static boolean isFilterRoom() {
            return filterRoom;
        public static void setCourseFilter(String c) {
            courseFilter = c;
        public static void setFilterCourse(boolean f) {
            filterCourse = f;
        public static void setFilterRoom(boolean filter) {
            filterRoom = filter;
        public static void setRoomFilter(String r) {
            roomFilter = r;
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            if(value == null) {
                return null;
            } else {
                DefaultListModel model = new DefaultListModel();
                String addition = "some addition";
             model.add(addition);          
                model.add(addition);                
                this.setModel(model);
                return new JScrollPane(this);
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            if(value == null) {
                return null;
            } else {
                DefaultListModel model = new DefaultListModel();
                String addition = "some addition";
             model.add(addition);                          
                this.setModel(model);
                return new JScrollPane(this);
        public Object getCellEditorValue() {
            return "helllo";
        public boolean isCellEditable(EventObject anEvent) {
            return true;
        public boolean shouldSelectCell(EventObject anEvent) {
            return true;
        public boolean stopCellEditing() {
            return true;
        public void cancelCellEditing() {
            super.clearSelection();
        public void addCellEditorListener(CellEditorListener l) {
        public void removeCellEditorListener(CellEditorListener l) {
    }

    I'm doing up a timetable. And so far, I've found that is the best way to display it. However if you can think of a better way, I'm willing to listen, but if u havn't gotten a better suggestion... Plz try and help me tweak this one to work... Because I've done quite a bit of work on this one so far

  • Cell Combo,Checkbox editor

    Hi,
    How can I define different widget for different cells. For example
    column 1 - Row 1 Text
    column 1 - Row 2 Combobox
    column 1 - Row 3 Checkbox
    What is the solution for this. Is there any example.
    Thankyou

    Yes. I realized it after sent mail. But I cannot find a solution. My code is below.
    package view.nattablebase.editable;
    import java.io.Serializable;
    import java.util.List;
    import org.eclipse.nebula.widgets.nattable.data.IRowDataProvider;
    import org.eclipse.nebula.widgets.nattable.layer.ILayer;
    import org.eclipse.nebula.widgets.nattable.layer.LabelStack;
    import org.eclipse.nebula.widgets.nattable.layer.cell.AbstractOverrider;
    public class CellIndexOverrideLabelAccumulator<T> extends AbstractOverrider {
    private ILayer dataProvider;
    public CellIndexOverrideLabelAccumulator(ILayer dataProvider) {
    this.dataProvider = dataProvider;
    @Override
    public void accumulateConfigLabels(LabelStack configLabels,
    int columnPosition, int rowPosition) {
    List<String> cellLabels = getConfigLabels(
    rowPosition,
    columnPosition);
    if (cellLabels == null) {
    return;
    for (String configLabel : cellLabels) {
    configLabels.addLabel(configLabel);
    protected List<String> getConfigLabels(Integer row, int col) {
    CellIndexOverrideKey key = new CellIndexOverrideKey(row, col);
    return getOverrides(key);
    public void registerOverride(Integer row, int col, String configLabel) {
    registerOverrides(new CellIndexOverrideKey(row, col), configLabel);
    class CellIndexOverrideKey implements Serializable {
    private static final long serialVersionUID = 1L;
    Integer cellIndex;
    int col;
    CellIndexOverrideKey(Integer cellIndex, int col) {
    this.cellIndex = cellIndex;
    this.col = col;
    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    CellIndexOverrideKey other = (CellIndexOverrideKey) obj;
    if (this.cellIndex == null) {
    if (other.cellIndex != null)
    return false;
    } else if (!this.cellIndex.equals(other.cellIndex))
    return false;
    if (this.col != other.col)
    return false;
    return true;
    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((this.cellIndex == null) ? 0 : this.cellIndex.hashCode());
    result = prime * result + this.col;
    return result;
    public String getComposite() {
    return this.cellIndex + String.valueOf(this.col);

  • PLEASE HELP-JTable cell editor-change one cell, changes all cells of column

    for example i have 3 rows 4 columns, column 3 and 4 are dates. now if i change the date to a new value (eg for of column 3)
    for any row, and then i click on any other cell. All cell values ie all rows for that column are changed to that new value.
    ie it changed column 3 for all rows 1, 2 and 3 to that new value which i changed in only one cell of that column.
    PLEASE HELP me , tell me what change i make to the code to fix it ....
    this is my cell renderer for date
    class DateCellRenderer extends JbcDateTimeChooser implements TableCellRenderer {
      protected Border m_noFocusBorder;
      public DateCellRenderer() {
        super();
        setStylePattern(JbcDateTimeChooser.MEDIUM);
        m_noFocusBorder = new EmptyBorder(1, 2, 1, 2);
        setOpaque(true);
        setBorder(m_noFocusBorder);
      public Component getTableCellRendererComponent(JTable table,
       Object value, boolean isSelected, boolean hasFocus,
       int row, int column)
      if(value instanceof Date) {
          Date b = (Date)value;
          setDate(b);
        setFont(table.getFont());
        setBorder(hasFocus ? UIManager.getBorder(
          "Table.focusCellHighlightBorder") : m_noFocusBorder);
        return this;
    }I have this custom cell editor date
    class DateCellEditor extends AbstractCellEditor implements TableCellEditor {
      protected JbcDateTimeChooser editor;
      public DateCellEditor() {
        super();
        editor = new JbcDateTimeChooser();
        editor.setStylePattern(JbcDateTimeChooser.MEDIUM);
      public Object getCellEditorValue() {
        return editor.getDate();
      public Component getTableCellEditorComponent(JTable table,
       Object value, boolean isSelected, int row, int column)
        if(value instanceof Date) {
          editor.setDate((Date)value);
        return editor;
    }and this is how i defined in jtable
        lnnTableModel = new CellSiteLNNTableModel();
        lnnTable.setModel(lnnTableModel);
        lnnTableModel.addColumn("ABC");
        lnnTableModel.addColumn("DEF");
        lnnTableModel.addColumn("Date From");
        lnnTableModel.addColumn("Date To");
        for(int k = 0; k < lnnTableModel.getColumnCount(); k++) {
          TableColumn col = lnnTable.getColumn(lnnTableModel.getColumnName(k));
          TableCellRenderer renderer;
            DefaultTableCellRenderer textRenderer = new DefaultTableCellRenderer();
            renderer = textRenderer;
          TableCellEditor editor;
          JTextField textColumn = new JTextField();
          if((k == CellSiteLNN.DATE_FROM) || (k == CellSiteLNN.DATE_TO)) {
            editor = new DateCellEditor();  //  this is the cell editor
         renderer = new DateCellRenderer(); // this is the assigned cell renderer
          } else {
            editor = new DefaultCellEditor(textColumn);
          col.setCellRenderer(renderer);
          col.setCellEditor(editor);
        }

    table model is extended from AbstractTableModel
    and have these methods
    do you see anything wrong here.....
      public Object getValueAt(int row, int column) {
        Vector rowVector = (Vector)dataVector.elementAt(row);
        return rowVector.elementAt(column);
      public void setValueAt(Object aValue, int row, int column) {
        Vector rowVector = (Vector)dataVector.elementAt(row);
        rowVector.setElementAt(aValue, column);
        // generate notification
        fireTableChanged(new TableModelEvent(this, row, row, column));
      } // end method (setValueAt)

  • Formula Logic for Dates in the Cell Editor in Query Designer

    Hi All
    We are on BI7. (This is in the Cell Editor in Query Designer)
    I am trying to create a formula in one cell that enters a date based on the following logic (Lets call this formula A):
    I also have a placeholder "Cell reference" for a Date in another cell in the Cell Editor (Lets call it B).
    I also have two other dates in seperate cells in the Editor (Lets call them C and D)
    What i need to do is check that either C or D are not blank i.e one at least has a date and if so enter the date that is in B in A.
    My formula logic in (Cell A) at the moment is as follows:
    ( Cell C <> 0 ) OR ( Cell D <> 0) * Cell B
    When I run the query It is coming back with either a 1 or  0 depending if there is a date in C or D.
    What I want it to do is to display the actual date of  'Cell B'  in 'Cell A' if  ( Cell C <> 0 ) OR ( Cell D <> 0)
    If the value of B is blank ie no date I also want A to be blank i.e not equal zero or a blank date ie 00/00/0000
    Example 1
    Cell A    08/09/2009
    Cell B    08/09/2009
    Cell C   15/03/2010
    Cell D
    Cell A should = 08/09/2009 as there is a Date in Cell C or D and if so enter the date of Cell B in cell A
    Example 2
    Cell A   
    Cell B    08/09/2009
    Cell C  
    Cell D
    Cell A should = BLANK as there is a NO Date in Cell C or D
    Example 3
    Cell A   
    Cell B  
    Cell C   15/03/2010
    Cell D
    Cell A should = BLANK as there is a No Date in Cell B although a Date in cell C or D.
    Thank you for assistance in advance
    Kind regards
    Stevo

    Hi there,
    It seems you have done almost everything...
    What it seems that is missing is probably the cell reference for Cell C and for Cell D, or did you forget to mention it here?
    So here it is the big idea:
    - In the Cell Editor of the query designer, create a new cell reference for Cell C, let's name it ref_cell_c;
    - In the Cell Editor of the query designer, create a new cell reference for Cell D, let's name it ref_cell_d;
    - In the Cell Editor of the query designer, create a new cell reference for Cell B, let's name it ref_cell_b;
    - In the Cell Editor of the query designer, create a new formula for Cell A, let's name it form_cell_a;
    The form_cell_a should be created by the following:
    ( COUNT(ref_cell_c) + COUNT(ref_cell_d) ) * ref_cell_b
    So COUNT(operand) returns 1 if operand is different of 0 else it returns 0; So if ref_cell_c has any valu or ref_cell_d has any value it should return the value of ref_cell_b.
    Please note that with this formula, if you have values in both ref_cell_c and ref_cell_d this formula returns 2 * ref_cell_b, which is not what you pretend, I'm assuming you'll have value only for the following combinations:
    ref_cell_c has value but ref_cell_d don't have any
    ref_cell_c don't have any value but ref_cell_d has a value
    ref_cell_c don't have any value neighther has ref_cell_d any
    Diogo.

  • Changing the event that starts JTree cell editor

    I've implemented a JTree that uses a custom cell renderer and editor. Everything is going well except for a look and feel issue. When I double click on a JTree entry or single click on a node that has already been selected, the cell editor starts immediately. This is way to generous, and I'm finding I'm often editing cells when I just want to navigate the tree.
    I'd much prefer to have the edit event be something harder to do like a right click or a triple left click. Is there a way to change the event that starts the JTree cell editor?

    DefaultCellEditor provides a method boolean isCellEditable(EventObject anEvent), by default it always returns true. Override that method in your cell editor to only return true if the event is a right click, or whatever you want.

  • JTable Custom Cell Editor: how to get value?

    I have some custom cell renderers and editor. One of my custom cell editor is a text field that can popup a separat gui for easier data selection. As this text field alone with the popup gui works great, when i use this field in my custom jtable cell editor, the gui selected value is never displayed in the table cell. it just shows the old value.?

    Well, here's how I do it. I'm very new to Swing so I'm, not sure if this is the best way. If you find a better way, please repost on this message.
    My cell editor is a JPanel with a JTextfield in it. I make sure that the JTextfield will have default focus when the JPanel is focused.
    In the CellEditor, I add a KeyListener to the JTextField so that when the user hits enter, it fires the stopEditing. I then add a function to CellEditor that returns what's in the JTextField.
    In the code, m_value is the JTextField. You want to add MyKeyAdapter to the JTextField. Viola, it works!
          * This private class reads in an enter key.
         class MyKeyAdapter extends KeyAdapter {
              public void keyPressed(KeyEvent e) {
                   if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                        stopCellEditing();
          * Returns the value of the editor
          * @return the value of the editor
         public String getValue() {
              return m_value.getText();

  • Help!!! JTable cell editor problem...

    I am having a problem with table cell editors.
    The problem is that when I click on another component
    in the frame (out side of the JTable) the cell editors's
    stopCellEditing() is not called so I get a JTable with a cell
    editor in editing mode.
    Any help?
    Thanks a lot

    It is difficult to tell what happens with FocusEvents when you are actually editing a cell and the editor is "up". I am experiencing different difficulties with the same root issue. I think the problem here is that the Java Focus Manager is consuming the focus event without propagating the event to any of the JTable components (CellEditor or JTable). I am not sure if this is exactly the case but I haven't been able to trap focus events in the Editors, Renderers or JTable anywhere. If the editor is not "up" then event handling seems to be fairly normal but when you are actually editing a cell it becomes tricky.
    However, this is a problem I fixed by placing a FocusGained event handler on the other (non JTable) component and then manually stopping editing on the JTable. In other words in the JFrame (or whatever component you are using) I added a FocusListener to the non JTable component and inside of FocusGanied() I execute:
    public void focusGained(FocusEvent e){
    table.getCellEditor().stopEditing();
    table.removeEditor();
    You could, of course, use cancelEditing() as well. You'll probably want to wrap the code with some robustness as follows to ensure that you don't get trapped by wierdness.
    public void focusGained(FocusEvent e){
    if (table.isEditing() && table.getCellEditor() != null){
    table.getCellEditor().stopEditing();
    table.removeEditor();
    This is probably not the only way to solve the problem but it was the way that worked when I encountered that issue.

  • Jtable cell editor help!!

    I have a JTable which is displaying 3 columns
    One is a ID columns, second is name and third is seniority
    Now in seniority there can only be 6 values so I am using a combo box to get the input from the user
    However, In ID and Name column I dont understand what to use as a cell editor
    In ID I want the input to be only from 0 to 99
    while in Name it has to be a name and should not contain numbers....(optional)
    please help me out...
    thnx

    It is difficult to tell what happens with FocusEvents when you are actually editing a cell and the editor is "up". I am experiencing different difficulties with the same root issue. I think the problem here is that the Java Focus Manager is consuming the focus event without propagating the event to any of the JTable components (CellEditor or JTable). I am not sure if this is exactly the case but I haven't been able to trap focus events in the Editors, Renderers or JTable anywhere. If the editor is not "up" then event handling seems to be fairly normal but when you are actually editing a cell it becomes tricky.
    However, this is a problem I fixed by placing a FocusGained event handler on the other (non JTable) component and then manually stopping editing on the JTable. In other words in the JFrame (or whatever component you are using) I added a FocusListener to the non JTable component and inside of FocusGanied() I execute:
    public void focusGained(FocusEvent e){
    table.getCellEditor().stopEditing();
    table.removeEditor();
    You could, of course, use cancelEditing() as well. You'll probably want to wrap the code with some robustness as follows to ensure that you don't get trapped by wierdness.
    public void focusGained(FocusEvent e){
    if (table.isEditing() && table.getCellEditor() != null){
    table.getCellEditor().stopEditing();
    table.removeEditor();
    This is probably not the only way to solve the problem but it was the way that worked when I encountered that issue.

  • How to get the caret inside a custom editor?

    I was reading through old posts the other day and noticed this by Rob Camick in this thread Re: Problem in cell selection in JTable Java Swing :
    camickr wrote:
    All KeyEvents are passed to the editor for the cell and the editor is psuedo invoked. That is, the caret is not placed on the text field used as the editor, but the character typed is added to the editor.This set me thinking about a known issue in my app which I had shelved for a "rainy day": how to get the caret into the cell editor component. I thought I'd get it out and look at it. I tried the following, in my custom cell editor:
      public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
                                                 int row, int column)
        JTextField ec = (JTextField) editorComponent;
        ec.setText((String) value);
        if ("".equals(ec.getText()))
          ec.setCaretPosition(0);
        else
          ec.selectAll();
        return editorComponent;
      }But it has no effect whatsoever, the user still can't type something in and then press the backspace key to useful effect. Has anyone out there solved this problem? (And why, oh why, is the caret not put into the cell editor by default, if it's a component that has a caret?)

    Replying to my own post, in case what I ended up with is of some help to others. The desired behaviour was that anything the cell contained from the previous edit would be replaced by what the user types in the current edit, i.e.:
    user starts edit, types 234, stops editing, cell displays 234...user single-clicks on cell, types 567, stops editing, cell displays 567
    My code is as follows:
        public Component getTableCellEditorComponent(JTable table, Object value,
                                                     boolean isSelected, int row,
                                                     int column)
          final JTextField ec = (JTextField) editorComponent;
          ec.setText((String) value);
          // selectAll, so that whatever the user types replaces what we just put there
          ec.selectAll();
          SwingUtilities.invokeLater(new Runnable()
            public void run()
              // make the component take the keyboard focus, so the backspace key works
              ec.requestFocus();
              SwingUtilities.invokeLater(new Runnable()
                public void run()
                  // at this point the user has typed something into the cell and we
                  // want the caret to be AFTER that character, so that the next one
                  // comes in on the RHS
                  ec.setCaretPosition(ec.getText().length());
          return editorComponent;
        }

  • Multiple JButtons in a JTable cell: handling events

    Hello!
    I'm trying to develop a Swing application which makes use of tables in several panels.
    Each row of each table should present the user two buttons, one for editing the row, one for viewing details of that row. Both editing and viewing are done in another panel.
    I thought I could add the buttons as the last column of each row, so I made a panel which holds the two buttons and the id of the row, so that I know what I have to edit or view.
    I managed to insert the panel as the last column, but I can't have the buttons click.
    I studied cell renderers and editors from several tutorials and examples, but evidently I can't understand either of them: whatever I try doesn't change the outcome... :(
    Below is the code I use, except for imports and packages:
    ActionPanel.java - The panel which holds the buttons and the row id
    public class ActionPanel extends JPanel{
      private static final long serialVersionUID = 1L;
      public static String ACTION_VIEW="view";
      public static String ACTION_EDIT="edit";
      private String id;
      private JButton editButton;
      private JButton viewButton;
      public String getId() {
        return id;
      public void setId(String id) {
        this.id = id;
      public JButton getEditButton() {
        return editButton;
      public void setEditButton(JButton editButton) {
        this.editButton = editButton;
      public JButton getViewButton() {
        return viewButton;
      public void setViewButton(JButton viewButton) {
        this.viewButton = viewButton;
      public ActionPanel() {
        super();
        init();
      public ActionPanel(String id) {
        super();
        this.id = id;
        init();
      private void init(){
        setLayout(new FlowLayout(FlowLayout.CENTER, 10, 0))
        editButton=new JButton(new ImageIcon("./images/icons/editButtonIcon.png"));
        editButton.setBorderPainted(false);
        editButton.setOpaque(false);
        editButton.setAlignmentX(TOP_ALIGNMENT);
        editButton.setMargin(new Insets(0,0,0,0));
        editButton.setSize(new Dimension(16,16));
        editButton.setMaximumSize(new Dimension(16, 16));
        editButton.setActionCommand(ACTION_EDIT);
        editButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(null, id, "Editing", JOptionPane.INFORMATION_MESSAGE);
        viewButton=new JButton(new ImageIcon("./images/icons/viewButtonIcon.png"));
        viewButton.setMaximumSize(new Dimension(16, 16));
        viewButton.setActionCommand(ACTION_VIEW);
        viewButton.setBorderPainted(false);
        viewButton.setOpaque(false);
        viewButton.setMargin(new Insets(0,0,0,0));
        viewButton.setSize(new Dimension(16,16));
        viewButton.setMaximumSize(new Dimension(16, 16));
        viewButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(null, id, "Viewing", JOptionPane.INFORMATION_MESSAGE);
        add(viewButton);
        add(editButton);
    ActionPanelRenerer.java - the renderer for the above panel
    public class ActionPanelRenderer implements TableCellRenderer{
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component ret=(Component)value;
        if (isSelected) {
          ret.setForeground(table.getSelectionForeground());
          ret.setBackground(table.getSelectionBackground());
        } else {
          ret.setForeground(table.getForeground());
          ret.setBackground(UIManager.getColor("Button.background"));
        return ret;
    ActionPanelEditor.java - this is the editor, I can't figure out how to implement it!!!!
    public class ActionPanelEditor extends AbstractCellEditor implements TableCellEditor{
      public Component getTableCellEditorComponent(JTable table,Object value,boolean isSelected,int row,int column) {
        return (ActionPanel)value;
      public Object getCellEditorValue() {
        return null;
    ServicesModel.java - The way I fill the table is through a model:
    public class ServicesModel extends AbstractTableModel  {
      private Object[][] data;
      private String[] headers;
      public ServicesModel(Object[][] services, String[] headers) {
        this.data=services;
        this.headers=headers;
      public int getColumnCount() {
        return headers.length;
      public int getRowCount() {
        return data.length;
      public Object getValueAt(int row, int col) {
        if(col==data.length-1)
          return new ActionPanel(""+col);
        else
          return data[row][col];
      public boolean isCellEditable(int row, int col) {
        return false;
      public Class getColumnClass(int column) {
        return getValueAt(0, column).getClass();
    ServicesList.java - The panel which holds the table (BasePanel is a custom class, not related to the table)
    public class ServicesList extends BasePanel {
      private JLabel label;
      private JTable grid;
      public ServicesList(SessionManager sessionManager){
        super(sessionManager);
        grid=new JTable() ;
        add(new JScrollPane(grid), BorderLayout.CENTER);
        layoutComponents();
      public void layoutComponents(){
        ConfigAccessor dao=new ConfigAccessor(connectionUrl, connectionUser, connectionPass);
        String[] headers=I18N.get(dao.getServiceLabels());
        grid.setModel(new ServicesModel(dao.getServices(), headers));
        grid.setRowHeight(20);
        grid.getColumnModel().getColumn(headers.length-1).setCellRenderer(new ActionPanelRenderer());
        grid.setDefaultEditor(ActionPanel.class, new ActionPanelEditor());
        grid.removeColumn(grid.getColumnModel().getColumn(0));
        dao.close();
    }Please can anyone at least address me to what I'm doing wrong? Code would be better, but examples or hints will do... ;)
    Thank you very much in advance!!!

    Hello!
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    public class MultipleButtonsInCellTest {
      public JComponent makeUI() {
        String[] columnNames = {"String", "Button"};
        Object[][] data = {{"AAA", null}, {"BBB", null}};
        DefaultTableModel model = new DefaultTableModel(data, columnNames) {
          @Override public Class<?> getColumnClass(int column) {
            return getValueAt(0, column).getClass();
        JTable table = new JTable(model);
        table.setRowHeight(36);
        ActionPanelEditorRenderer er = new ActionPanelEditorRenderer();
        TableColumn column = table.getColumnModel().getColumn(1);
        column.setCellRenderer(er);
        column.setCellEditor(er);
        JPanel p = new JPanel(new BorderLayout());
        p.add(new JScrollPane(table));
        p.setPreferredSize(new Dimension(320, 200));
        return p;
      public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
          @Override public void run() { createAndShowGUI(); }
      public static void createAndShowGUI() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.getContentPane().add(new MultipleButtonsInCellTest().makeUI());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    class ActionPanelEditorRenderer extends AbstractCellEditor
                       implements TableCellRenderer, TableCellEditor {
      JPanel panel1 = new JPanel();
      JPanel panel2 = new JPanel();
      public ActionPanelEditorRenderer() {
        super();
        JButton viewButton2 = new JButton(new AbstractAction("view2") {;
          public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(null, "Viewing");
        JButton editButton2 = new JButton(new AbstractAction("edit2") {;
          public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(null, "Editing");
        panel1.setOpaque(true);
        panel1.add(new JButton("view1"));
        panel1.add(new JButton("edit1"));
        panel2.setOpaque(true);
        panel2.add(viewButton2);
        panel2.add(editButton2);
      @Override
      public Component getTableCellRendererComponent(JTable table, Object value,
                   boolean isSelected, boolean hasFocus, int row, int column) {
        panel1.setBackground(isSelected?table.getSelectionBackground()
                                       :table.getBackground());
        return panel1;
      @Override
      public Component getTableCellEditorComponent(JTable table, Object value,
                                    boolean isSelected, int row, int column) {
        panel2.setBackground(table.getSelectionBackground());
        return panel2;
      @Override
      public Object getCellEditorValue() {
        return null;
    }

  • DND Tables with JTextField Editors Mouse Problem

    Hello!
    I am trying to be able to drag and drop between two tables and within a table and also use a TextArea as the editor of the cells. I am having the following problem:
    When I click on a cell both the drag_start and the cell is in editor mode so I
    a. created a MouseDragGestureRecognizer MyDGR and set dragSource.createDragGestureRecognizer(MyDGR.class() ,this,DnDConstants.ACTION_COPY_OR_MOVE,this) in my DNDTable class.
    This did not run mouseDragged function but when I added a MouseMotionListener in the registerListeners function it called that mouseDragged function even when I just clicked on a cell.
    b. In "class TextAreaEditor extends DefaultCellEditor", I have set clickCountToStart to 2.
    I would like to be able to double click and go into editing mode in the cell and if I click and hold then I would like to enter DND mode.
    Any help would be appreciated =)

    I have created my own TextField and TextArea classesUse better names to avoid confusion with the AWT TextField and TextArea components.
    Can anyone tell me why this may be happening?No, because we don't know what custom changes you have made to the components.
    If you need further help then you need to create a [url http://homepage1.nifty.com/algafield/sscce.html]Short, Self Contained, Compilable and Executable, Example Program (SSCCE) that demonstrates the incorrect behaviour, because I can't guess exactly what you are doing based on the information provided.
    And don't forget to use the [url http://forum.java.sun.com/help.jspa?sec=formatting]Code Formatting Tags so the code retains its original formatting.

Maybe you are looking for

  • Report with two Command is empty if one of the two commands returns no data

    Hi all, I have a report with two Commands not linked together. If ONLY one of the two Commands returns no data, the full report is empty (although the other Command returns data). I'm using Crystal Report 2008 and the CRJ 12.2.205 Have an idea?

  • How can I get my Music Library on my new laptop?

    The old computer I had iTunes on crashed, and I can't use it anymore. I have purchased a new laptop, and I would like all of my music back. How can I transfer my iTunes music library to my new laptop? I tried to sync my iPhone to my new laptop, but i

  • Idoc to RNIF with pdf attachment

    Hi I am implementing a Idoc to RNIF with pdf attachment. I have to pick the pdf file from an ftp server in PI based on the invoice number in the idoc. I could not find a blog or documentation on how to attach the pdf file. The only viable solution I

  • Ranch Billing, the excise condition type JMOD calculation is wrong

    Hi I wish to know that in case of Branch Billing, the excise condition type calculation is wrong!! I am surprised and unable to know how it could be? In billing document display (T.code VF03) , Out of 3 Line items, Basic Excise Duty of 2 line items/

  • JTabbedPane with JSplitPane - HELP !!!

    What am I missing??? I have a JSplitPane in a TabbedPane. The topComponent contains a JComboBox with Key values, the Bottom Component will display details based on the key value passed. The bottomComponent has 2 constructors: one default and one acce