Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #5329
| 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 |
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
Re: JTable.addRow(Vector) programa.2013@gmail.com - 2013-04-25 17:33 -0700
csiph-web