http://www.cn-java.com/target/news.php?news_id=417

解决方案 »

  1.   

    我来了。还是 beyond_xiruo(希偌) 老兄知道的多啊。好我收藏。
    楼主揭贴。我就不要分了,。虽然帮你UP好几次/。
      

  2.   

    http://www.qigaonet.com/programsamp/java/swing/index.html
      

  3.   

    http://www2.gol.com/users/tame/swing/examples/SwingExamples.html
      

  4.   

    这个Swing 实例我早看过了,可是都没有添加记录的操作,也不是用的vector呀
      

  5.   

    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;import javax.swing.DefaultCellEditor;import javax.swing.JScrollPane;
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
    import java.awt.*;
    import java.awt.event.*;/**
     * This is exactly like TableDemo, except that it uses a
     * custom cell editor to validate integer input.
     */
    public class TableEditDemo extends JFrame {
        private boolean DEBUG = true;    public TableEditDemo() {
            super("TableEditDemo");        MyTableModel myModel = new MyTableModel();
            JTable table = new JTable(myModel);
            table.setPreferredScrollableViewportSize(new Dimension(500, 70));        //Create the scroll pane and add the table to it. 
            JScrollPane scrollPane = new JScrollPane(table);        //Set up real input validation for the integer column.
            setUpIntegerEditor(table);        //Add the scroll pane to this window.
            getContentPane().add(scrollPane, BorderLayout.CENTER);        addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        }    private void setUpIntegerEditor(JTable table) {
            //Set up the editor for the integer cells.
            final WholeNumberField integerField = new WholeNumberField(0, 5);
            integerField.setHorizontalAlignment(WholeNumberField.RIGHT);        DefaultCellEditor integerEditor = 
                new DefaultCellEditor(integerField) {
                    //Override DefaultCellEditor's getCellEditorValue method
                    //to return an Integer, not a String:
                    public Object getCellEditorValue() {
                        return new Integer(integerField.getValue());
                    }
                };
            table.setDefaultEditor(Integer.class, integerEditor);
        }    class MyTableModel extends AbstractTableModel {
            final String[] columnNames = {"First Name", 
                                          "Last Name",
                                          "Sport",
                                          "# of Years",
                                          "Vegetarian"};
            final Object[][] data = {
                {"Mary", "Campione", 
                 "Snowboarding", new Integer(5), new Boolean(false)},
                {"Alison", "Huml", 
                 "Rowing", new Integer(3), new Boolean(true)},
                {"Kathy", "Walrath",
                 "Chasing toddlers", new Integer(2), new Boolean(false)},
                {"Sharon", "Zakhour",
                 "Speed reading", new Integer(20), new Boolean(true)},
                {"Angela", "Lih",
                 "Teaching high school", new Integer(4), new Boolean(false)}
            };        public int getColumnCount() {
                return columnNames.length;
            }
            
            public int getRowCount() {
                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.
                if (col < 2) { 
                    return false;
                } else {
                    return true;
                }
            }        public void setValueAt(Object value, int row, int col) {
                if (DEBUG) {
                    System.out.println("Setting value at " + row + "," + col
                                       + " to " + value
                                       + " (an instance of " 
                                       + value.getClass() + ")");
                }            data[row][col] = value;
                fireTableCellUpdated(row, col);            if (DEBUG) {
                    System.out.println("New value of data:");
                    printDebugData();
                }
            }        private void printDebugData() {
                int numRows = getRowCount();
                int numCols = getColumnCount();            for (int i=0; i < numRows; i++) {
                    System.out.print("    row " + i + ":");
                    for (int j=0; j < numCols; j++) {
                        System.out.print("  " + data[i][j]);
                    }
                    System.out.println();
                }
                System.out.println("--------------------------");
            }
        }    public static void main(String[] args) {
            TableEditDemo frame = new TableEditDemo();
            frame.pack();
            frame.setVisible(true);
        }
    }
      

  6.   

    楼上给的代码,表格怎么不能编辑呢?那个WholeNumberField 又是什么呢?小弟初学java,大家帮帮忙把,感激不尽!
      

  7.   

    不好意思,还一个文件:
    import javax.swing.*; 
    import javax.swing.text.*; import java.awt.Toolkit;
    import java.text.NumberFormat;
    import java.text.ParseException;
    import java.util.Locale;public class WholeNumberField extends JTextField {
        private Toolkit toolkit;
        private NumberFormat integerFormatter;    public WholeNumberField(int value, int columns) {
            super(columns);
            toolkit = Toolkit.getDefaultToolkit();
            integerFormatter = NumberFormat.getNumberInstance(Locale.US);
            integerFormatter.setParseIntegerOnly(true);
            setValue(value);
        }    public int getValue() {
            int retVal = 0;
            try {
                retVal = integerFormatter.parse(getText()).intValue();
            } catch (ParseException e) {
                // This should never happen because insertString allows
                // only properly formatted data to get in the field.
                toolkit.beep();
            }
            return retVal;
        }    public void setValue(int value) {
            setText(integerFormatter.format(value));
        }    protected Document createDefaultModel() {
            return new WholeNumberDocument();
        }    protected class WholeNumberDocument extends PlainDocument {
            public void insertString(int offs, 
                                     String str,
                                     AttributeSet a) 
                    throws BadLocationException {
                char[] source = str.toCharArray();
                char[] result = new char[source.length];
                int j = 0;            for (int i = 0; i < result.length; i++) {
                    if (Character.isDigit(source[i]))
                        result[j++] = source[i];
                    else {
                        toolkit.beep();
                        System.err.println("insertString: " + source[i]);
                    }
                }
                super.insertString(offs, new String(result, 0, j), a);
            }
        }
    }
      

  8.   

    为什么还是不能编辑呀?我已经折了isCellEditable,改成return true了
      

  9.   

    我希望每列都可以编辑呀,所以直接
    public boolean isCellEditable(int row, int col) {return true;}
    seani(Jason) 你有没有email或者qq呀?我的室[email protected],我发给你看看好吗?
      

  10.   

    我给你一个简单的例子,你一看就明白了
    import java.awt.*;
    import javax.swing.*;
    public class JTableDemo extends JApplet {  public void init() {    // Get content pane
        Container contentPane = getContentPane();    // Set layout manager
        contentPane.setLayout(new BorderLayout());    // Initialize column headings
        final String[] colHeads = { "Name", "Phone", "Fax" };    // Initialize data
        final Object[][] data = {
          { "Gail", "4567", "8675" },
          { "Ken", "7566", "5555" },
          { "Viviane", "5634", "5887" },
          { "Melanie", "7345", "9222" },
          { "Anne", "1237", "3333" },
          { "John", "5656", "3144" },
          { "Matt", "5672", "2176" },
          { "Claire", "6741", "4244" },
          { "Erwin", "9023", "5159" },
          { "Ellen", "1134", "5332" },
          { "Jennifer", "5689", "1212" },
          { "Ed", "9030", "1313" },
          { "Helen", "6751", "1415" }
        };    // Create the table
        JTable table = new JTable(data, colHeads);    // Add tree to a scroll pane
        int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
        int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
        JScrollPane jsp = new JScrollPane(table, v, h);    // Add scroll pane to the content pane
        contentPane.add(jsp, BorderLayout.CENTER);
      }
    }
    然后再网页上加上