table 中的行不可见

Rows are not visibal in table

我想创建 table,它根据患者 ID 显示患者的详细信息,但我的数据未显示在 table 我是 java 的新手 谁能帮助我要解决这个问题,请给我解决这个问题的方法,编译时没有显示错误或警告,运行 程序 String tbcol[] 首先出现,然后在下面显示来自数据库的数据是我的程序在我的 SELECT Query

中也有任何错误吗
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.table.TableModel; 
import javax.swing.table.DefaultTableModel;
@SuppressWarnings("deprecation")
public class Adi extends JFrame implements ActionListener{
            ImageIcon icon; 
            ImageIcon img4;
            Dimension dimension;
            JLabel imglab4,symp,diag,med,wr,twr;
            JTable tab1;
            JTextField pidtxt,tsymp,tdiag,tmed;
            JCheckBox cwr;
            JComboBox<String> ctwr;
            Connection conn1;
            Statement st;
            DefaultTableModel model;
     Adi(){    
                dimension = Toolkit.getDefaultToolkit().getScreenSize();      
                int x=(int)((dimension.getWidth() - 700)/2);
                int y=(int)((dimension.getHeight() - 500)/2);
                setLocation(x, y);
                setSize(700,500);
                setLayout(null);
                setUndecorated(true);
                icon = new ImageIcon("image/microscope.png");
                setIconImage(icon.getImage());
                setResizable(false);
                JLabel plable = new JLabel("Patient ID");
                plable.setBounds(225,50,80,30);
                add(plable);
                pidtxt = new JTextField();
                pidtxt.setBounds(290,50,100,30);
                add(pidtxt);
                JButton btnshr=new JButton("Search");
                btnshr.setBounds(400,50,80,30);
                add(btnshr);
                String tbcol[]={"Patient ID","Patient Name","Contact Number","Age","Gender","Blood Group","Address","Any Major Disease"};
                model=new DefaultTableModel();
                tab1= new JTable(2,8);
           /*     model.addRow("Patient ID"); //Didn't worked
                model.addRow("Patient Name");
                model.addRow("Contact Number");
                model.addRow("Age");
                model.addRow("Gender");
                model.addRow("Blood Group");
                model.addRow("Address");
                model.addRow("Any Major Disease");*/
                model.addRow(tbcol);
                tab1.setBounds(100,125,500,30);
                add(tab1);
                symp = new JLabel("Symptom's");
                symp.setBounds(100,225,80,30);
                diag = new JLabel("Diagnosis");
                diag.setBounds(100,275,80,30);
                med = new JLabel("Medicines");
                med.setBounds(100,325,80,30);
                add(symp);
                add(diag);
                add(med);
                tsymp = new JTextField();
                tsymp.setBounds(170,225,180,30);
                tdiag = new JTextField();
                tdiag.setBounds(170,275,180,30);
                tmed = new JTextField();
                tmed.setBounds(170,325,180,30);
                add(tsymp);
                add(tdiag);
                add(tmed);
                wr = new JLabel("Ward Required");
                wr.setBounds(425,225,100,30);
                add(wr);
                cwr = new JCheckBox("Yes");
                cwr.setBounds(550,225,80,30);
                add(cwr);
                twr = new JLabel("Type of Ward");
                twr.setBounds(425,275,100,30);
                ctwr = new JComboBox<String>(new String[] {"General","Single","Duo"});
                ctwr.setBounds(550,280,100,20);
                add(twr);
                add(ctwr);
                JButton btnsaadi=new JButton("Save");
                JButton btncoadi=new JButton("Close");
                btnsaadi.setBounds(200,400,80,30);
                btncoadi.setBounds(425,400,80,30);
                add(btnsaadi);
                add(btncoadi);
             //   Background image 
                img4 = new ImageIcon("image/m_back.jpg");
                imglab4 = new JLabel(img4);
                imglab4.setSize(600,600);
                add(imglab4);
            }
            public void actionPerformed(ActionEvent ael){
                  String adistr =ael.getActionCommand();  
                   if(adistr.equals("Search")){
                      try {
                        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
                        conn1=DriverManager.getConnection("jdbc:ucanaccess://Hospital.accdb");
                        st = conn1.createStatement();
                        String sql="select * from Patient where PatientID='"+pidtxt.getText()+"'";
                        ResultSet rs=st.executeQuery(sql);
                              
                                while(rs.next()){
                                    String patientID =rs.getString("PatientID");
                                    String pname =rs.getString("Pname");
                                    String contactNumber =rs.getString("ContactNumber");
                                    String ages=rs.getString("ages");
                                    String gender=rs.getString("gender");
                                    String bloodGroup=rs.getString("bloodGroup");
                                    String address=rs.getString("address");
                                    String anyMajorDisease=rs.getString("anyMajorDisease");
                                    String tbdata[]={patientID,pname,contactNumber,ages,gender,bloodGroup,address,anyMajorDisease};
                                    model.addRow(tbdata);
                                }
                        }catch(Exception ex){
                                 ex.printStackTrace();
                            }

                   }
                }
    public static void main(String[] args){
         Adi adi=new Adi();
         adi.setVisible(true); 
     }
  }
String tbcol[]={"Patient ID","Patient Name","Contact Number","Age","Gender","Blood Group","Address","Any Major Disease"};
model=new DefaultTableModel();
tab1= new JTable(2,8);
/*model.addRow("Patient ID"); //Didn't worked
tab1.setBounds(100,125,500,30);
add(tab1);

以上代码根本上是错误的,原因如下:

  1. 您需要在 TableModel 中定义列。如果没有列,则不会显示任何内容
  2. 您需要向 TableModel 添加数据行。如果没有行,则不会显示任何内容
  3. TableModel 需要添加到 JTable。如果 JTable 没有 TableModel 则不会显示任何内容
  4. 您使用 setBounds 的逻辑是创建一个 30 的高度。JTable 中的每一行都是 16 个像素,因此您只会看到两行数据。这就是为什么你永远不应该使用 setBounds() 的原因之一。您应该使用 layout manager 允许组件随着 table 中的数据变化而动态调整大小。此外,应该允许组件随着框架大小的变化而调整大小。
  5. 需要将 JTable 添加到 JScrollPane 的视口中。当您有两行以上时,这将允许您滚动 table 中的数据。
  6. JScrollPane 需要添加到框架中。如果将 JTable 添加到框架中,则只会显示数据行。通过将 JTable 添加到滚动窗格的视口,您将看到列名称为 header table.
  7. 中的数据行

所以上面代码的基本结构应该是:

String tbcol[]={"Patient ID","Patient Name","Contact Number","Age","Gender","Blood Group","Address","Any Major Disease"};
model=new DefaultTableModel(tbcol, 0);
tab1= new JTable(model);
JScrollPane scrollPane = new JScrollPane( tab1 );
scrollPane.setBounds(100,125,500,30);
add(scrollPane);

以上代码将创建一个 JTable,其中只有列 header,没有数据。然后,您从 ResultSet 读取数据的逻辑将使用 addRow(...) 方法将数据行添加到模型。

如其他人所述,您不应使用空布局和 setBounds()。阅读提供的教程链接,了解正确使用 JTable、JScrollPane 和布局管理器的示例。