列名未显示在Jtable中

时间:2012-10-22 04:05:32

标签: java swing jtable jscrollpane jtableheader

  

可能重复:
  JTable won’t show column headers
  How to see column labels in JTable?

我正在使用swing创建用户注册表单。 某些标签显示不正确,列名也不会显示。

以下是我的代码:

import java.awt.EventQueue;

import javax.swing.JFrame;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.JTextField;
import java.awt.Insets;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.Window.Type;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JScrollBar;
import java.awt.Scrollbar;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.ListSelectionModel;


public class UserRegistration {

    private JFrame frmUserRegistrationForm;
    private JTextField textField;
    private JTextField textField_1;
    private JTextField textField_2;
    private JTextField textField_3;
    private JCheckBox chckbxNewCheckBox;
    private JCheckBox chckbxUpdate;
    private JCheckBox chckbxDelete;
    private JComboBox UserTypecomboBox;
    private JLabel lblUserType;
    private JLabel lblIsactive;
     private JPanel panel;
     private JTable table;
     private JComboBox isActive; 
     static Vector<Vector<String>> data=null;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UserRegistration window = new UserRegistration();
                    window.frmUserRegistrationForm.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public UserRegistration() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frmUserRegistrationForm = new JFrame();
        frmUserRegistrationForm.setTitle("User Registration Form");
        frmUserRegistrationForm.setBounds(100, 100, 700, 700);
        frmUserRegistrationForm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmUserRegistrationForm.getContentPane().setLayout(null);

        JLabel lblUserRegistrationForm = new JLabel("User Registration Form");
        lblUserRegistrationForm.setBounds(211, 6, 198, 24);
        lblUserRegistrationForm.setFont(new Font("Times New Roman", Font.BOLD, 20));
        frmUserRegistrationForm.getContentPane().add(lblUserRegistrationForm);

        JLabel lblUserName = new JLabel("User Name* :");
        lblUserName.setBounds(197, 35, 130, 16);
        frmUserRegistrationForm.getContentPane().add(lblUserName);

        textField = new JTextField();
        textField.setBounds(350, 29, 122, 28);
        textField.setColumns(10);
        frmUserRegistrationForm.getContentPane().add(textField);

        JLabel lblPassword = new JLabel("Password* :");
        lblPassword.setBounds(197, 68, 130, 16);
        frmUserRegistrationForm.getContentPane().add(lblPassword);

        textField_1 = new JTextField();
        textField_1.setBounds(350, 62, 122, 28);
        textField_1.setColumns(10);
        frmUserRegistrationForm.getContentPane().add(textField_1);

        JLabel lblVerifyPassword = new JLabel("Verify Password* :");
        lblVerifyPassword.setBounds(197, 96, 150, 16);
        frmUserRegistrationForm.getContentPane().add(lblVerifyPassword);

        textField_2 = new JTextField();
        textField_2.setBounds(350, 90, 122, 28);
        textField_2.setColumns(10);
        frmUserRegistrationForm.getContentPane().add(textField_2);

        JLabel lblEmail = new JLabel("Email :");
        lblEmail.setBounds(197, 124, 60, 16);
        frmUserRegistrationForm.getContentPane().add(lblEmail);

        textField_3 = new JTextField();
        textField_3.setBounds(350, 118, 122, 28);
        textField_3.setColumns(10);
        frmUserRegistrationForm.getContentPane().add(textField_3);

        lblUserType = new JLabel("User Type* :");
        lblUserType.setBounds(197, 152, 80, 16);
        frmUserRegistrationForm.getContentPane().add(lblUserType);

        UserTypecomboBox = new JComboBox();
        UserTypecomboBox.setBounds(350, 147, 122, 26);
        UserTypecomboBox.setModel(new DefaultComboBoxModel(new String[] {"Admin", "User"}));
        frmUserRegistrationForm.getContentPane().add(UserTypecomboBox);

        JLabel lblCreate = new JLabel("Previlages* :");
        lblCreate.setBounds(196, 193, 100, 16);
        frmUserRegistrationForm.getContentPane().add(lblCreate);

        chckbxNewCheckBox = new JCheckBox("Create");
        chckbxNewCheckBox.setBounds(350, 192, 59, 18);
        frmUserRegistrationForm.getContentPane().add(chckbxNewCheckBox);

        chckbxUpdate = new JCheckBox("Update");
        chckbxUpdate.setBounds(440, 192, 62, 18);
        frmUserRegistrationForm.getContentPane().add(chckbxUpdate);

        chckbxDelete = new JCheckBox("Delete");
        chckbxDelete.setBounds(538, 192, 58, 18);
        frmUserRegistrationForm.getContentPane().add(chckbxDelete);

        JButton btnRegisterUser = new JButton("Add User");
        btnRegisterUser.setBounds(355, 250, 105, 28);

        btnRegisterUser.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                boolean validate = Validate();
                if(validate){
                    System.out.println("date to database");
                    try {
                        insertData();
                        addJtable();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        });
        frmUserRegistrationForm.getContentPane().add(btnRegisterUser);
        Vector<String> headers=new Vector<String>();
           headers.add("User Name");
           headers.add("Email");
           headers.add("Previllage_create");
           headers.add("Previllage_update");
           headers.add("Previllage_delete");
           headers.add("User Type");
           headers.add("is_active");
        table = new JTable();
        table.setSurrendersFocusOnKeystroke(true);
        table.setShowVerticalLines(true);
        table.setCellSelectionEnabled(true);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        try {
            getData();
        } catch (ClassNotFoundException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        table.setModel(new DefaultTableModel(data,headers) {
            Class[] columnTypes = new Class[] {
                String.class, String.class, String.class, String.class, String.class, String.class, String.class, String.class
            };
            public Class getColumnClass(int columnIndex) {
                return columnTypes[columnIndex];
            }
        });
        table.getColumnModel().getColumn(2).setPreferredWidth(106);
        table.getColumnModel().getColumn(5).setPreferredWidth(113);
        table.setShowHorizontalLines(true);
        table.setBounds(33, 290, 619, 345);
        frmUserRegistrationForm.getContentPane().add(table);

        JScrollBar scrollBar = new JScrollBar();
        scrollBar.setBounds(637, 290, 15, 345);
        frmUserRegistrationForm.getContentPane().add(scrollBar);

        JLabel lblNewLabel = new JLabel("Is Active* :");
        lblNewLabel.setBounds(197, 221, 80, 16);
        frmUserRegistrationForm.getContentPane().add(lblNewLabel);

        isActive = new JComboBox();
        isActive.setModel(new DefaultComboBoxModel(new String[] {"Yes", "No"}));
        isActive.setBounds(350, 212, 60, 26);
        frmUserRegistrationForm.getContentPane().add(isActive);
    }
    public boolean Validate(){
         String userName = textField.getText();
         String passowrd = textField_1.getText();
         String verifyPassword = textField_2.getText();
         boolean validates = true;
         String message="";
         System.out.println("test" + userName);
        if((null== userName || userName.equals("")) && (null== passowrd || passowrd.equals("")) && (null== verifyPassword || verifyPassword.equals(""))&& !chckbxUpdate.isSelected() && !chckbxNewCheckBox.isSelected() && !chckbxDelete.isSelected()){

            JOptionPane.showMessageDialog(null,"Enter all mandatory fields");
            validates = false;

        }else{
        if(null== userName || userName.equals(""))
        {
            message= "User Name, ";
        }
        if(null== passowrd || passowrd.equals(""))
        {
            message=message+ "Passowrd, ";
        }
        if(null== verifyPassword || verifyPassword.equals(""))
        {
            message=message+ "verifyPassword, ";
        }
        if(!chckbxUpdate.isSelected() && !chckbxNewCheckBox.isSelected() && !chckbxDelete.isSelected()){
            message=message+ "Previlages";
        }
        if(!message.equals("")){
            JOptionPane.showMessageDialog(null,"Enter data for " +message+" fields");   
            validates=false;
        }
        }
        return validates;

    }

    public void insertData() throws SQLException{
         String userName = textField.getText();
         String passowrd = textField_1.getText();
         String verifyPassword = textField_2.getText();
         boolean prev_create= chckbxNewCheckBox.isSelected();
         boolean prev_update= chckbxUpdate.isSelected();
         boolean prev_delete= chckbxDelete.isSelected();
         String emial = textField_3.getText();
         String userType = (String)UserTypecomboBox.getSelectedItem();
         String isactive = (String) isActive.getSelectedItem();
         Connection con = null;
         try {
            Class.forName("com.mysql.jdbc.Driver");

         con = DriverManager
                         .getConnection("jdbc:mysql://127.0.0.1:3306/fingerprint",
                                         "root", "root");

         PreparedStatement ps = con
                         .prepareStatement("Insert into users(user_name,password,verify_pwd,email,previllage_create,previllage_update,previllage_delete,user_type,is_active) values(?,?,?,?,?,?,?,?,?)");
         ps.setString(1, userName);
         ps.setString(2, passowrd);
         ps.setString(3, verifyPassword);
         ps.setString(4, emial);
         if(prev_create)
         ps.setString(5, "Y");
         else
         ps.setString(5, "N");   
         if(prev_update)
         ps.setString(6, "Y");
         else
         ps.setString(6, "N");
         if(prev_delete)
         ps.setString(7, "Y");
         else
         ps.setString(7, "N");
         ps.setString(8, userType);
         ps.setString(9, isactive);
         ps.executeUpdate();
         con.close();

         } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
         finally{
             con.close();
         }
    }
     private static void getData() throws ClassNotFoundException, SQLException
     {
      // Enter Your MySQL Database Table name in below Select Query.
         data=new Vector<Vector<String>>();
      String str="select user_name,password,verify_pwd,email,previllage_create,previllage_update,previllage_delete,user_type,is_active from users";
      Connection con = null;
      ResultSet rs = null;
      Statement st = null;

      try {
       // Change the database name, hosty name, 
       // port and password as per MySQL installed in your PC.
          Class.forName("com.mysql.jdbc.Driver");

             con = DriverManager
                             .getConnection("jdbc:mysql://127.0.0.1:3306/fingerprint",
                                             "root", "root");

       st=con.createStatement();

       rs=st.executeQuery(str);

       while(rs.next())
       {
        Vector <String> d=new Vector<String>();

        d.add(rs.getString("user_name"));
        d.add(rs.getString("email"));
        d.add(rs.getString("previllage_create"));
        d.add(rs.getString("previllage_update"));
        d.add(rs.getString("previllage_delete"));
        d.add(rs.getString("user_type"));
        d.add(rs.getString("is_active"));
        d.add("\n\n\n\n\n\n\n");
        data.add(d);
       }

      } catch (SQLException e) {

       e.printStackTrace();
      }
      finally{
          st.close();
          rs.close();
          con.close();
      }
     }

     public void addJtable(){
            Vector<String> headers=new Vector<String>();
               headers.add("User Name");
               headers.add("Email");
               headers.add("Previllage_create");
               headers.add("Previllage_update");
               headers.add("Previllage_delete");
               headers.add("User Type");
               headers.add("is_active");
            table = new JTable();
            table.setSurrendersFocusOnKeystroke(true);
            table.setShowVerticalLines(true);
            table.setCellSelectionEnabled(true);
            table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            try {
                getData();
            } catch (ClassNotFoundException | SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            table.setModel(new DefaultTableModel(data,headers) {
                Class[] columnTypes = new Class[] {
                    String.class, String.class, String.class, String.class, String.class, String.class, String.class, String.class
                };
                public Class getColumnClass(int columnIndex) {
                    return columnTypes[columnIndex];
                }
            });
            //table.getColumnModel().getColumn(2).setPreferredWidth(50);
            //table.getColumnModel().getColumn(5).setPreferredWidth(50);
            table.setShowHorizontalLines(true);
            table.setBounds(33, 290, 619, 345);
            //table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
            TableColumn column = table.getColumnModel().getColumn(0);
            column.setPreferredWidth(10);


            column = table.getColumnModel().getColumn(1);
            column.setPreferredWidth(350);



            frmUserRegistrationForm.getContentPane().add(table);

            JScrollBar scrollBar = new JScrollBar();
            scrollBar.setBounds(637, 290, 15, 345);
            frmUserRegistrationForm.getContentPane().add(scrollBar);
     }


}

以下是应用的截图:

enter image description here

在屏幕截图中,正确显示了创建,更新和删除等标签,但未显示表格列。

编辑。

下面是添加frmUserRegistrationForm.getContentPane().add(new JScrollPane(table));

后的屏幕截图

enter image description here

1 个答案:

答案 0 :(得分:7)

您创建表格并将其直接添加到内容窗格...表格希望添加到JScrollPane

尝试类似......

frmUserRegistrationForm.getContentPane().add(new JScrollPane(table));

此外,我强烈建议您利用适当的布局管理器。给我3秒钟,我将通过计算绝对布局来破坏你所有的辛勤工作......我可能不需要改变你的代码或我的系统。

我建议您阅读