【问题标题】:how to run multiple function in one button using java如何使用java在一个按钮中运行多个功能
【发布时间】:2017-12-28 18:04:27
【问题描述】:

我已经为此搜索了很多次,但找不到可以正常工作的代码。我也尝试过 stackoverflow 的问题推荐,但仍然没有成功。

我在我的java程序中创建了一个搜索功能,在我的测试过程中它工作正常,但是当我在1个按钮中调用所有搜索功能时,唯一有效的是最后一部分不是所有功能,

这是我运行所有函数的示例代码。

     public ArrayList<pcfdBoards> ListofInventory(String ValToSearch)
{
    ArrayList<pcfdBoards> usersList = new ArrayList<pcfdBoards>();

    Statement st;
    ResultSet rs;

    try{
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String url = "jdbc:sqlserver://ets88-spare:1433;databaseName=users;user=sa;password=test";
        Connection conn = DriverManager.getConnection(url);
        st = conn.createStatement();
        String searchQuery = "SELECT * FROM PCFD WHERE CONCAT(sno,BoardName) LIKE '%"+ValToSearch+"%'";
        rs = st.executeQuery(searchQuery);
        pcfdBoards user;
        while(rs.next())
        {
            user = new pcfdBoards( rs.getInt("sno"), 
                                        rs.getString("Date"), 
                                        rs.getString("DieType"), 
                                        rs.getString("DeviceName"), 
                                        rs.getString("ProgramName"), 
                                        rs.getString("ProgramRevision"), 
                                        rs.getString("BoardName"), 
                                        rs.getString("SerialNumber"),
                                        rs.getString("BoardRevision"),
                                        rs.getString("BoardSlotNumber"),
                                        rs.getString("DIBChannel"),
                                        rs.getString("Area"),
                                        rs.getString("TestOption"),
                                        rs.getString("TestName"),
                                        rs.getString("BinNumber"),
                                        rs.getString("LoadboardSN"),
                                        rs.getString("MotherboardSN"),
                                        rs.getString("AdditionalHW"),
                                        rs.getString("VerifiedBy"),
                                        rs.getString("Datalogs"));
            usersList.add(user);
        }            
    }catch(ClassNotFoundException | SQLException ex){
        jnote.setBackground(Color.red);
        jnote.setText(ex.toString());
    }

    return usersList;
            }

      public void boardname() {ArrayList<pcfdBoards> users = ListofInventory(jboardnameSearch.getText());
    DefaultTableModel model = new DefaultTableModel();
    model.setColumnIdentifiers(new Object[]{"Item ID","Date","Die Type","Device Name", "Program Name", "Program Revision", "Board Name","Serial Number","Board Revision","Board Slot Number","DIB Channel","Area","Test Option","Test Name","Bin Number","Loadboard SN","Motherboard SN","Additional HW","Verifief By","Datalogs"});
    Object[] row = new Object[21];
    for(int i = 0; i < users.size(); i++)
    {
        row[0] = users.get(i).getsno();
        row[1] = users.get(i).getDate();
        row[2] = users.get(i).getDieType();
        row[3] = users.get(i).getDeviceName();
        row[4] = users.get(i).getProgramName();
        row[5] = users.get(i).getProgramRevision();
        row[6] = users.get(i).getBoardName();
        row[7] = users.get(i).getSerialNumber();
        row[8] = users.get(i).getBoardRevision();
        row[9] = users.get(i).getBoardSlotNumber();
        row[10] = users.get(i).getDIBChannel();
        row[11] = users.get(i).getArea();
        row[12] = users.get(i).getTestOption();
        row[13] = users.get(i).getTestName();
        row[14] = users.get(i).getBinNumber();
        row[15] = users.get(i).getLoadboardSN();
        row[16] = users.get(i).getMotherboardSN();
        row[17] = users.get(i).getAdditionalHW();
        row[18] = users.get(i).getVerifiedBy();
        row[19] = users.get(i).getDatalogs();
        model.addRow(row);
    }
   jTable1.setModel(model);
           }
    public ArrayList<pcfdBoards> ListofInventorySN(String ValToSearch)
{
    ArrayList<pcfdBoards> usersList = new ArrayList<pcfdBoards>();

    Statement st;
    ResultSet rs;

    try{
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String url = "jdbc:sqlserver://ets88-spare:1433;databaseName=users;user=sa;password=test";
        Connection conn = DriverManager.getConnection(url);
        st = conn.createStatement();
        String searchQuery = "SELECT * FROM PCFD WHERE CONCAT(sno,SerialNumber) LIKE '%"+ValToSearch+"%'";
        rs = st.executeQuery(searchQuery);
        pcfdBoards user;
        while(rs.next())
        {
            user = new pcfdBoards( rs.getInt("sno"), 
                                        rs.getString("Date"), 
                                        rs.getString("DieType"), 
                                        rs.getString("DeviceName"), 
                                        rs.getString("ProgramName"), 
                                        rs.getString("ProgramRevision"), 
                                        rs.getString("BoardName"), 
                                        rs.getString("SerialNumber"),
                                        rs.getString("BoardRevision"),
                                        rs.getString("BoardSlotNumber"),
                                        rs.getString("DIBChannel"),
                                        rs.getString("Area"),
                                        rs.getString("TestOption"),
                                        rs.getString("TestName"),
                                        rs.getString("BinNumber"),
                                        rs.getString("LoadboardSN"),
                                        rs.getString("MotherboardSN"),
                                        rs.getString("AdditionalHW"),
                                        rs.getString("VerifiedBy"),
                                        rs.getString("Datalogs"));
            usersList.add(user);
        }            
    }catch(ClassNotFoundException | SQLException ex){
        jnote.setBackground(Color.red);
        jnote.setText(ex.toString());
    }

    return usersList;
        }       
   public void serialNum() {ArrayList<pcfdBoards> users = ListofInventorySN(jSerialNumSearch.getText());
    DefaultTableModel model = new DefaultTableModel();
    model.setColumnIdentifiers(new Object[]{"Item ID","Date","Die Type","Device Name", "Program Name", "Program Revision", "Board Name","Serial Number","Board Revision","Board Slot Number","DIB Channel","Area","Test Option","Test Name","Bin Number","Loadboard SN","Motherboard SN","Additional HW","Verifief By","Datalogs"});
    Object[] row = new Object[21];
    for(int i = 0; i < users.size(); i++)
    {
        row[0] = users.get(i).getsno();
        row[1] = users.get(i).getDate();
        row[2] = users.get(i).getDieType();
        row[3] = users.get(i).getDeviceName();
        row[4] = users.get(i).getProgramName();
        row[5] = users.get(i).getProgramRevision();
        row[6] = users.get(i).getBoardName();
        row[7] = users.get(i).getSerialNumber();
        row[8] = users.get(i).getBoardRevision();
        row[9] = users.get(i).getBoardSlotNumber();
        row[10] = users.get(i).getDIBChannel();
        row[11] = users.get(i).getArea();
        row[12] = users.get(i).getTestOption();
        row[13] = users.get(i).getTestName();
        row[14] = users.get(i).getBinNumber();
        row[15] = users.get(i).getLoadboardSN();
        row[16] = users.get(i).getMotherboardSN();
        row[17] = users.get(i).getAdditionalHW();
        row[18] = users.get(i).getVerifiedBy();
        row[19] = users.get(i).getDatalogs();
        model.addRow(row);
    }
   jTable1.setModel(model);
           }

如何仅使用一个按钮调用 boardname() 和 serialNum(), 我尝试使用下面的代码,但最后一部分总是有效,而不是全部。

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            boardname();
            serialNum();
         }        

【问题讨论】:

  • 欢迎来到 Stack Overflow!看来您需要学习使用调试器。请帮助自己了解一些补充调试技术。如果之后您仍有问题,请随时返回 Minimal, Complete, and Verifiable example 来证明您的问题。
  • 我不完全清楚你的问题是什么。
  • As your code is now, when jButton1 is selected the methods boardname() is called, then the serialnumber()方法被调用,然后dieType()方法被调用,最后 programName() 方法被调用(按此顺序)。您的所有方法都将被调用,除非上述方法之一中的某些东西停止了程序流程或控制了流程并且永远不允许它返回。很难说,因为您没有显示所有特定方法(函数)的代码。
  • @DevilsHnd 我已经编辑了我的帖子。请再次检查

标签: java


【解决方案1】:

程序正常运行,但使用了不同的TableModel,这意味着当程序调用boardname() 方法时,TableModel 的新实例将设置为JTable。但是当调用serialnum() 时,又会创建一个新的TableModel,因此之前的模型与JTable 分离。这就是为什么表格只显示最后一个方法serialnum()的数据的原因。

如果调用程序的目标,两个方法都使用一个TableModel,则避免在每个方法上创建DefaultTableModel 的新实例。这意味着:

  1. boardname()serialnum() 方法中删除DefaultTableModel model = new DefaultTableModel();

  2. 从这两种方法中删除jTable.setModel(),并在外部使用它。例如在jButton1ActionPerformed 方法的末尾。

  3. 将模型声明为您的类的属性,例如,如果您的类名是MyProgram,则像这样声明模型:

    public class MyProgram {
       DefaultTableModel model = new DefaultTableModel();
    

希望这些信息对您有所帮助。

如果您需要更多想法来了解如何使用一种方法而不是多种方法读取数据的不同方法,请参阅以下示例。对不起,如果示例很长,示例使用的是 H2 数据库。另请访问此链接以阐明如何为 JTable 而不是 DefaultTableModel 使用自定义对象模型:Create JTable from ArrayList of Objects - Java

public class MyInventoryAppDemo {

    public static void main(String[] args) {
        new MyInventoryAppDemo();
    }

    public class MyInventoryDataSource {
        JdbcDataSource ds = new JdbcDataSource();
        Connection cnn;


        public MyInventoryDataSource() {

            PreparedStatement ps = null;
            ds.setURL("jdbc:h2:mem:test");

            try{
                cnn = ds.getConnection();
                //cnn.prepareCall("DROP TABLE ItemResource").execute();
                cnn.prepareCall("CREATE TABLE ItemResource(id INT PRIMARY KEY, name VARCHAR(50)," +
                        "serial VARCHAR(50), location VARCHAR(50));").execute();
                cnn.prepareCall("INSERT INTO ItemResource(id,name,serial,location) values(1,'Notebook','1235','warehouse')").execute();
                cnn.prepareCall("INSERT INTO ItemResource(id,name,serial,location) values(2,'Desktop','12356','warehouse')").execute();
                cnn.prepareCall("INSERT INTO ItemResource(id,name,serial,location) values(3,'Mainframe','12357','garage')").execute();
                cnn.prepareCall("INSERT INTO ItemResource(id,name,serial,location) values(4,'Abacus','12358','warehouse')").execute();

            }catch(Exception ex){
                ex.printStackTrace();
            }

        }

        private Connection getCnn() throws SQLException {
            //return ds.getConnection();
            return cnn;
        }

        public List<ItemResource> getItemResources(String byLocation, String bySerial) {

            String sql = "SELECT * FROM ItemResource WHERE location like ? and serial like ?";
            PreparedStatement ps = null;
            ResultSet rs = null;
            Connection cnn = null;
            List<ItemResource> itemResourceList=null;
            try {
                cnn = getCnn();
                ps = cnn.prepareCall(sql);

                ps.setString(1, "%" + byLocation + "%");
                ps.setString(2, "%" + bySerial + "%");
                rs = ps.executeQuery();
                itemResourceList = itemResourceMapper(rs);

            } catch (Exception ex) {
                ex.printStackTrace();
            }finally {
                try {
                    //rs.close();
                    //ps.close();
                    //cnn.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
            return itemResourceList;

        }

        private List<ItemResource> itemResourceMapper(ResultSet rs){
            ItemResource item = null;
            List<ItemResource> itemResourceList= new ArrayList<>();
            try {
                while (rs.next()) {
                    item = new ItemResource(
                            rs.getInt("id"),
                            rs.getString("name"),
                            rs.getString("serial"),
                            rs.getString("location")
                    );

                    itemResourceList.add(item);

                }
            }catch(Exception ex){
                ex.printStackTrace();
            }
            return itemResourceList;


        }

    }



    public MyInventoryAppDemo() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (InstantiationException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (UnsupportedLookAndFeelException e) {
                    e.printStackTrace();
                }


                MyInventoryDataSource ds = new MyInventoryDataSource();
                ItemResourceModel model = new ItemResourceModel(ds.getItemResources("",""));
                JTable table = new JTable(model);
                JTextField serial = new JTextField(50);
                JTextField location = new JTextField(50);
                JButton jButton = new JButton("Filter");

                jButton.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {

                        ItemResourceModel model = new ItemResourceModel(ds.getItemResources(location.getText(),serial.getText()));
                        table.setModel(model);
                        model.fireTableDataChanged();
                        //table.repaint();
                    }
                });

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridLayout(2,2));
                frame.add(serial);
                frame.add(location);
                frame.add(jButton);
                frame.add(new JScrollPane(table));

                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class ItemResourceModel extends AbstractTableModel {

        private List<ItemResource> itemResourceList;
        ItemResourceMetaData itemResourceMetaData;

        public ItemResourceModel(List<ItemResource> itemResourceList) {
            this.itemResourceList = itemResourceList;
            itemResourceMetaData = new ItemResourceMetaData();
        }

        @Override
        public int getRowCount() {
            return itemResourceList.size();
        }

        @Override
        public int getColumnCount() {
            return itemResourceMetaData.getColumns().length;
        }

        @Override
        public String getColumnName(int column) {
            return itemResourceMetaData.getColumns()[column];
        }


        @Override
        public Class<?> getColumnClass(int columnIndex) {
            return itemResourceMetaData.getColumnClass()[columnIndex];
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            ItemResource item = itemResourceList.get(rowIndex);
            Object itemValue = null;
            switch (columnIndex) {
                case 0:
                    itemValue = item.getId();
                    break;
                case 1:
                    itemValue = item.getName();
                    break;
                case 2:
                    itemValue = item.getSerial();
                    break;

                case 3:
                    itemValue = item.getLocation();
                    break;

            }

            return itemValue;
        }
    }

    public class ItemResourceMetaData {
        private String[] columns =
                {"Id", "Name", "Serial", "Location"};

        private Class[] columnClass =
                {String.class, String.class, String.class, String.class};


        public String[] getColumns() {
            return columns;
        }

        public void setColumns(String[] columns) {
            this.columns = columns;
        }

        public Class[] getColumnClass() {
            return columnClass;
        }

        public void setColumnClass(Class[] columnClass) {
            this.columnClass = columnClass;
        }
    }


    public class ItemResource {
        private int id;
        private String name;
        private String serial;

        public ItemResource(int id, String name, String serial, String location) {
            this.id = id;
            this.name = name;
            this.serial = serial;
            this.location = location;
        }

        private String location;


        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getSerial() {
            return serial;
        }

        public void setSerial(String serial) {
            this.serial = serial;
        }

        public String getLocation() {
            return location;
        }

        public void setLocation(String location) {
            this.location = location;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-03-20
    • 2021-12-28
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2014-08-06
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多