首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中JTable两个细胞间的增殖

Java中JTable两个细胞间的增殖
EN

Stack Overflow用户
提问于 2013-01-11 17:11:31
回答 2查看 2.9K关注 0票数 0

当我在列的第一行“单位”和“价格”的单元格中输入值时,列“金额”;列单元格值应设置为单位和金额的乘积。我应该用哪一个听众?请帮助我,因为我刚接触Java。

代码:

代码语言:javascript
复制
 JTable jTable1;
 DefaultTableModel mod=new DefaultTableModel();
        mod.addColumn("No");
        mod.addColumn("Item ID");
        mod.addColumn("Units");
        mod.addColumn("Amount");
        mod.addColumn("UOM");
        mod.addColumn("Delivery Date");
        mod.addColumn("Total Amount");
        mod.addColumn("Notes");
        mod.addColumn("Received");
        mod.addRow(new Object [][] {
            {1, null, null, null, null, null, null, null, null}
        });
        jTable1.setModel(mod);
        jTable1.setColumnSelectionAllowed(true);
EN

回答 2

Stack Overflow用户

发布于 2013-01-11 18:02:12

其思想是实现一个TableModel,以便它自动返回单位和数量的乘积的结果。这里是我的意思的一个小演示(添加一个新的行,只需在表下面双击):

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class TestTable3 {

    protected void initUI() {
        final DefaultTableModel model = new DefaultTableModel() {

            @Override
            public Class<?> getColumnClass(int columnIndex) {
                switch (columnIndex) {
                case 0:
                    return Integer.class;
                case 1:
                case 2:
                    return Double.class;
                }
                return super.getColumnClass(columnIndex);
            }

            @Override
            public Object getValueAt(int row, int column) {
                if (column == 2) {
                    Integer i = (Integer) getValueAt(row, 0);
                    Double d = (Double) getValueAt(row, 1);
                    if (i != null && d != null) {
                        return i * d;
                    } else {
                        return 0.0;
                    }
                }
                return super.getValueAt(row, column);
            }

            @Override
            public boolean isCellEditable(int row, int column) {
                return column == 0 || column == 1;
            }

            @Override
            public void setValueAt(Object aValue, int row, int column) {
                super.setValueAt(aValue, row, column);
                fireTableCellUpdated(row, 2);
            }

            @Override
            public String getColumnName(int column) {
                switch (column) {
                case 0:
                    return "Quantity";
                case 1:
                    return "Price";
                case 2:
                    return "Total";
                }
                return super.getColumnName(column);
            }

            @Override
            public int getColumnCount() {
                return 3;
            }
        };
        final JTable table = new JTable(model);
        table.setFillsViewportHeight(true);
        table.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                    if (table.rowAtPoint(e.getPoint()) < 0) {
                        model.addRow(new Vector());
                    }
                }
            }
        });
        model.addRow(new Vector());
        JFrame frame = new JFrame(TestTable3.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane scrollpane = new JScrollPane(table);
        frame.add(scrollpane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
            UnsupportedLookAndFeelException {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestTable3().initUI();
            }
        });
    }

}

其结果是:

票数 4
EN

Stack Overflow用户

发布于 2013-01-11 17:22:09

当我在列的第一行“单位”和“价格”的单元格中输入值时,列“金额”;列单元格值应设置为单位和金额的乘积。

  • 看看TableModelListener
  • 必须阅读Oracle JTable教程
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14283192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档