首页 > 解决方案 > 行在表格中不可见

问题描述

输出图像

我想创建一个表格,从患者 ID 中显示患者的详细信息,但我的数据未显示在表格中在编译和运行程序时显示 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); 
     }
  }

标签: javadatabaseswingappletawt

解决方案


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允许组件随着表中数据的变化而动态调整大小的 a。此外,应该允许组件随着框架大小的变化而调整大小。
  5. 需要将JTable其添加到JScrollPane. 当您有超过两行时,这将允许您滚动表中的数据。
  6. JScrollPane需要添加到框架中。如果将 添加JTable到框架中,则只会显示数据行。通过添加JTable到滚动窗格的视口,您将看到列名称作为表中数据行的标题。

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

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只有列标题而没有数据的。然后,您从 ResultSet 读取数据的逻辑将使用该addRow(...)方法将数据行添加到模型中。

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


推荐阅读