我的界面上有一个JButton,点击它就将数据显示到JTable上,现在数据能够显示上去,就是没有列名,为什么呀?高手们帮助看看,3Q
private JTable getTable() {
if (table == null) {
table = new JTable();
DefaultTableModel dft = new MyTable();
dft.addColumn("ID");
dft.addColumn("性别");
dft.addColumn("日期");
table.setModel(dft);
table.setDefaultEditor(SexEnum.class, new DefaultCellEditor(new JComboBox(SexEnum.values())));
table.setDefaultRenderer(SexEnum.class, new DefaultTableCellRenderer());
table.setRowHeight(20);
table.getTableHeader().setReorderingAllowed(false);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
return table;
} class MyTable extends DefaultTableModel
{
private static final long serialVersionUID = 1L;

public Class<?> getColumnClass(int columnIndex)
{
if(columnIndex == 1)
return SexEnum.class;
else
return Object.class;
}

public boolean isCellEditable(int row, int column) 
{
return column == 1;
    }
}
Object[] rowData = new Object[]{"1","男","2001-09-09"};
private JButton getBtnShow() 
{
if (btnShow == null) 
{
btnShow = new JButton("show");
btnShow.addActionListener(new ActionListener() 
{
public void actionPerformed(ActionEvent e) 
{
DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
dft.addRow(rowData);
dft.addRow(rowData);
dft.addRow(rowData);
}
});
btnShow.setBounds(37, 25, 93, 23);
}
return btnShow;
}

解决方案 »

  1.   

    想要显示表头,需要放到jscrollpane里
      

  2.   

    public void init(){
    JTable t = new JTable();

    Vector<Object> header = new Vector<Object>() ; //标题
    Vector<Vector<Object>> table = new Vector<Vector<Object>>();//表格内容
    Vector<Object> content = new Vector<Object>();//每一条的内容
    header.addElement("id");
    header.addElement("性别");
    header.addElement("日期");
    table.addElement(content) ;
    DefaultTableModel det = new DefaultTableModel(header , table);

    }
      

  3.   

    public class JTableAddJComboBox extends JFrame
    {
    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JScrollPane scrollPane;
    private JTable table;
    private JButton btnShow;
    public static void main(String[] args)
    {
    EventQueue.invokeLater(new Runnable()
    {
    public void run()
    {
    try
    {
    JTableAddJComboBox frame = new JTableAddJComboBox();
    frame.setVisible(true);
    } catch (Exception e)
    {
    e.printStackTrace();
    }
    }
    });
    } /**
     * Create the frame.
     */
    public JTableAddJComboBox()
    {
    initialize();
    }
    private void initialize() {
    setTitle("table contain comboBox");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);
    contentPane.add(getScrollPane());
    contentPane.add(getBtnShow());
    } private JScrollPane getScrollPane() {
    if (scrollPane == null) {
    scrollPane = new JScrollPane();
    scrollPane.setBounds(57, 72, 288, 180);
    scrollPane.setColumnHeaderView(getTable());
    }
    return scrollPane;
    }
    private JTable getTable() {
    if (table == null) {
    table = new JTable();
    DefaultTableModel dft = new MyTable();
    dft.addColumn("ID");
    dft.addColumn("性别");
    dft.addColumn("日期");
    table.setModel(dft);
    table.setDefaultEditor(SexEnum.class, new DefaultCellEditor(new JComboBox(SexEnum.values())));
    table.setDefaultRenderer(SexEnum.class, new DefaultTableCellRenderer());
    table.setRowHeight(20);
    table.getTableHeader().setReorderingAllowed(false);
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    }
    return table;
    } class MyTable extends DefaultTableModel
    {
    private static final long serialVersionUID = 1L;

    public Class<?> getColumnClass(int columnIndex)
    {
    if(columnIndex == 1)
    return SexEnum.class;
    else
    return Object.class;
    }

    public boolean isCellEditable(int row, int column) 
    {
    return column == 1;
        }
    }
    Object[] rowData = new Object[]{"1","男","2001-09-09"};
    private JButton getBtnShow() 
    {
    if (btnShow == null) 
    {
    btnShow = new JButton("show");
    btnShow.addActionListener(new ActionListener() 
    {
    public void actionPerformed(ActionEvent e) 
    {
    DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
    dft.addRow(rowData);
    dft.addRow(rowData);
    dft.addRow(rowData);
    }
    });
    btnShow.setBounds(37, 25, 93, 23);
    }
    return btnShow;
    }
    }
      

  4.   

    这是全部代码,现在不但不显示列名,而且scrollPane不管用,数据过多时,不会出现滚动条
      

  5.   

    我把SexEnum的部分给注解掉了,下面这个JTable是正常的,能正常滚动而且有表头,只是show按钮是添加三行数据的逻辑
    你原来写的代码整体设计和逻辑有问题,导致了表头没有出来,你研究下给你的代码就行了import javax.swing.*;
    import javax.swing.border.EmptyBorder;
    import javax.swing.table.*;
    import java.awt.*;
    import java.awt.event.*;public class JTableAddJComboBox extends JFrame
    {
        private static final long serialVersionUID = 1L;
        private Container contentPane;
        private JScrollPane scrollPane;
        private JTable table;
        private JButton btnShow;
        
        public static void main(String[] args)
        {
            EventQueue.invokeLater(new Runnable()
            {
                public void run()
                {
                    try
                    {
                        JTableAddJComboBox frame = new JTableAddJComboBox();
                        frame.setVisible(true);
                    } catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            });
        }    /**
         * Create the frame.
         */
        public JTableAddJComboBox()
        {
            initialize();
        }
        private void initialize() {
            setTitle("table contain comboBox");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 450, 300);
    //        contentPane = new JPanel();
            contentPane = this.getContentPane();
    //        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    //        setContentPane(contentPane);
            contentPane.setLayout(null);
            contentPane.add(getScrollPane());
            contentPane.add(getBtnShow());
        }    private JScrollPane getScrollPane() {
            DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
            dft.addRow(rowData);
            dft.addRow(rowData);
            dft.addRow(rowData);
            
            if (scrollPane == null) {
                scrollPane = new JScrollPane(table);
                scrollPane.setBounds(57, 72, 288, 180);
            }
            return scrollPane;
        }
        private JTable getTable() {
            if (table == null) {
                table = new JTable();
                DefaultTableModel dft = new MyTable();
                dft.addColumn("ID");
                dft.addColumn("性别");
                dft.addColumn("日期");
                table.setModel(dft);
    //            table.setDefaultEditor(SexEnum.class, new DefaultCellEditor(new JComboBox(SexEnum.values())));
    //            table.setDefaultRenderer(SexEnum.class, new DefaultTableCellRenderer());
                table.setRowHeight(20);
                table.getTableHeader().setReorderingAllowed(false);
                table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            }
            return table;
        }    class MyTable extends DefaultTableModel
        {
            private static final long serialVersionUID = 1L;        public Class<?> getColumnClass(int columnIndex)
            {
                if(columnIndex == 1)
    //                return SexEnum.class;
                      return String.class;
                else
                    return Object.class;
            }        public boolean isCellEditable(int row, int column)
            {
                return column == 1;
            }
        }
        Object[] rowData = new Object[]{"1","男","2001-09-09"};
        
        private JButton getBtnShow()
        {
            if (btnShow == null)
            {
                btnShow = new JButton("show");
                btnShow.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        DefaultTableModel dft = (DefaultTableModel) getTable().getModel();
                        dft.addRow(rowData);
                        dft.addRow(rowData);
                        dft.addRow(rowData);                }
                });
                btnShow.setBounds(37, 25, 93, 23);
            }
            return btnShow;
        }
    }
      

  6.   

    SexEnum 就是一个enum类,里面包括两个值“男、女”完了
    public enum SexEnum
    {
    男,女;
    }用这个类就是想让jtable里某列能显示下拉列表
      

  7.   

    1、scrollPane.setColumnHeaderView(getTable());//这样写会使table没有表头,所以是错误的。
    2、scrollPane.setViewportView(getTable());
    1是我之前写的,应该是2这种写法,我是通过直接拖拽过去的,怎么会出现1那种情况了呢,具体还是eclipse的问题,有待研究,谢谢各位了!