【问题标题】:get more rows in JTable java在 JTable java 中获取更多行
【发布时间】:2015-09-11 22:16:14
【问题描述】:

我编写了自动建议组合框。功能是,

*当用户在任一组合框中键入第一个字母时,数据从 MySQL 数据库中检索并显示在弹出列表中,当用户单击建议的项目时,然后按添加按钮将该项目添加到 J 表中并清除组合框

但是当我从组合框中选择另一个项目并单击添加按钮之前添加的一个消失

*根据上述情况如何在J表中保留Both或多个item *

我将发布我的代码:

private void NamecomboActionPerformed(java.awt.event.ActionEvent evt) {                                          
    String drugname = (String) Namecombo.getSelectedItem();
    try{

    String name = "SELECT * FROM druginfo WHERE ItemName LIKE '"+drugname+"%'";

    PreparedStatement pstmt = conn.prepareStatement(name);
    ResultSet rs = pstmt.executeQuery();

    while (rs.next()){
        IDcombo.setSelectedItem(rs.getString("ItemID"));  
    }

    }catch(Exception e){
      JOptionPane.showMessageDialog(null,"error "+ e);
    }



}                                         

private void IDcomboActionPerformed(java.awt.event.ActionEvent evt) {                                        
    String drugid = (String) IDcombo.getSelectedItem();
    try{

    String name = "SELECT * FROM druginfo WHERE ItemID LIKE '"+drugid+"%'";

    PreparedStatement pstmt = conn.prepareStatement(name);
    ResultSet rs = pstmt.executeQuery();

    while (rs.next()){
        Namecombo.setSelectedItem(rs.getString("ItemName"));  
    }

    }catch(Exception e){
      JOptionPane.showMessageDialog(null,"error "+ e);
    }
    try{

    String exp = "SELECT ExpDate FROM druginfo WHERE ItemID LIKE '"+drugid+"%'";
    PreparedStatement pstmt = conn.prepareStatement(exp);
    ResultSet rs2 = pstmt.executeQuery();

    while (rs2.next()){
        String date = rs2.getString("ExpDate");

        exptxt.setText(date);
    }

    }catch(Exception e){
      JOptionPane.showMessageDialog(null,"error "+ e);
    }
} 

为将项目添加到 JTable 执行的添加按钮操作;

private void add_btnActionPerformed(java.awt.event.ActionEvent evt) {                                        

        String temp = (String) IDcombo.getSelectedItem();
        String sql = "select ItemID,ItemName,CostPrice,InStock from druginfo where ItemID=?";
    try {   
        pst=conn.prepareStatement(sql);
        pst.setString(1, temp);
        rs=pst.executeQuery();
        tableSale.setModel(DbUtils.resultSetToTableModel(rs));
        IDcombo.setSelectedItem(null);
        Namecombo.setSelectedItem(null);
    } catch (Exception ex) {
       JOptionPane.showMessageDialog(null, ex);
    }

【问题讨论】:

  • 班级是JTable。变量名不应以大写字符开头。您的一些变量是正确的,而另一些则不是。保持一致并遵循 Java 约定。

标签: java mysql swing user-interface


【解决方案1】:

将当前选择(结果集数据)添加到 JTable 对象而不替换旧数据。

rs=pst.executeQuery();
addDataToTable(tableSale,DbUtils.resultSetToTableModel(rs));
IDcombo.setSelectedItem(null);
Namecombo.setSelectedItem(null);

//ADD this method
public void addDataToTable(JTable table,TableModel model) {
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    DefaultTableModel resultSetModel = (DefaultTableModel) model;
    for (int i = 0; i < resultSetModel.getRowCount(); i++) {
        Vector row=new Vector();
        for (int j = 0; j < resultSetModel.getColumnCount(); j++) {
            row.addElement(resultSetModel.getValueAt(i, j));
        }
        tableModel.addRow(row);
    }
    tableModel.fireTableDataChanged();
}

【讨论】:

  • 选择项目没有进入 Jtable :( @Sarfaraz
  • @tenten 错过了 fireTableDataChanged 方法...更新答案立即尝试
  • 仍然没有选中的项目来到J表:(
  • 在第一行放一条输出信息并打印模型对象,看看打印的是什么public void addDataToTable(JTable table,TableModel model) { System.out.println(model);
  • @tenten 你能把你设置的 tableSale.setModel 改成下面的尝试吗tableSale.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } ));
【解决方案2】:

这个tableSale.setModel(DbUtils.resultSetToTableModel(rs)); 将用新模型替换旧模型。所以显然数据会丢失。你必须为现有模型添加值。我添加了一个sn-p,它将帮助你。

tableSale.setModel(DbUtils.resultSetToTableModel(rs)); 替换为addValuesToModel(DbUtils.resultSetToTableModel(rs));

addValuesToModel(DbUtils.resultSetToTableModel(rs));

public void addValuesToModel(TableModel resultModel) {
    DefaultTableModel tmodel = (DefaultTableModel) tableSale.getModel();
    DefaultTableModel rmodel = (DefaultTableModel) resultModel;
    for (int i = 0; i < rmodel.getRowCount(); i++) {
        Object[] row = new Object[rmodel.getColumnCount()];
        for (int j = 0; j < rmodel.getColumnCount(); j++) {
            row[j] = rmodel.getValueAt(i, j);
        }
        tmodel.addRow(row);
    }
}

【讨论】:

  • 上面的“resultModel”是什么?帮帮我它显示一个错误... @Madhan
  • 代码没有错误,但是..单击添加按钮时捕获异常“java.lang.ClasscastException:java.util Vector不能转换为[Ljava.lang.Object;”..@Madhan跨度>
  • 选择不再添加到 JTable 的项目..:(:( @Madhan
  • 选择项不添加到表中是什么意思..您能解释一下吗
  • IDCombo 的选定项不再通过单击添加按钮@Madhan 添加到 JTable 中
猜你喜欢
  • 2012-07-15
  • 2015-06-03
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多