Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.gui > #5329

Re: JTable.addRow(Vector)

Newsgroups comp.lang.java.gui
Date 2013-04-25 17:33 -0700
References <6357aace-f0c6-4256-9b0f-f30dd8ec53ce@r24g2000yqd.googlegroups.com>
Message-ID <a570f32d-3ee7-43dc-8f90-a2bcec4092e0@googlegroups.com> (permalink)
Subject Re: JTable.addRow(Vector)
From programa.2013@gmail.com

Show all headers | View raw


El viernes, 22 de enero de 2010 14:33:37 UTC-5, RVince  escribió:
> I jave a JTable on a JPanel which has a JButton to add a row to the
> table -- the JButton implements actionListener, with the following
> code to add the row:
> 
>    Vector rowData = new Vector();
>    rowData.add("");
>    rowData.add(Double.toString(account.getDefaultallocation()));
>    rowData.add(Integer.toString(minlotsize));
>    rowData.add("0");
>    rowData.add("0");
>    rowData.add("0");
>    DefaultTableModel model = (AccountSlotsTableModel)
> iam.accountSlots.table.getModel();
>    try{
>     model.addRow(rowData);
>    }catch(Exception ex){
>     log.error(getStackTrace(ex));
>    }
> 
>  My table initially has NO rows. So,the first row, and all subsequent
> rows, are to be created by hitting this JButton. However, when the
> JButton is clicked, the try-catch catches the followign stack trace:
> 
> java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
>  at java.util.Vector.elementAt(Unknown Source)
>  at javax.swing.table.DefaultTableModel.justifyRows(Unknown Source)
>  at javax.swing.table.DefaultTableModel.insertRow(Unknown Source)
>  at javax.swing.table.DefaultTableModel.addRow(Unknown Source)
>  at com.leveragespacemodel.Gravity.actionPerformed(Gravity.java:967)
>  at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
>  at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
>  at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
>  at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
>  at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
> Source)
>  at java.awt.Component.processMouseEvent(Unknown Source)
>  at javax.swing.JComponent.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.Window.dispatchEventImpl(Unknown Source)
>  at java.awt.Component.dispatchEvent(Unknown Source)
>  at java.awt.EventQueue.dispatchEvent(Unknown Source)
>  at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
> Source)
>  at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
>  at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
> Source)
>  at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
>  at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
>  at java.awt.EventDispatchThread.run(Unknown Source)
> 
> 
> I am at a complete loss as to how this can occur, or how to stop it.
> Does anyone have any insight here on this? Below, I have posted my
> JTable on TableModel code corresponding to this problem. Thans so
> much, RVince.
> 
> import java.awt.LayoutManager;
> 
> import javax.swing.DefaultCellEditor;
> import javax.swing.JComboBox;
> import javax.swing.JPanel;
> import javax.swing.JFrame;
> import javax.swing.JPanel;
> import javax.swing.JScrollPane;
> import javax.swing.JTable;
> import javax.swing.table.AbstractTableModel;
> import javax.swing.table.DefaultTableModel;
> import javax.swing.table.TableCellRenderer;
> import javax.swing.table.TableColumn;
> 
> import java.awt.Component;
> import java.awt.Dimension;
> import java.awt.GridLayout;
> import java.util.ArrayList;
> import java.util.Vector;
> 
> public class AccountSlots extends JPanel {
>  public JTable table;
> 
>  /** are we setting values based uopn a table read right now? */
>  private boolean reading;
> 
>  public AccountSlots(LayoutManager arg0) {
>   super(arg0);
>  }
> 
>  public AccountSlots(boolean arg0) {
>   super(arg0);
>  }
> 
>  public AccountSlots(LayoutManager arg0, boolean arg1) {
>   super(arg0, arg1);
>  }
> 
>  public AccountSlots() {
>   super(new GridLayout(1, 0));
>   table = new JTable(new AccountSlotsTableModel());
> 
>   TableColumn col = table.getColumnModel().getColumn(0);
>   col.setWidth(100);
>   col.setPreferredWidth(100);
>   col = table.getColumnModel().getColumn(1);
>   col.setWidth(50);
>   col.setPreferredWidth(50);
>   col = table.getColumnModel().getColumn(2);
>   col.setWidth(50);
>   col.setPreferredWidth(50);
>   col = table.getColumnModel().getColumn(3);
>   col.setWidth(50);
>   col.setPreferredWidth(50);
>   col = table.getColumnModel().getColumn(4);
>   col.setWidth(50);
>   col.setPreferredWidth(50);
>   col = table.getColumnModel().getColumn(5);
>   col.setWidth(50);
>   col.setPreferredWidth(50);
> 
>   table.setPreferredScrollableViewportSize(new Dimension(325, 70));
>   table.setFillsViewportHeight(true);
> 
>   // Create the scroll pane and add the table to it.
>   JScrollPane scrollPane = new JScrollPane(table);
> 
>   // Add the scroll pane to this panel.
>   add(scrollPane);
>  }
> 
>  public void setEditorsandRenderers(Object [] o) {
>   String[] values = new String[o.length];
>   for (int i=0;i<o.length;i++){
>    values[i]=o[i].toString();
>   }
>   // Set the combobox editor on the 1st visible column
>   int vColIndex = 0;
>   TableColumn col = table.getColumnModel().getColumn(vColIndex);
>   col.setCellEditor(new MyComboBoxEditor(values));
>   // If the cell should appear like a combobox in its
>   // non-editing state, also set the combobox renderer
>   col.setCellRenderer(new MyComboBoxRenderer(values));
>  }
> 
>  public class MyComboBoxRenderer extends JComboBox implements
> TableCellRenderer {
>   public MyComboBoxRenderer(String[] items) {
>    super(items);
>   }
> 
>   public Component getTableCellRendererComponent(JTable table, Object
> value, boolean isSelected, boolean hasFocus, int row, int column) {
>    if (isSelected) {
>     setForeground(table.getSelectionForeground());
>     super.setBackground(table.getSelectionBackground());
>    } else {
>     setForeground(table.getForeground());
>     setBackground(table.getBackground());
>    }
>    // Select the current value
>    setSelectedItem(value);
>    return this;
>   }
>  }
> 
>  public class MyComboBoxEditor extends DefaultCellEditor {
>   public MyComboBoxEditor(String[] items) {
>    super(new JComboBox(items));
>   }
>  }
> 
>  class AccountSlotsTableModel extends DefaultTableModel {
>   private String[] columnNames = { I18N.rb.getString("component"),
> I18N.rb.getString("allocation"), I18N.rb.getString("minlotsize"),
> I18N.rb.getString("nmbrbreaks"), I18N.rb.getString("volatility"),
> I18N.rb.getString("lastdayonfile"), I18N.rb.getString("quantity"),
> I18N.rb.getString("avgprice") };
>   private Vector data;
> 
>   public void setData(Vector data) {
>    this.data = data;
>   }
> 
>   public int getColumnCount() {
>    return columnNames.length;
>   }
> 
>   public int getRowCount() {
>    if(data==null){
>     return 0;
>    }
>    return data.size();
>   }
> 
>   public String getColumnName(int col) {
>    return columnNames[col];
>   }
> 
>   public Object getValueAt(int row, int col) {
>    if (row >= data.size()) {
>     return null;
>    }
>    Slot slot = (Slot) data.get(row);
>    switch (col) {
>    case 0:
>     return slot.issue.componentName;
>    case 1:
>     return slot.allocation;
>    case 2:
>     return slot.minlotsize;
>    case 3:
>     return slot.nmbrbreaks;
>    case 4:
>     return slot.issue.volatility;
>    case 5:
>     return slot.issue.lastprice;
>    case 6:
>     return slot.quantity;
>    case 7:
>     return slot.avgprice;
>    default:
>     return null;
>    }
>   }
> 
>   /*
>    * 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.
>    switch (col) {
>    case 0:
>     return true;
>    case 1:
>     return true;
>    case 2:
>     return true;
>    case 3:
>     return true;
>    case 4:
>     return false;
>    case 5:
>     return false;
>    case 6:
>     return false;
>    case 7:
>     return false;
>    default:
>     return false;
>    }
>   }
> 
>   /*
>    * Don't need to implement this method unless your table's data can
>    * change.
>    */
>   public void setValueAt(Object value, int row, int col) {
>    Slot slot = (Slot) data.get(row);
>    switch (col) {
>    case 0:
>     slot.issue.componentName = (String) value;
>    case 1:
>     if (!isReading()) {
>      slot.allocated = true;
>     }
>     slot.allocation = ((Double) value).doubleValue();
>    case 2:
>     slot.minlotsize = ((Integer) value).intValue();
>    case 3:
>     slot.nmbrbreaks = ((Integer) value).intValue();
>    case 6:
>     slot.quantity = ((Integer) value).intValue();
>    case 7:
>     slot.avgprice = ((Double) value).doubleValue();
>    default:
>     break;
>    }
>    fireTableCellUpdated(row, col);
>   }
> 
>  }
> 
>  public boolean isReading() {
>   return reading;
>  }
> 
>  public void setReading(boolean reading) {
>   this.reading = reading;
>  }
> 
>  /**
>   * Create the GUI and show it. For thread safety, this method should
> be
>   * invoked from the event-dispatching thread.
>   */
>  private static void createAndShowGUI() {
>   // Create and set up the window.
>   JFrame frame = new JFrame("TableDemo");
>   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
> 
>   // Create and set up the content pane.
>   AccountSlots newContentPane = new AccountSlots();
>   newContentPane.setOpaque(true); // content panes must be opaque
>   frame.setContentPane(newContentPane);
> 
>   // Display the window.
>   frame.pack();
>   frame.setVisible(true);
>  }
> 
>  public static void main(String[] args) {
>   // Schedule a job for the event-dispatching thread:
>   // creating and showing this application's GUI.
>   javax.swing.SwingUtilities.invokeLater(new Runnable() {
>    public void run() {
>     createAndShowGUI();
>    }
>   });
>  }
> 
> }

Back to comp.lang.java.gui | Previous | Next | Find similar


Thread

Re: JTable.addRow(Vector) programa.2013@gmail.com - 2013-04-25 17:33 -0700

csiph-web