【问题标题】:JTable runtime calculation?JTable 运行时计算?
【发布时间】:2013-06-30 01:50:36
【问题描述】:

这是我的小组项目部分。当我输入客户 ID 并按 OK 时,客户详细信息以表格格式显示。该表包含如下列:星期日、费率、星期六、 率,其他,率之类的。

我的问题是我想输入整数,计算它,然后将它存储在数据库中。表示表中的运行时间我要输入数字,计算并需要存储在数据库中。该怎么办?提前致谢。

 import java.awt.BorderLayout;
 import java.awt.EventQueue;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.sql.*;
 import javax.swing.*;
 import javax.swing.event.CellEditorListener;
 import javax.swing.event.ChangeEvent;
 import javax.swing.table.DefaultTableModel;
 public class TestTable 
 {
public static void main(String[] args) 
{
    TestTable testTable = new TestTable();
}
public TestTable() 
{
    EventQueue.invokeLater(new Runnable() 
    {
        @Override
        public void run() 
        {
            try
            {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            }
            JFrame frame = new JFrame("Testing");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());
            frame.add(new TestTable.Bill());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    });
}    
public class Bill extends JPanel implements ActionListener ,CellEditorListener  
{
    JTextField textFieldId;
    JLabel l1;
    JLabel l2;
    JButton b1,b2,b3;
    JTextField sun,sunr,sat,satr,oth,othr;
    float sum1,totall;
    ResultSet rs1 = null;
    DefaultTableModel model = new DefaultTableModel();       
    private int rows;
    Double value;
    public Bill() 
    {
        setLayout(new BorderLayout());            
        JPanel fields = new JPanel();
        textFieldId = new JTextField(10);
        l1 = new JLabel("New Customer Entry :-");
        l2 = new JLabel("Customer Id");
        b1 = new JButton("OK");
        b2 = new JButton("Calculate");
        b3 = new JButton("Print");
        fields.add(l2);
        fields.add(textFieldId);
        fields.add(b1);
        fields.add(b2);
        fields.add(b3);
        add(fields, BorderLayout.NORTH);
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);
        // Don't forget to add a table.
        add(new JScrollPane(new JTable(model)));
    }
    @Override
    public void actionPerformed(ActionEvent e) 
    {
        System.out.println("You clicked the button");
        Connection con;
        if (e.getSource() == b1) 
        {
            PreparedStatement ps = null;
            Statement stmt = null;
            try 
            {

                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                con = DriverManager.getConnection("jdbc:odbc:devendra");
                ps = con.prepareStatement("SELECT  * FROM Customer where Customer_Id = ?");
                // You must bind the parameter with a value...
                ps.setString(1, textFieldId.getText());
                rs1 = ps.executeQuery();
                model.addColumn("Customer_Id");
                model.addColumn("Customer_Name");
                model.addColumn("Contact");
                model.addColumn("Paper_Name");
                model.addColumn("Sunday");
                model.addColumn("Rate");
                model.addColumn("Satarday");
                model.addColumn("Rate");
                model.addColumn("Other Day");
                model.addColumn("Rate");
                model.addColumn("Price");
                model.setRowCount(0);
                while (rs1.next()) 
                {                           
                        model.addRow(new Object[]{rs1.getString(1),rs1.getString(2),rs1.getString(3),rs1.getString(4),rs1.getString(5),
                            rs1.getString(6),rs1.getString(7),rs1.getString(8),rs1.getString(9),rs1.getString(10)});
                }
             //   Vector data = model.getDataVector();

                JOptionPane.showMessageDialog(null, "You successfully Enter the Entry");
            } 
            catch (SQLException s) 
            {
                System.out.println("SQL code does not execute.");
                JOptionPane.showMessageDialog(null, "Please Enter the Detail Correctly");
            } catch (Exception exp) 
            {
                JOptionPane.showMessageDialog(this, "Failed to perform query: " + exp.getMessage());
            } finally 
            {
                try {
                    ps.close();
                } 
                catch (Exception ex)
                {
                }
            }                
        } 
        if (e.getSource() == b2)     
        {
             int rowCount = model.getRowCount();


             for(int i =1; i<rowCount;i++)
             {
                 Double valuea = (Double) model.getValueAt(i, 5 );
                 Double valueb = (Double) model.getValueAt(i, 6 );
                 Double valuec = (Double) model.getValueAt(i, 7 );
                 Double valued = (Double) model.getValueAt(i, 8 );
                 Double valuee = (Double) model.getValueAt(i, 9 );
                 Double valuef = (Double) model.getValueAt(i, 10 ); 
                  double value; 
                  value = Double.parseDouble( String.valueOf( valuea ) ) * Double.parseDouble( String.valueOf( valueb ) ); 
                  model.setValueAt( value, i, 10 ); 
             }

    }

}

    @Override
    public void editingStopped(ChangeEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void editingCanceled(ChangeEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }



}

}

【问题讨论】:

  • 我想输入数字,计算 [并] 存储在数据库中。 什么阻止了你?你的UPDATE 声明在哪里?您要求某人使用支持不佳的驱动程序调试/修改针对无法访问的数据库上的隐含模式运行的冗长代码。 L&F应该是无关紧要的,只需要一个数据库属性。请编辑您的问题以包含一个显示问题的sscce
  • 我刚刚编辑了代码。当我运行这些代码时,它会成功执行,但我没有按照我的意愿给我正确的输出。现在该怎么办请告诉我???

标签: java swing ms-access jdbc odbc


【解决方案1】:

我不明白你的INSERT 是如何成功的:括号不平衡,setValueAt()——如果它的文本被实际调用——返回void;检查日志。您似乎正在插入单个属性,而 Customer 关系有 11 个。如果您的意思是 UPDATE Total 属性,请注意您的架构违反 normal form,因为 Total 取决于其他属性。请咨询您的小组以更正架构。将 sum1 的公式重构为一个可以在应显示 Total 时重复使用的方法。

【讨论】:

  • 请在您的系统中调试这些代码。当表格出现时,我在列前面手动输入条目,其中列从星期日开始并以速率结束,整个计算显示在总列中......我的团队得到盛宴如何做这些代码..@trashgod 如果你能帮助我解决这些问题:) 请在你的系统中运行..
  • 还要考虑model.addRow() 方法之一,而不是model.getDataVector()
【解决方案2】:

我认为您的代码不正确。它是如何添加行或列的。我认为在将所有内容添加到表模型后需要提供table model,还需要创建一个新的function 来计算总和。还要在构造函数中添加列,即只添加一次。咨询您的小组。

【讨论】:

  • 你对这些问题有什么建议吗?实际上,如果我们有任何想法或解决方案,我们都不知道这些,然后我们编辑我们的代码。但你也帮我解决了这些问题。谢谢你的帮助......
  • DefaultTableModelTableModel
  • 你能给我那个链接的教程链接我可以了解更多...?
  • hmm.. 这是一个冗长的代码,没有人会在他的电脑上编译它,编辑它。我认为您正在表中显示数据。但计算不正确。您要计算什么,根据哪些标准以及从哪些字段计算?您从表中获得 6 个值,但仅乘以 2。此外,您没有发现异常,请参阅 link: 可能是这个问题。或者在你的电脑上逐行调试你的代码
  • 这是否解决了问题。我判断你来自印度?我说的对吗?
猜你喜欢
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多