table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
这个方法不能让列宽随数据的长度变化,要动态改变列宽,只能动态调用
int nWidth = 100;
jTable.getColumnModel().getColumn(0).setPreferredWidth(nWidth);
nWidth = 200;
jTable.getColumnModel().getColumn(0).setPreferredWidth(nWidth);具体根据需要来做

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.table.*;public class ResultSetTable
    {  public static void main(String[] args)
       {  JFrame frame = new ResultSetFrame();
          frame.show();
       }
    }/* this class is the base class for the scrolling and the
       caching result set table model. It stores the result set
       and its metadata.
    */abstract class ResultSetTableModel extends AbstractTableModel
    {  public ResultSetTableModel(ResultSet aResultSet)
       {  rs = aResultSet;
          try
          {  rsmd = rs.getMetaData();
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
          }
       }   public String getColumnName(int c)
       {  try
          {  return rsmd.getColumnName(c + 1);
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
             return "";
          }
       }   public int getColumnCount()
       {  try
          {  return rsmd.getColumnCount();
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
             return 0;
          }
       }   protected ResultSet getResultSet()
       {  return rs;
       }   private ResultSet rs;
       private ResultSetMetaData rsmd;
    }/* this class uses a scrolling cursor, a JDBC 2 feature
    */class ScrollingResultSetTableModel extends ResultSetTableModel
    {  public ScrollingResultSetTableModel(ResultSet aResultSet)
       {  super(aResultSet);
       }   public Object getValueAt(int r, int c)
       {  try
          {  ResultSet rs = getResultSet();
             rs.absolute(r + 1);
             return rs.getObject(c + 1);
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
             return null;
          }
       }   public int getRowCount()
       {  try
          {  ResultSet rs = getResultSet();
             rs.last();
             return rs.getRow();
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
             return 0;
          }
       }
    }/* this class caches the result set data; it can be used
       if scrolling cursors are not supported
    */class CachingResultSetTableModel extends ResultSetTableModel
    {  public CachingResultSetTableModel(ResultSet aResultSet)
       {  super(aResultSet);
          try
          {  cache = new ArrayList();
             int cols = getColumnCount();
             ResultSet rs = getResultSet();         /* place all data in an array list of Object[] arrays
                We don't use an Object[][] because we don't know
                how many rows are in the result set
             */         while (rs.next())
             {  Object[] row = new Object[cols];
                for (int j = 0; j < row.length; j++)
                   row[j] = rs.getObject(j + 1);
                cache.add(row);
             }
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
          }
       }   public Object getValueAt(int r, int c)
       {  if (r < cache.size())
             return ((Object[])cache.get(r))[c];
          else
             return null;
       }   public int getRowCount()
       {  return cache.size();
       }   private ArrayList cache;
    }class ResultSetFrame extends JFrame
       implements ActionListener
    {  public ResultSetFrame()
       {  setTitle("ResultSet");
          setSize(300, 200);
          addWindowListener(new WindowAdapter()
             {  public void windowClosing(WindowEvent e)
                {  System.exit(0);
                }
             } );      /* find all tables in the database and add them to
             a combo box
          */      Container contentPane = getContentPane();
          tableNames = new JComboBox();
          tableNames.addActionListener(this);
          JPanel p = new JPanel();
          p.add(tableNames);
          contentPane.add(p, "North");      try
          {  Class.forName("org.gjt.mm.mysql.Driver");
                // force loading of driver
             String url = "jdbc:mysql://localhost/edusuite?useUnicode=true&characterEncoding=GB2312";
             String user = "sa";
             String password = "";
             con = DriverManager.getConnection(url, user,
                password);
             if (SCROLLABLE)
                stmt = con.createStatement(
                   ResultSet.TYPE_SCROLL_INSENSITIVE,
                   ResultSet.CONCUR_READ_ONLY);
             else
                stmt = con.createStatement();
             DatabaseMetaData md = con.getMetaData();
             ResultSet mrs = md.getTables(null, null, null,
                new String[] { "TABLE" });
             while (mrs.next())
                tableNames.addItem(mrs.getString(3));
              mrs.close();
          }
          catch(ClassNotFoundException e)
          {  System.out.println("Error " + e);
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
          }
       }   public void actionPerformed(ActionEvent evt)
       {  if (evt.getSource() == tableNames)
          {  // show the selected table from the combo box         if (scrollPane != null)
                getContentPane().remove(scrollPane);
             try
             {  String tableName
                   = (String)tableNames.getSelectedItem();
                if (rs != null) rs.close();
                String query = "SELECT * FROM " + tableName;
                rs = stmt.executeQuery(query);
                if (SCROLLABLE)
                   model = new ScrollingResultSetTableModel(rs);
                else
                   model = new CachingResultSetTableModel(rs);            JTable table = new JTable(model);
                scrollPane = new JScrollPane(table);
                getContentPane().add(scrollPane, "Center");
                pack();
                doLayout();
             }
             catch(SQLException e)
             {  System.out.println("Error " + e);
             }
          }
       }   private JScrollPane scrollPane;
       private ResultSetTableModel model;
       private JComboBox tableNames;
       private JButton nextButton;
       private JButton previousButton;
       private ResultSet rs;
       private Connection con;
       private Statement stmt;   private static boolean SCROLLABLE = false;
          // set to true if your database supports scrolling cursors
    }