Updating value in a jtable cell

hi
I have a JTable where user enters numbers into the cells and then clicks on a button which reads all these numbers and prints a number which is calculated using all these values
my problem is that the very last cell which data is typed into is not "seen" and the only way for the system to see it is if i remove focus from that cell before i press the button.
is there anyway for me to be able to press that button and the system read the last cell without having to click of that last cell before hand?
the way i obtain the value in each cell is table.getValueAt(i , j)
does anyone understand what i mean? its kinda hard to explain.
thanks alot

PhHein wrote:
corlettk wrote:
PhHein wrote:
corlettk wrote:
Edited by: corlettk on 6/04/2009 22:33 ~~ Mr Hein has already posted a better way... A day late and a penny short ;-)I would have expected you to be less formal at that time of the day ;-)It's a weeknight.Ooh, I didn't think that mattered in Australia(?) . ;-)We need to give the breweries three days a week to restock... Traditionaly that's Monbluddyday, Tuesbluddyday, and Wedbluddynesday... It's all good Thursday through Sunday though, as long as your äss isn't on fire, or twenty feet below flood level, and you can resist the urge to tongue-pash a sting-ray, that is.
Cheers. Keith.

Similar Messages

  • Hiding a value available in JTable Cell

    I have a JTable with 10 columns and mutilple rows depends on the data available. Some time I will get redundant values displayed in the table. Since I am using the Jtable Header sorting, I need all the values in all the columns. But those duplicate values should not be displayed in the cell rather it should go hidden. Any suggestions will be greatly appreciatable.
    Thanks

    Thanks Mr. Greg!
    I have the value to be available for further sorting and other reference. It just needs to be hide, say like I tried to have the foregroundcolor to be white. So that it will not be visible but while sorting I can use the value.
    Though I tried to change the foreground color, its changing the whole column, I couldnt able to control it with particular (column, row) :-(
    Thanks

  • How to force check right value of a JTable cell?

    Hi,
    I have a JTable with a column that must have a value no empty and between 0 and 100. I made a sample with only one column for simplicity.
    The code works fine when the user types some value. However, when the user press ENTER to go to next column, without editing the cell, no checks run.
    I have also other column that the user may type a part of a name and the system must find the full name of a person. In this column, if user uses ENTER without editing the cell, the same problem ocurrs.
    The simplistic code is here, runnable:
    import java.awt.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.table.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.KeyEvent;
    import java.text.NumberFormat;
    import java.text.ParseException;
    import javax.swing.text.DefaultFormatterFactory;
    import javax.swing.text.NumberFormatter;
    public class TableCheckCell extends JFrame {
      /** Creates a new instance of TableCheckCell */
      public TableCheckCell() {
        Object[] columnNames = {"Percents"};
        Object[][] data =
          {new Integer(-1)}, // <--- DEFAULT VALUE FORCED TO BE OUT OF RANGE...
          {new Integer(-1)},
          {new Integer(-1)},
          {new Integer(-1)}
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        JTable table = new JTable(model);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
        TableColumn col = table.getColumnModel().getColumn(0);
        col.setCellEditor(new CellIntegerEditor(CellIntegerEditor.CHECKMINMAX,0,100));
      public static void main(String[] args) {
        TableCheckCell frame = new TableCheckCell();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    * Implements a cell editor that uses a formatted text field
    * to edit Integer values.
    class CellIntegerEditor extends DefaultCellEditor {
      public static final int NOCHECK = 0;
      public static final int CHECKMINMAX = 1;
      public static final int CHECKMIN = 2;
      public static final int CHECKMAX = 3;
      JFormattedTextField ftf;
      NumberFormat integerFormat;
      private int checkinterv;
      private Integer minimum, maximum;
      private boolean DEBUG = false;
      public CellIntegerEditor(int checkinterv, int min, int max) {
        super(new JFormattedTextField());
        init(checkinterv, min, max);
      void init(int checkinterv, int min, int max) {
        ftf = (JFormattedTextField)getComponent();
        this.checkinterv = checkinterv;
        minimum = new Integer(min);
        maximum = new Integer(max);
        //Set up the editor for the integer cells.
        integerFormat = NumberFormat.getIntegerInstance();
        NumberFormatter intFormatter = new NumberFormatter(integerFormat);
        intFormatter.setFormat(integerFormat);
        if (checkinterv == CHECKMIN || checkinterv == CHECKMINMAX)
          intFormatter.setMinimum(minimum);
        if (checkinterv == CHECKMAX || checkinterv == CHECKMINMAX)
          intFormatter.setMaximum(maximum);
        ftf.setFormatterFactory(new DefaultFormatterFactory(intFormatter));
        ftf.setValue(minimum);
        ftf.setHorizontalAlignment(JTextField.TRAILING);
        ftf.setFocusLostBehavior(JFormattedTextField.PERSIST);
        //React when the user presses Enter while the editor is
        //active.  (Tab is handled as specified by
        //JFormattedTextField's focusLostBehavior property.)
        ftf.getInputMap().put(KeyStroke.getKeyStroke(
          KeyEvent.VK_ENTER, 0),
          "check");
        ftf.getActionMap().put("check", new AbstractAction() {
          public void actionPerformed(ActionEvent e) {
            if (!ftf.isEditValid()) { //The text is invalid.
              if (userSaysRevert()) { //reverted
                ftf.postActionEvent(); //inform the editor
            } else try {              //The text is valid,
              ftf.commitEdit();     //so use it.
              ftf.postActionEvent(); //stop editing
            } catch (java.text.ParseException exc) { }
      //Override to invoke setValue on the formatted text field.
      public Component getTableCellEditorComponent(JTable table,
        Object value, boolean isSelected,
        int row, int column) {
        JFormattedTextField ftf =
          (JFormattedTextField)super.getTableCellEditorComponent(
          table, value, isSelected, row, column);
        ftf.setValue(value);
        return ftf;
      //Override to ensure that the value remains an Integer.
      public Object getCellEditorValue() {
        JFormattedTextField ftf = (JFormattedTextField)getComponent();
        Object o = ftf.getValue();
        if (o instanceof Integer) {
          return o;
        } else if (o instanceof Number) {
          return new Integer(((Number)o).intValue());
        } else {
          if (DEBUG) {
            System.out.println("getCellEditorValue: o isn't a Number");
          try {
            return integerFormat.parseObject(o.toString());
          } catch (ParseException exc) {
            System.err.println("getCellEditorValue: can't parse o: " + o);
            return null;
      //Override to check whether the edit is valid,
      //setting the value if it is and complaining if
      //it isn't.  If it's OK for the editor to go
      //away, we need to invoke the superclass's version
      //of this method so that everything gets cleaned up.
      public boolean stopCellEditing() {
        JFormattedTextField ftf = (JFormattedTextField)getComponent();
        if (ftf.isEditValid()) {
          try {
            ftf.commitEdit();
          } catch (java.text.ParseException exc) { }
        } else { //text is invalid
          if (!userSaysRevert()) { //user wants to edit
            return false; //don't let the editor go away
        return super.stopCellEditing();
       * Lets the user know that the text they entered is
       * bad. Returns true if the user elects to revert to
       * the last good value.  Otherwise, returns false,
       * indicating that the user wants to continue editing.
      protected boolean userSaysRevert() {
        Toolkit.getDefaultToolkit().beep();
        ftf.selectAll();
        Object[] options = {"Corrigir"};
        String msg = "";
        if (checkinterv == CHECKMINMAX)
          msg = "Value must be between " + minimum + " and " + maximum + ".";
        else if (checkinterv == CHECKMIN)
          msg = "Value must be >= " + minimum + ".";
        else if (checkinterv == CHECKMAX)
          msg = "Value must be <= " + maximum + ".";
        JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ftf),msg);
        ftf.setValue(ftf.getValue());
        return true;
    }Then, I'd like to know if there is any way to check the user typed ENTER to go out of the cell, check the value of the cell and, if it is wrong, to come back to the cell, forcing the user to type a right value.

    Editing to force the entry of data in a cell is typically done when you press a button to process the data. It doesn't make sense to "edit" the cell when the user presses enter to go to the next cell. What if the user never places focus on a particular cell. Then the cell will never be edited.
    To force a user to enter a valid value once they have started editing you can do something like this:
    http://forum.java.sun.com/thread.jspa?forumID=57&threadID=575309
    But you can't force a user to visit every cell in the table so you need to handle that as described above.

  • Update JTable cells via setValueAt

    Hello all,
    I'm trying to implement a setValueAt method using an arrayList.....no success.What listeners should I have set up(For JTable or my table model)? I am new at this and I'm trying to update the JTable cells after a query from some db. Could anyone help?
    When trying to change the a value in the table I get these errors:
    "Exception occurred during event dispatching:
    java.lang.ClassCastException: java.lang.String
    at CachingResultSetTableModel.getValueAt(CachingResultSetTableModel.java:37)
    at javax.swing.JTable.getValueAt(JTable.java:1711)
    at javax.swing.JTable.prepareRenderer(JTable.java:3530)"
    public void setValueAt(Object avalue, int r, int c){
    if(r < cache.size()){
    row[c] = (Object[])cache.set(r, avalue);
    fireTableCellUpdated(r, c);
    }//setValueAt
    *********For reference here's the getValueAt method*************************
    public Object getValueAt(int r, int c){
    if(r < cache.size()){
    row = (Object[])cache.get(r);
    return row[c];
    else
    return null;
    }//getValueAt

    I would think that everone who starts off with JTable will have a couple of concept problems. I am also going thru this learnig curve. It looks to me ( the blind leading the blind etc) like your basic table has strange data in it. The problem is occuring when the JTable is trying to setup the data from the table model.
    I don't think its anything to do with setValueAt.
    I kept going back to TableMap, TableSorter and JDBCAdaptor examples and copying the code from them to come right.> I debug by putting a System.out .... in all the methods until I get to where the code is giving trouble.
    Good luck [email protected]
    Hello all,
    >
    I'm trying to implement a setValueAt method using an
    arrayList.....no success.What listeners should I have
    set up(For JTable or my table model)? I am new at
    this and I'm trying to update the JTable cells after a
    query from some db. Could anyone help?
    When trying to change the a value in the table I get
    these errors:
    "Exception occurred during event dispatching:
    java.lang.ClassCastException: java.lang.String
    at
    CachingResultSetTableModel.getValueAt(CachingResultSetT
    bIleModel.java:37)
    at javax.swing.JTable.getValueAt(JTable.java:1711)
    at
    javax.swing.JTable.prepareRenderer(JTable.java:3530)"
    public void setValueAt(Object avalue, int r, int c){
    if(r < cache.size()){
    row[c] = (Object[])cache.set(r, avalue);
    fireTableCellUpdated(r, c);
    }//setValueAt
    *********For reference here's the getValueAt
    method*************************
    public Object getValueAt(int r, int c){
    if(r < cache.size()){
    row = (Object[])cache.get(r);
    return row[c];
    else
    return null;
    }//getValueAt

  • JTable cell editor ..not able to delete value in the cell

    Hello,
    I have applied Cell Editor on the JTAble. I'm able to enter value initially in the cell.
    Once I tab out of that cell, go back to the same cell, edit the value again and tab out. It still shows me old value, not the updated one.
    I'm using putClientProperty("terminateEditOnFocusLost", Boolean.TRUE) to recognise the cell value without focus lost.
    Does this cause any problem ???
    Thanks in advance
    Kapil

    then what might be the problem of value not getting deleted ??
    Code is:
    public class MyTableCellEditor extends AbstractCellEditor
    implements TableCellEditor {
    //This is the component that will handle the editing of the cell value
    private JTextField component = null;
    //This method is called when a cell value is edited by the user.
    public Component getTableCellEditorComponent(JTable table, Object value,
    boolean isSelected, int rowIndex, int vColIndex) {
    component = new JTextField();
    System.out.println("value*************** "+value);
    System.out.println("Component value*************** "+component.getText());
    if(value != null){
    component.setText(value.toString());
    else{
    component.setText("");
    // Return the configured component
    return component;
    // This method is called when editing is completed.
    // It must return the new value to be stored in the cell.
    public Object getCellEditorValue() {
    return component.getText();
    public boolean shouldSelectCell(EventObject anEvent) {
    return false;
    }

  • Programatically change( edit?? ) JTable cell value

    If my user changes the value in cell 'A', I'd like to change the value in cell 'B' to the results of a calculation performed using the new value in A with the present ( prior to changing ) value in B.
    Example:
    Cell: suggested_sell_price
    Cell: cost_this_item
    A change in the cost_this_item cell would be reflected in the suggested_sell_price,(upon hitting enter the values are stored in the DB)
    Any suggestions would be greatly appreciated,

    Thanks for the suggestions. I'm posting a test program of what I have at the moment, it has some of the behavior I'm looking for, but I can't seem to get the new value of an aedited cell and set the table model with the new value.
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    public class TE extends JFrame
         String[] cols = {"VAL_1", "VAL_2", "VAL_3"};
         Object[][] filler = {
                                       {new Double(100.00), new Double(100.00), new Double(100.00)},
                                       {new Double(200.00), new Double(200.00), new Double(200.00)},
                                       {new Double(400.00), new Double(400.00), new Double(400.00)}
         JTable table;
         TE(String title)
                   super(title);
                   this.setDefaultCloseOperation(EXIT_ON_CLOSE);
                   MTM mtm = new MTM(3, cols.length);
                   mtm.setColumnIdentifiers(cols);
                   int nRows = filler.length;
                   for(int i = 0; i < nRows; ++i)
                             mtm.setValueAt(filler[0], 0, i);
                             mtm.setValueAt(filler[1][i], 1, i);
                             mtm.setValueAt(filler[2][i], 2, i);
                   table = new JTable(mtm);
                   table.getColumnModel().getColumn(1).setCellEditor(new SimpleCellEditor());
                   table.getColumnModel().getColumn(2).setCellEditor(new SimpleCellEditor());
                   //table.getColumnModel().getColumn(2).setCellEditor(new SimpleCellEditor());
                   JScrollPane jsp = new JScrollPane(table);
                   Container c = getContentPane();
                   c.add(jsp);
                   setSize(300,300);
                   setVisible(true);
         class MyMouseListener extends MouseAdapter
                   public void mouseClicked(MouseEvent e)
                        if(e.getClickCount() == 2)
                                  table.setValueAt("QQQQQQQ", 1,1);
    class SimpleCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener
         JTextField tf = new JTextField();
         TableModel tm = table.getModel();
         protected EventListenerList listenerList = new EventListenerList();
         protected ChangeEvent changeEvent = new ChangeEvent(this);
         public SimpleCellEditor()
                   super();                              
                   tf.addMouseListener(new MyMouseListener());
                   tf.addActionListener(this);
    public void addCellEditorListener(CellEditorListener listener) {
    listenerList.add(CellEditorListener.class, listener);
    public void removeCellEditorListener(CellEditorListener listener) {
    listenerList.remove(CellEditorListener.class, listener);
    protected void fireEditingStopped()
              CellEditorListener listener;
              Object[] listeners = listenerList.getListenerList();
              for (int i = 0; i < listeners.length; i++)
                   if (listeners[i] == CellEditorListener.class)
                             listener = (CellEditorListener) listeners[i + 1];
                             listener.editingStopped(changeEvent);
    protected void fireEditingCanceled()
         CellEditorListener listener;
              Object[] listeners = listenerList.getListenerList();
                   for (int i = 0; i < listeners.length; i++)
                   if (listeners[i] == CellEditorListener.class)
                        listener = (CellEditorListener) listeners[i + 1];
                        listener.editingCanceled(changeEvent);
    public void cancelCellEditing()
              fireEditingCanceled();
    public boolean stopCellEditing()
              fireEditingStopped();
              return true;
    public boolean isCellEditable(EventObject event)
              return true;
         public boolean shouldSelectCell(EventObject event)
         return true;
    public Object getCellEditorValue()
         return tf.getText();
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
         if(tf.hasFocus() == true)
                   tf.setBackground(Color.CYAN);
              return tf;
         public void actionPerformed(ActionEvent e)
              int row = table.getSelectedRow();
              int col = table.getSelectedColumn();
              double nVal = 0.00;
              Object currCostVal;
              Object currSellVal;
              Double costVal;
              Double sellVal;
              double newSellVal;
              double currentCost;
              if(table.getSelectedColumn() == 1)
                   currCostVal = table.getValueAt(row, col+1);
                   currSellVal = table.getValueAt(row, col);
                   costVal = new Double(currCostVal.toString());
                   currentCost = costVal.doubleValue();
                   sellVal = new Double(currSellVal.toString());
                   newSellVal = sellVal.doubleValue();
                   nVal = newSellVal*currentCost*100/100;
                   System.out.println("Recommended sell-price after change: " + nVal);
              }else if(table.getSelectedColumn() == 2 )
                        currCostVal = table.getValueAt(row, col);
                        currSellVal = table.getValueAt(row, col-1);
                        costVal = new Double(currCostVal.toString());
                        currentCost = costVal.doubleValue();
                        sellVal = new Double(currSellVal.toString());
                        newSellVal = sellVal.doubleValue();
                        nVal = newSellVal*currentCost*100/100;
                        System.out.println("Recommended sell-price after change: " + nVal);
                        System.out.println("Cost column selected " + nVal);
    }// end simple cell editor
    class MTM extends DefaultTableModel
              MTM(int rows, int cols)
                        super(rows, cols);
    public static void main(String args[])
              TE te = new TE("Test of table cell update");

  • JTable cell value

    I have a custom cell renderer for JTable, and this cell renderer is also a listener for some event. The cell renderer receives new value as events, since it is a listener. The cell renderer must upadte this value as a table cell. Simple call this.setText does not work, as it must somehow call the "getTableCellRendererComponent" method of the TableCellRenderer interface that it implements. How can the cell renderer force the table to update itself, as the cell renderer has received his new value. What will be a good approach here?
    TIA,
    - Manish

    Manish -
    Would you be able to post your idea?
    I have a column in a table that I added
    a check box to so that the user can select
    or deselect the data. Sometimes when
    the check box is selected or deselected it
    doesn't register until I click another field.
    Would your idea work to correct this?
    Thanks!

  • Shading part of a JTable Cell dependent upon the value of the cell

    Hi
    Was hoping some one woudl be able to provide some help with this. I'm trying to create a renderer that will "shade" part of a JTable cell's background depending upon the value in the cell as a percentage (E.g. if the cell contains 0.25 then a quarter of the cell background will be shaded)
    What I've got so far is a renderer which will draw a rectangle whose width is the relevant percentage of the cell's width. (i.e. the width of the column) based on something similar I found in the forum but the part I'm struggling with is getting it to draw this rectangle in any cell other than the first cell. I've tried using .getCellRect(...) to get the x and y position of the cell to draw the rectangle but I still can't make it work.
    The code for my renderer as it stands is:
    import java.awt.Component;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;
    public class PercentageRepresentationRenderer extends JLabel implements TableCellRenderer{
         double percentageValue;
         double rectWidth;
         double rectHeight;
         JTable table;
         int row;
         int column;
         int x;
         int y;
         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
              if (value instanceof Number)
                   this.table = table;
                   this.row = row;
                   this.column = column;
                   Number numValue = (Number)value;
                   percentageValue = numValue.doubleValue();
                   rectHeight = table.getRowHeight(row);
                   rectWidth = percentageValue * table.getColumnModel().getColumn(column).getWidth();
              return this;
         public void paintComponent(Graphics g) {
            x = table.getCellRect(row, column, false).x;
            y = table.getCellRect(row, column, false).y;
              setOpaque(false);
            Graphics2D g2d = (Graphics2D)g;
            g2d.fillRect(x,y, new Double(rectWidth).intValue(), new Double(rectHeight).intValue());
            super.paintComponent(g);
    }and the following code produces a runnable example:
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    public class PercentageTestTable extends JFrame {
         public PercentageTestTable()
              Object[] columnNames = new Object[]{"A","B"};
              Object[][] tableData = new Object[][]{{0.25,0.5},{0.75,1.0}};
              DefaultTableModel testModel = new DefaultTableModel(tableData,columnNames);
              JTable test = new JTable(testModel);
              test.setDefaultRenderer(Object.class, new PercentageRepresentationRenderer());
              JScrollPane scroll = new JScrollPane();
              scroll.getViewport().add(test);
              add(scroll);
         public static void main(String[] args)
              PercentageTestTable testTable = new PercentageTestTable();
              testTable.pack();
              testTable.setVisible(true);
              testTable.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }If anyone could help or point me in the right direction, I'd appreciate it.
    Ruanae

    This is an example I published some while ago -
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.*;
    public class Fred120 extends JPanel
        static final Object[][] tableData =
            {1, new Double(10.0)},
            {2, new Double(20.0)},
            {3, new Double(50.0)},
            {4, new Double(10.0)},
            {5, new Double(95.0)},
            {6, new Double(60.0)},
        static final Object[] headers =
            "One",
            "Two",
        public Fred120() throws Exception
            super(new BorderLayout());
            final DefaultTableModel model = new DefaultTableModel(tableData, headers);
            final JTable table = new JTable(model);
            table.getColumnModel().getColumn(1).setCellRenderer( new LocalCellRenderer(120.0));
            add(table);
            add(table.getTableHeader(), BorderLayout.NORTH);
        public class LocalCellRenderer extends DefaultTableCellRenderer
            private double v = 0.0;
            private double maxV;
            private final JPanel renderer = new JPanel(new GridLayout(1,0))
                public void paintComponent(Graphics g)
                    super.paintComponent(g);
                    g.setColor(Color.CYAN);
                    int w = (int)(getWidth() * v / maxV + 0.5);
                    int h = getHeight();
                    g.fillRect(0, 0, w, h);
                    g.drawRect(0, 0, w, h);
            private LocalCellRenderer(double maxV)
                this.maxV = maxV;
                renderer.add(this);
                renderer.setOpaque(true);
                renderer.setBackground(Color.YELLOW);
                renderer.setBorder(null);
                setOpaque(false);
                setHorizontalAlignment(JLabel.CENTER);
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col)
                final JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
                if (value instanceof Double)
                    v = ((Double)value).doubleValue();
                return renderer;
        public static void main(String[] args) throws Exception
            final JFrame frame = new JFrame("Fred120");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setContentPane(new Fred120());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
    }

  • Update JTable - Cell

    i tried out the sample http://java.sun.com/docs/books/tutorial/uiswing/components/example-swing/TableDemo.java. if i enter a new value and klick into another cell of the table all works fine. if i click on the table header after editing the cell the old value appears in the cell. if i enter signs directly after the click on the table header the text appended to the old value of the edited cell.
    i hope, anybody can help me.

    Hmm, the suggestion given above appears to work when focus is gained on all other components, so the table header must have to logic to "cancel" cell editing. You can add your own MouseListener to "save" the edited data to the table header:
    table.getTableHeader().addMouseListener( new MouseAdapter()
         public void mousePressed(MouseEvent e)
              JTableHeader header = (JTableHeader)e.getSource();
              JTable table = header.getTable();
              if (table.isEditing())
                   table.getCellEditor().stopCellEditing();
    });

  • Update jtable cell via numeric keypad

    Hi,
    I have a problem, trying to figure out how to input numbers in a jtextfield in a jtable cell, from a group of jbuttons (rendered as a numeric keypad). I can get the cell to focus, but when I click on one of the jbuttons in the keypad, the cell loses focus and nothing is printed. I can update the cell by directly typing from the keyboard; that works fine. But I'm lost when trying to do it from the touch-screen keypad. Can anyone point me in the right direction. I assume I need to attach additional listeners somewhere.
    Thanks in-advance.
    Lee

    I can get the cell to focus, Then the code for you button would need to be something like:
    String text = (String)table.getValueAt(...);
    String updated = text + button.getText();
    table.setValueAt(updated, ...);

  • Edit a JTable cell, click save button, value isn't stored in JTable

    I'm editing a JTable cell, just using default editor provided by JTable
    I click a save button elsewhere in my GUI
    The value typed into the cell so far isn't stored in the TableModel yet and so doesn't get saved.
    How can I make sure the value gets stored in the JTable in the above scenario when the JButton is pressed but before saving.
    Preferably I'd like the code with the JButton not to have to know about the JTable at all.
    Cheers,
    D

    I the forums 100s of times.Many thanks. If they had a decent search on this forum I might have found it as I did try.
    Come to think of it - Sun have completely fcukd up this forum.

  • How to write an element in a  JTable Cell

    Probably it's a stupid question but I have this problem:
    I have a the necessity to build a JTable in which, when I edit a cell and I push a keyboard button, a new Frame opens to edit the content of the cell.
    But the problem is how to write something in the JTable cell, before setting its model. Because, I know, setCellAT() method of JTree inserts the value in the model and not in the table view. And repainting doesn't function!
    What to do??
    Thanks

    Hi there
    Depending on your table model you should normally change the "cell value" of the tablemodel.
    This could look like:
    JTable table = new JTable();
    TableModel model = table.getModel();
    int rowIndex = 0, columnIndex = 0;
    model.setValueAt("This is a test", rowIndex, columnIndex);
    The tablemodel should then fire an event to the view (i.e. JTable) and the table should be updated.
    Hope this helps you

  • Problem in event handling of combo box in JTable cell

    Hi,
    I have a combo box as an editor for a column cells in JTable. I have a event listener for this combo box. When ever I click on the JTable cell whose editor is combo box,
    I get the following exception,
    Exception occurred during event dispatching:
    java.lang.NullPointerException
         at javax.swing.plaf.basic.BasicTableUI$MouseInputHandler.setDispatchComponent(Unknown Source)
         at javax.swing.plaf.basic.BasicTableUI$MouseInputHandler.mousePressed(Unknown Source)
         at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
         at java.awt.Component.processMouseEvent(Unknown Source)
         at java.awt.Component.processEvent(Unknown Source)
         at java.awt.Container.processEvent(Unknown Source)
         at java.awt.Component.dispatchEventImpl(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
         at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
         at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.EventQueue.dispatchEvent(Unknown Source)
         at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.run(Unknown Source)
    Can any one tell me how to over come this problem.
    Thanks,
    Raghu

    Here's an example of the model I used in my JTable. I've placed 2 comboBoxes with no problems.
    Hope this helps.
    public class FileModel5 extends AbstractTableModel
    public boolean isEditable = false;
    protected static int NUM_COLUMNS = 3;
    // initialize number of rows to start out with ...
    protected static int START_NUM_ROWS = 0;
    protected int nextEmptyRow = 0;
    protected int numRows = 0;
    static final public String file = "File";
    static final public String mailName = "Mail Id";
    static final public String postName = "Post Office Id";
    static final public String columnNames[] = {"File", "Mail Id", "Post Office Id"};
    // List of data
    protected Vector data = null;
    public FileModel5()
    data = new Vector();
    public boolean isCellEditable(int rowIndex, int columnIndex)
    // The 2nd & 3rd column or Value field is editable
    if(isEditable)
    if(columnIndex > 0)
    return true;
    return false;
    * JTable uses this method to determine the default renderer/
    * editor for each cell. If we didn't implement this method,
    * then the last column would contain text ("true"/"false"),
    * rather than a check box.
    public Class getColumnClass(int c)
    return getValueAt(0, c).getClass();
    * Retrieves number of columns
    public synchronized int getColumnCount()
    return NUM_COLUMNS;
    * Get a column name
    public String getColumnName(int col)
    return columnNames[col];
    * Retrieves number of records
    public synchronized int getRowCount()
    if (numRows < START_NUM_ROWS)
    return START_NUM_ROWS;
    else
    return numRows;
    * Returns cell information of a record at location row,column
    public synchronized Object getValueAt(int row, int column)
    try
    FileRecord5 p = (FileRecord5)data.elementAt(row);
    switch (column)
    case 0:
    return (String)p.file;
    case 1:
    return (String)p.mailName;
    case 2:
    return (String)p.postName;
    catch (Exception e)
    return "";
    public void setValueAt(Object aValue, int row, int column)
    FileRecord5 arow = (FileRecord5)data.elementAt(row);
    arow.setElementAt((String)aValue, column);
    fireTableCellUpdated(row, column);
    * Returns information of an entire record at location row
    public synchronized FileRecord5 getRecordAt(int row) throws Exception
    try
    return (FileRecord5)data.elementAt(row);
    catch (Exception e)
    throw new Exception("Record not found");
    * Used to add or update a record
    * @param tableRecord
    public synchronized void updateRecord(FileRecord5 tableRecord)
    String file = tableRecord.file;
    FileRecord5 p = null;
    int index = -1;
    boolean found = false;
    boolean addedRow = false;
    int i = 0;
    while (!found && (i < nextEmptyRow))
    p = (FileRecord5)data.elementAt(i);
    if (p.file.equals(file))
    found = true;
    index = i;
    } else
    i++;
    if (found)
    { //update
    data.setElementAt(tableRecord, index);
    else
    if (numRows <= nextEmptyRow)
    //add a row
    numRows++;
    addedRow = true;
    index = nextEmptyRow;
    data.addElement(tableRecord);
    //Notify listeners that the data changed.
    if (addedRow)
    nextEmptyRow++;
    fireTableRowsInserted(index, index);
    else
    fireTableRowsUpdated(index, index);
    * Used to delete a record
    public synchronized void deleteRecord(String file)
    FileRecord5 p = null;
    int index = -1;
    boolean found = false;
    int i = 0;
    while (!found && (i < nextEmptyRow))
    p = (FileRecord5)data.elementAt(i);
    if (p.file.equals(file))
    found = true;
    index = i;
    } else
    i++;
    if (found)
    data.removeElementAt(i);
    nextEmptyRow--;
    numRows--;
    fireTableRowsDeleted(START_NUM_ROWS, numRows);
    * Clears all records
    public synchronized void clear()
    int oldNumRows = numRows;
    numRows = START_NUM_ROWS;
    data.removeAllElements();
    nextEmptyRow = 0;
    if (oldNumRows > START_NUM_ROWS)
    fireTableRowsDeleted(START_NUM_ROWS, oldNumRows - 1);
    fireTableRowsUpdated(0, START_NUM_ROWS - 1);
    * Loads the values into the combo box within the table for mail id
    public void setUpMailColumn(JTable mapTable, ArrayList mailList)
    TableColumn col = mapTable.getColumnModel().getColumn(1);
    javax.swing.JComboBox comboMail = new javax.swing.JComboBox();
    int s = mailList.size();
    for(int i=0; i<s; i++)
    comboMail.addItem(mailList.get(i));
    col.setCellEditor(new DefaultCellEditor(comboMail));
    //Set up tool tips.
    DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
    renderer.setToolTipText("Click for mail Id list");
    col.setCellRenderer(renderer);
    //Set up tool tip for the mailName column header.
    TableCellRenderer headerRenderer = col.getHeaderRenderer();
    if (headerRenderer instanceof DefaultTableCellRenderer)
    ((DefaultTableCellRenderer)headerRenderer).setToolTipText(
    "Click the Mail Id to see a list of choices");
    * Loads the values into the combo box within the table for post office id
    public void setUpPostColumn(JTable mapTable, ArrayList postList)
    TableColumn col = mapTable.getColumnModel().getColumn(2);
    javax.swing.JComboBox combo = new javax.swing.JComboBox();
    int s = postList.size();
    for(int i=0; i<s; i++)
    combo.addItem(postList.get(i));
    col.setCellEditor(new DefaultCellEditor(combo));
    //Set up tool tips.
    DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
    renderer.setToolTipText("Click for post office Id list");
    col.setCellRenderer(renderer);
    //Set up tool tip for the mailName column header.
    TableCellRenderer headerRenderer = col.getHeaderRenderer();
    if (headerRenderer instanceof DefaultTableCellRenderer)
    ((DefaultTableCellRenderer)headerRenderer).setToolTipText(
    "Click the Post Office Id to see a list of choices");
    }

  • Start or stop edit jtable cell editing

    Hello,
    I got a problem with the jtable DefaultModel isCellEditable.
    If I set the IsCellEditable to false, I would not be able to enable the cell selection as and when I want it.
    What I have in mind is the add a mouselister so that if the user select a row using fast left mouse click like the procedure shown below
    private class MouseClickHandler extends MouseAdapter {
    public void mouseClicked(MouseEvent event) {
    int no_mouseclick = 0;
    no_mouseclick = event.getClickCount();
    if (no_mouseclick >= 2) {
    int cur_row = 0;
    cur_row = table.getSelectedRow();
    // table.setColumnSelectionAllowed(true);
    // table.setRowSelectionAllowed(true);
    for (int i=0;i<table.getColumnCount();i++){
    table.editCellAt(cur_row,i);
    System.out.println("mouse row--->" + cur_row);
    I could overwrite the IsCellEditable to true to enable that particular or cell contains in that row to be able to accept input and overwrite any data which in my case obtained from the Sql database a sort of like input module using tabulation . I am also thinking of using text component or combobox to display the value for user selection , but I do not know how to enable a particular cell for editing if the Jtable created is using a non-editable DefaultModel. If I set the IsCellEditable to true, every single cell would be enable for editing , and this defeat the purpose of enable user input only upon double mouseclicks.
    By the way , I am interested to know how to track the data changes in the cell within the jtable so that only those have been modified are notify from the Table model and updated into the Sql table
    Could anyone of you out there provide some hints please
    Thanks

    Hello,
    Tablemodellistener could detect the changes in the data, how about the backend database updating and transactional activity that must be associated with the data changes?
    What is on my mind is that , the moment there is changes in the data detected by the TableModellistener, whatever records associated with or brougt up by Jtable would be all deleted from the database and then follow by the new set of new records to be inserted into the database. The disadvantage of this method is that everytime the backend database connection and activity need to be executed the moment there is a change in the data in the jtable cell. For example the user may be just amendment to only one cell , but all the records associated need to be deleted and then inserted again.
    Perhaps there are better solution to deal with Jtable and JDBC backend connection where in this case, I am using JDO to undertake the database activity like the observable modelling .
    Could someone provide the hint please
    Thank

  • Can not show the JCheckBox in JTable cell

    I want to place a JCheckBox in one JTable cell, i do as below:
    i want the column "d" be a check box which indicates "true" or "false".
    String[] columnNames = {"a","b","c","d"};
    Object[][] rowData = {{"", "", "", Boolean.FALSE}};
    tableModel = new DefaultTableModel(rowData, columnNames);
    dataTable = new JTable(tableModel);
    dataTable.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(new JCheckBox()));
    But when i run it, the "d" column show the string "false" or "true", not the check box i wanted.
    I do not understand it, can you help me?
    Thank you very much!
    coral9527

    Do not use DefaultTableModel, create your own table model and you should implement the method
    getColumnClass to display the boolean as checkbox ...
    I hope the following colde snippet helps you :
    class MyModel extends AbstractTableModel {
              private String[] columnNames = {"c1",
    "c2"};
    public Object[][] data ={{Boolean.valueOf(true),"c1d1"}};
         public int getColumnCount() {
         //System.out.println("Calling getColumnCount");
         return columnNames.length;
    public int getRowCount() {
    //System.out.println("Calling row count");
    return data.length;
    public String getColumnName(int col) {
    return columnNames[col];
    public Object getValueAt(int row, int col) {
    return data[row][col];
    * JTable uses this method to determine the default renderer/
    * editor for each cell. If we didn't implement this method,
    * then the last column would contain text ("true"/"false"),
    * rather than a check box.
    public Class getColumnClass(int c) {
    return getValueAt(0, c).getClass();
    * Don't need to implement this method unless your table's
    * editable.
    public boolean isCellEditable(int row, int col) {
    //Note that the data/cell address is constant,
    //no matter where the cell appears onscreen.
    return true;
    * Don't need to implement this method unless your table's
    * data can change.
    public void setValueAt(Object value, int row, int col) {
    data[row][col] = value;
    fireTableCellUpdated(row, col);

Maybe you are looking for

  • After I open itune i then try to access either the itune store or the app store i get a message saying "ITunes has stopped working"

    After I open ITunes if I try to connect to the ITunes store or the App Store i get an error message. It reads "ITunes Has Stopped Working" "A problem caused the priogram to stop workin correctly. Windows will close the program and notify if a solutio

  • Exit or BADI for operation in PM

    Hi All, I am searching for a User Exit or BADI to get the changes made  in operation tab of IW32. so that if any changes found I can send a mail to respective person . Thanks in Advance, Abhaya

  • Can anyone shed some light on the bizarre filing system?

    Ive been using Iphoto for years and have yet to ask or figure out the file naming system.. for instance under 2002 there are a ton of folders that are named as a number and inside of thise more of the same. I cant figure out WHAT the logic is? Enligh

  • Adaptec 3405 / Quantum LTO-4 abend

    I am running netware 6.5 Sp6 with Backup Exec 9.2. I am replacing an Quantum LTO-2 drive with an Quantum LTO-4 SAS drive with an Adaptec 3405 controler. I am able to get about 10GB into the backup and then it abends the server. Here is some of the ab

  • Laptop doesnt shut down properly or sleep

    There seems to be a big problem with my laptop. It seems to not shut down properly, or awake from sleep properly. When it goes to sleep, you need to hold down the power button to turn it off, then turn it back on again Also when you shut it down, the