程序中用的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);
}实际运行时,每次删除的是最后一列
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);
}实际运行时,每次删除的是最后一列
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);
}
}
tc.setPreferredWidth(0);
tc.setMinWidth(0);
tc.setMaxWidth(0);将其隐藏掉
TableColumn ff=table.getColumn("name");
tcm.removeColum(ff);
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楼的
TableColumnModel tcm=table.getColumnModel();
TableColumn ff=table.getColumn( "name ");
tcm.removeColum(ff);
是可以删除一列,把"name"换成选择的列就行,但是如果重新增加一列的话...原来删除之前的列全显现出来了,
好象tcm.removeColum(ff);是隐藏一列似的。在后面加一句
defaultModel.setColumnCount(columncount); OK,可以删除了,增加列也不会显示原来的列了,但是...
仔细看一下,删除的怎么是最后一列呢,奇怪???