本人以前没有做过swing的开发。现在做的项目有以下需求,不得其解,请牛人帮忙。
问题:
我有一个table,有N行,N列.当我在同一行的第4列,第5列输入数据后,第6列会自动输入一个数据.第6列的数据是,4,5列的和。
期待高人解答,要代码。

解决方案 »

  1.   


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.*;public class TestTableFrame extends JFrame 
    {
    private JTable table;
    private TableModel model;

    public TestTableFrame()
    {
    model = new DefaultTableModel(10, 10);
    model.addTableModelListener(new TableModelListener()
    {
    public void tableChanged(TableModelEvent event)
    {
    if (event.getColumn() == 3 || event.getColumn() == 4)
    {
    int row = event.getFirstRow();
    Object o1 = model.getValueAt(row, 3);
    Object o2 = model.getValueAt(row, 4);
    if (o1 == null || o2 == null)
    {
    return;
    }
    int num1 = Integer.parseInt((String) o1);
    int num2 = Integer.parseInt((String) o2);
    model.setValueAt(num1 + num2, row, 5);
    }
    }
    });
    table = new JTable(model);
    table.setRowSelectionAllowed(true);
    table.setColumnSelectionAllowed(true);
    add(new JScrollPane(table));
    }

    public static void main(String[] args)
    {
    JFrame frame = new TestTableFrame();
    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    }
      

  2.   

    其实并不复杂,大概如此:import java.awt.BorderLayout;import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;public class TestJTable extends JFrame {    private JTable table = new JTable(20, 6);    public TestJTable() {
            this.setSize(800, 600);
            table.getModel().addTableModelListener(new TableModelListener() {
                public void tableChanged(TableModelEvent e) {
                    int col = e.getColumn();
                    int row = e.getFirstRow(); // 可能会发生多行同时修改,但这里只考虑一行
                    if (col == 3 || col == 4) { // 因为列数从0开始算,所以要减一
                        double v4 = 0;
                        try {
                            v4 = Double.valueOf(String.valueOf(table.getValueAt(row, 3)));
                        } catch (NumberFormatException ex) { // 主要是防止输入的不是数值
                        }
                        double v5 = 0;
                        try {
                            v5 = Double.valueOf(String.valueOf(table.getValueAt(row, 4)));
                        } catch (NumberFormatException ex) { // 主要是防止输入的不是数值
                        }
                        table.setValueAt(v4 + v5, row, 5); // 设置值,如果规则没做好,可能会循环触发更新事件而导致调用栈溢出。
                    }
                }
            });
            this.add(table, BorderLayout.CENTER);
        }
        public static void main(String[] args) {
            TestJTable wnd = new TestJTable();
            wnd.setDefaultCloseOperation(EXIT_ON_CLOSE);
            wnd.setVisible(true);
        }
    }
      

  3.   

    http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#modelchange