写了个例子,看看是不是你想要的(就是界面难看些^_^)import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.table.JTableHeader;
import javax.swing.table.DefaultTableModel;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTable;public class JTableTest extends JPanel {
public static String[][] data = {
{"nancy","cong","20"}
,{"rick","murphy","21"}
,{"marry","sunny","22"}
,{"jim","chen","23"}};
public static String[] columnName = {"firstName","lastName","age"};
protected JTable table = null;
protected JButton newButton = new JButton("new line");
protected JButton delButton = new JButton("del line");

public JTableTest(){
this.setLayout(new GridLayout(5,1));
DefaultTableModel model = new DefaultTableModel(data,columnName);
table = new JTable(model);
delButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
int sr = getSelectedRow();
if(sr >= 0){
((DefaultTableModel)table.getModel()).removeRow(sr);
}
}
});
newButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
String[] newLine = {"firstName","lastName","age"};
((DefaultTableModel)table.getModel()).addRow(newLine);
}
});
this.add(new JTableHeader(table.getColumnModel()));
this.add(table);
this.add(newButton);
this.add(delButton);
}

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setContentPane(new JTableTest());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(640,480);
frame.setVisible(true);
}

public int getSelectedRow(){
int[] sr = table.getSelectedRows();
if(sr.length>0){
return sr[0];
}else{
return(-1);
}
}
}

解决方案 »

  1.   

    第一个问题,重载TableModel的isCellEditable方法即可。
    后两个问题,TableModel修改了,通知一下视图即可。
      

  2.   

    to:rick_silver(杨若蝉我想把panel设置成固定大小然后在jtable上加一个滚动条这样,当我增加多行后按钮就不会看不见了请问应该如何实现?????
      

  3.   

    添加滚动条很简单,只要把JTable包装在一个JScrollPane中就可以了,至于规定JTable的尺寸,不太符合java界面的模式,一般都是采用布局管理器管理组件的显示的,你有时间可以看一下布局管理器。
    更改后的代码如下:import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JScrollPane;
    import javax.swing.table.JTableHeader;
    import javax.swing.table.DefaultTableModel;
    import java.awt.GridLayout;
    import java.awt.BorderLayout;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;/*
     * Created on 2004-6-28 
    */
    import javax.swing.JTable;
    /**
     * @author 郝勇 
    */
    public class JTableTest extends JPanel {
    public static String[][] data = {
    {"nancy","cong","20"}
    ,{"rick","murphy","21"}
    ,{"marry","sunny","22"}
    ,{"jim","chen","23"}};
    public static String[] columnName = {"firstName","lastName","age"};
    protected JTable table = null;
    protected JButton newButton = new JButton("new line");
    protected JButton delButton = new JButton("del line");

    public JTableTest(){
    //this.setSize(300,200);
    //this.setLayout(new BorderLayout());
    DefaultTableModel model = new DefaultTableModel(data,columnName);
    table = new JTable(model);
    delButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){
    int sr = getSelectedRow();
    if(sr >= 0){
    ((DefaultTableModel)table.getModel()).removeRow(sr);
    }
    }
    });
    newButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){
    String[] newLine = {"firstName","lastName","age"};
    ((DefaultTableModel)table.getModel()).addRow(newLine);
    }
    });
    //this.add(new JTableHeader(table.getColumnModel()));
    JScrollPane jsp = new JScrollPane(table);
    jsp.setSize(300,300);
    this.add(jsp);
    this.add(newButton);
    this.add(delButton);
    }

    public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setContentPane(new JTableTest());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(640,480);
    frame.setVisible(true);
    }

    public int getSelectedRow(){
    int[] sr = table.getSelectedRows();
    if(sr.length>0){
    return sr[0];
    }else{
    return(-1);
    }
    }
    }
      

  4.   

    To: rick_silver(杨若蝉) 
    还想请教一下:怎样让jtable中的某一行处在选中状态?我想在删除一行后将其上一行设置为选中的状态请问应该如何实现????
      

  5.   

    用jtable的setRowSelectionInterval方法实现选定行,代码如下(其实就在删除事件中加两行代码就可以了)import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JScrollPane;
    import javax.swing.table.JTableHeader;
    import javax.swing.table.DefaultTableModel;
    import java.awt.GridLayout;
    import java.awt.BorderLayout;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JTable;
    public class JTableTest extends JPanel {
    public static String[][] data = {
    {"nancy","cong","20"}
    ,{"rick","murphy","21"}
    ,{"marry","sunny","22"}
    ,{"jim","chen","23"}};
    public static String[] columnName = {"firstName","lastName","age"};
    protected JTable table = null;
    protected JButton newButton = new JButton("new line");
    protected JButton delButton = new JButton("del line");

    public JTableTest(){
    //this.setSize(300,200);
    //this.setLayout(new BorderLayout());
    DefaultTableModel model = new DefaultTableModel(data,columnName);
    table = new JTable(model);
    delButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){
    int sr = getSelectedRow();
    if(sr >= 0){
    ((DefaultTableModel)table.getModel()).removeRow(sr);
    }
    //remove all selections
    table.clearSelection();
    //select first row
    table.setRowSelectionInterval(0,0);
    }
    });
    newButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){
    String[] newLine = {"firstName","lastName","age"};
    ((DefaultTableModel)table.getModel()).addRow(newLine);
    }
    });
    //this.add(new JTableHeader(table.getColumnModel()));
    JScrollPane jsp = new JScrollPane(table);
    jsp.setSize(300,300);
    this.add(jsp);
    this.add(newButton);
    this.add(delButton);
    }

    public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setContentPane(new JTableTest());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(640,480);
    frame.setVisible(true);
    }

    public int getSelectedRow(){
    int[] sr = table.getSelectedRows();
    if(sr.length>0){
    return sr[0];
    }else{
    return(-1);
    }
    }
    }
      

  6.   

    To: rick_silver(杨若蝉) 还想麻烦你一下,在你的程序中有如下定义:
     public  static String[][] data = {{"One","1"},{"Two","2"},{"Three","3"}};
    这样,就把jtable中的数据定死了,我要显示的数据是不确定的,现在我想实现的是,
    String[] name = {"One","Two","Three"};
    String[] index = {"1","2","3"};
    我怎样把上面的数组组合成你的data,我想应该是用循环,但定义data的时候可以用循环吗
    希望你能够再帮忙解决一下非常感谢!!!!!
      

  7.   

    比如有如下数组
    public static String[] firstName = {"nancy","rick","marry","jim",};
    public static String[] lastName = {"cong","murphy","marry","chen"};
    public static String[] age = {"20","21","22","23"};

    String[][] data = new String[firstName.length][3];
    for(int i=0;i<firstName.length;i++){
    data[i][0] = firstName[i];
    data[i][1] = lastName[i];
    data[i][2] = age[i];
    }
    就可以得出组合起来的二维数组了全部代码如下:
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JScrollPane;
    import javax.swing.table.JTableHeader;
    import javax.swing.table.DefaultTableModel;
    import java.awt.GridLayout;
    import java.awt.BorderLayout;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JTable;public class JTableTest extends JPanel {
    /*
    public static String[][] data = {
    {"nancy","cong","20"}
    ,{"rick","murphy","21"}
    ,{"marry","sunny","22"}
    ,{"jim","chen","23"}};
    */
    public static String[] firstName = {"nancy","rick","marry","jim",};
    public static String[] lastName = {"cong","murphy","marry","chen"};
    public static String[] age = {"20","21","22","23"};
    public static String[] columnName = {"firstName","lastName","age"};
    protected JTable table = null;
    protected JButton newButton = new JButton("new line");
    protected JButton delButton = new JButton("del line");

    public JTableTest(){
    //this.setSize(300,200);
    //this.setLayout(new BorderLayout());
    String[][] data = new String[firstName.length][3];
    for(int i=0;i<firstName.length;i++){
    data[i][0] = firstName[i];
    data[i][1] = lastName[i];
    data[i][2] = age[i];
    }
    DefaultTableModel model = new DefaultTableModel(data,columnName);
    table = new JTable(model);
    delButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){
    int sr = getSelectedRow();
    if(sr >= 0){
    ((DefaultTableModel)table.getModel()).removeRow(sr);
    }
    //remove all selections
    table.clearSelection();
    //select first row
    table.setRowSelectionInterval(0,0);
    }
    });
    newButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){
    String[] newLine = {"firstName","lastName","age"};
    ((DefaultTableModel)table.getModel()).addRow(newLine);
    }
    });
    //this.add(new JTableHeader(table.getColumnModel()));
    JScrollPane jsp = new JScrollPane(table);
    jsp.setSize(300,300);
    this.add(jsp);
    this.add(newButton);
    this.add(delButton);
    }

    public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setContentPane(new JTableTest());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(640,480);
    frame.setVisible(true);
    }

    public int getSelectedRow(){
    int[] sr = table.getSelectedRows();
    if(sr.length>0){
    return sr[0];
    }else{
    return(-1);
    }
    }
    }