程序中用的DefaultTableModel,下面的方法尝试删除当前选中的列JTable table;
DefaultTableModel tableModel;
...
int columnCount = tableModel.getColumnCount();
if (columnCount > 0)
{
    TableColumnModel columnModel = table.getColumnModel();
    TableColumn tableColumn = columnModel.getColumn(table.getSelectedColumn());
    columnModel.removeColumn(tableColumn);
    tableModel.setColumnCount(columnCount - 1);
}实际运行时,每次删除的是最后一列

解决方案 »

  1.   

    import java.awt.*;import javax.swing.*;
    import java.awt.Rectangle;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.table.DefaultTableModel;public class Frame1 extends JFrame {
        public Frame1() {
            try {
                
                jbInit();
                this.setExtendedState(this.MAXIMIZED_BOTH);
                this.setVisible(true);
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }    private void jbInit() throws Exception {
            getContentPane().setLayout(null);
            jScrollPane1.setBounds(new Rectangle(52, 60, 286, 193));
            jButton1.setBounds(new Rectangle(98, 262, 116, 29));
            jButton1.setText("删除当前行");
            jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
            this.getContentPane().add(jScrollPane1);
            this.getContentPane().add(jButton1);
            jScrollPane1.getViewport().add(jTable1);
        }    JScrollPane jScrollPane1 = new JScrollPane();
        Object[] title={"1111","222","333"};
        Object[][] data={{"a1","b","c"},{"a2","b","c"},{"a3","b","c"}};
        DefaultTableModel tableModel=new DefaultTableModel(data,title);
        JTable jTable1 = new JTable(tableModel);
        JButton jButton1 = new JButton();
        public void jButton1_actionPerformed(ActionEvent e) {
            DefaultTableModel tableModel=(DefaultTableModel)jTable1.getModel();
            //jTable1.getSelectedRow()是选择当前行的下标
            //通过removeRow方法来删除指定的下标
            tableModel.removeRow(jTable1.getSelectedRow());
        }
        public static void main(String[] args) {
            Frame1 f=new Frame1();
        }
    }
    class Frame1_jButton1_actionAdapter implements ActionListener {
        private Frame1 adaptee;
        Frame1_jButton1_actionAdapter(Frame1 adaptee) {
            this.adaptee = adaptee;
        }    public void actionPerformed(ActionEvent e) {
            adaptee.jButton1_actionPerformed(e);
        }
    }
      

  2.   

    TableColumn tc = table.getColumn(cloumnName);
    tc.setPreferredWidth(0);
    tc.setMinWidth(0);
    tc.setMaxWidth(0);将其隐藏掉
      

  3.   

    TableColumnModel tcm=table.getColumnModel();
    TableColumn ff=table.getColumn("name");
    tcm.removeColum(ff);
      

  4.   

    import java.awt.*;
    import java.awt.event.*;
    import java.util.Vector;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.*;public class AddRemoveCells implements ActionListener
    {
        JTable table = null;
        DefaultTableModel defaultModel = null;    public AddRemoveCells()
        {
            JFrame f = new JFrame();
            String[] name = {"字段 1","字段 2","字段 3","字段 4","字段 5"};
            String[][] data = new String[5][5];
            int value =1;
            for(int i=0; i<data.length; i++)
            {
                for(int j=0; j<data[i].length ; j++)
                    data[i][j] = String.valueOf(value++);
            }
                      
            defaultModel = new DefaultTableModel(data,name);
            table=new JTable(defaultModel);
            table.setPreferredScrollableViewportSize(new Dimension(400, 80));
            JScrollPane s = new JScrollPane(table);
            
            JPanel panel = new JPanel();
            JButton b = new JButton("增加行");
            panel.add(b);
            b.addActionListener(this);
            b = new JButton("增加列");
            panel.add(b);
            b.addActionListener(this);
            b = new JButton("删除行");
            panel.add(b);
            b.addActionListener(this);
            b = new JButton("删除列");
            panel.add(b);
            b.addActionListener(this);
            
            Container contentPane = f.getContentPane();
            contentPane.add(panel, BorderLayout.NORTH);
            contentPane.add(s, BorderLayout.CENTER);
            
        f.setTitle("AddRemoveCells");
            f.pack();
            f.setVisible(true);
            
            f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        }
        /*要删除列必须使用TableColumnModel界面定义的removeColumn()方法。因此我闪先由JTable类的getColumnModel()方法取得
         *TableColumnModel对象,再由TableColumnModel的getColumn()方法取得要删除列的TableColumn.此TableColumn对象当作是
         *removeColumn()的参数。删除此列完毕后必须重新设置列数,也就是使用DefaultTableModel的setColumnCount()方法来设置。
         */
        public void actionPerformed(ActionEvent e)
        {
            if(e.getActionCommand().equals("增加列"))
                defaultModel.addColumn("增加列");
            if(e.getActionCommand().equals("增加行"))
                defaultModel.addRow(new Vector());
            if(e.getActionCommand().equals("删除列"))
            {
                int columncount = defaultModel.getColumnCount()-1;
                if(columncount >= 0)//若columncount<0代表已经没有任何列了。
                {
                    TableColumnModel columnModel = table.getColumnModel();
                    TableColumn tableColumn = columnModel.getColumn(columncount);
                    columnModel.removeColumn(tableColumn);
                    defaultModel.setColumnCount(columncount);
                }
            }
            if(e.getActionCommand().equals("删除行"))
            {
                int rowcount = defaultModel.getRowCount()-1;//getRowCount返回行数,rowcount<0代表已经没有任何行了。
                if(rowcount >= 0)
                {
                    defaultModel.removeRow(rowcount);
                    defaultModel.setRowCount(rowcount);//删除行比较简单,只要用DefaultTableModel的removeRow()方法即可。删除
                     //行完毕后必须重新设置列数,也就是使用DefaultTableModel的setRowCount()方法来设置。
                }
            }
            table.revalidate();
        }
        
        public static void main(String args[]) {
            new AddRemoveCells();
        }
    }
      

  5.   

    6楼的程序是《深入浅出Java Swing》书上的例子,那是删除最后一列的
    5楼的
    TableColumnModel   tcm=table.getColumnModel(); 
    TableColumn   ff=table.getColumn( "name "); 
    tcm.removeColum(ff);
    是可以删除一列,把"name"换成选择的列就行,但是如果重新增加一列的话...原来删除之前的列全显现出来了,
    好象tcm.removeColum(ff);是隐藏一列似的。在后面加一句
    defaultModel.setColumnCount(columncount); OK,可以删除了,增加列也不会显示原来的列了,但是...
    仔细看一下,删除的怎么是最后一列呢,奇怪???