import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;public class Test extends JFrame
{
    JTable table = new JTable(10,10);    public Test()
    {
        Container contentPane = getContentPane();        contentPane.add(new JScrollPane(table),BorderLayout.CENTER);        table.getModel().addTableModelListener(new TableModelListener()
        {
            public void tableChanged(TableModelEvent e)
            {
                int firstRow = e.getFirstRow(),column = e.getColumn();                String properties = " source=" + e.getSource() +
                    " firstRow= " + (firstRow == TableModelEvent.HEADER_ROW ? "HEADER_ROW" : Integer.toString(firstRow)) +
                    " lastRow= " + e.getLastRow() +
                    " column= " + (firstRow == TableModelEvent.ALL_COLUMNS ? "ALL_COLUMNS" : Integer.toString(column));                String typeString = new String();
                int type = e.getType();                switch(type)
                {
                    case TableModelEvent.DELETE:
                        typeString = "DELETE";
                        break;
                    case TableModelEvent.INSERT:
                        typeString = "INSERT";
                        break;
                    case TableModelEvent.UPDATE:
                        typeString = "UPDATE";
                        break;
                }
                properties += " type=" + typeString;                JOptionPane.showMessageDialog(Test.this,e.getClass().getName() + "[" + properties + "]");
            }
        });
    }    public static void main(String args[])
    {
        GraphicJavaApplication.launch(new Test(),"Handling Table Model Events",300,300,450,220);
    }
}class GraphicJavaApplication extends WindowAdapter
{
    public static void launch(final JFrame f,String title,final int x,final int y,final int w,int h)
    {
        f.setTitle(title);
        f.setBounds(x,y,w,h);
        f.setVisible(true);        f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosed(WindowEvent e)
            {
                System.exit(0);
            }
        });
    }
}

解决方案 »

  1.   

    看下面的例子:
    import javax.swing.*;
    2  import java.awt.*;
    3  import java.awt.event.*;
    4  import java.util.*;
    5  public class SimpleTable{
    6     public SimpleTable(){
    7        JFrame f=new JFrame();
    8        Object[][] playerInfo={
    9                     {"阿呆",new Integer(66),new Integer(32),new Integer(98),new Boolean(false)},
    10                     {"阿呆",new Integer(82),new Integer(69),new Integer(128),new Boolean(true)},
    11                     };
    12       String[] Names={"姓名","语文","数学","总分","及格"};
    13       JTable table=new JTable(playerInfo,Names);
    14       table.setPreferredScrollableViewportSize(new Dimension(550,30));//注意此行,这样才能看到标题
    15       JScrollPane scrollPane=new JScrollPane(table);
    16       f.getContentPane().add(scrollPane,BorderLayout.CENTER);
    17       f.setTitle("Simple Table");
    18         f.pack();
    19         f.show();
    20         f.addWindowListener(new WindowAdapter() {
    21             public void windowClosing(WindowEvent e) {
    22                     System.exit(0);
    23             }
    24        });
    24   }
    25    public static void main(String[] args){
    26       SimpleTable b=new SimpleTable();
    27    }
    28 }   如果你不想用JScrollPane,要解决这个问题,你必须将程序修改如下:
       JTable table=new JTable(p,n);
       table.setPreferredScrollableViewportSize(new Dimension(550,30));
       f.getContentPane().add(table.getTableHeader(),BorderLayout.NORTH);
       f.getContentPane().add(table,BorderLayout.CENTER);
      运行结果就会跟之前一样有行标题了.
      

  2.   

    添加一个JScrollPane,把你的JTable放到JScrollPane中即可
      

  3.   

    jTable.setModule(new MainTalbe());
    public class MainTable extends AbstractTableModel
    {
         String[] columnNames = new String{"列一", "列二"};
         public String getColumnName(int col)
         {
              return columnNames[col];
         }
         ... ...
    }
      

  4.   

    应该是jTable.setModel(new MainTable());