为什么我的jTable中第一列的下拉菜单失效呢??package in;import javax.swing.table.*;
import javax.swing.*;import java.awt.*;
import java.awt.event.*;
import java.util.*;public class MyTable extends JTable {
//default constructor
public MyTable() {
super();
}
//constructor to create a table with given number of rows and columns
public MyTable(int row, int col) {
super(row, col);
}
public MyTable(Object[][] rowData,Object[] columnNames){
super(rowData,columnNames);
}
public void changeSelection(int rowIndex, int columnIndex,boolean toggle, boolean extend){
super.changeSelection(rowIndex,columnIndex,toggle,extend);
//cell获得焦点时自动进入编辑状态
super.editCellAt(rowIndex,columnIndex,null);
//得到该表格的celleditor
final CellEditor ce=super.getCellEditor();
//table失去焦点时自动存储最后cell中的值,防止数据丢失
this.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent e) {
} public void focusLost(FocusEvent e) {
ce.stopCellEditing();
}
});
}
public static void main(String[] args){
JFrame jf=new JFrame();
MyTable mt=new MyTable(100,2);
Object[] gender={"男","女"};
mt.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(new JComboBox(gender)));
JScrollPane js=new JScrollPane(mt);
jf.getContentPane().add(js,BorderLayout.CENTER);
jf.setTitle("下拉菜单");
jf.pack();
jf.setVisible(true);
jf.addWindowListener(new WindowAdapter(){
public void windwoClosing(WindowEvent e){
System.exit(0);
}
});
}
}
import javax.swing.*;import java.awt.*;
import java.awt.event.*;
import java.util.*;public class MyTable extends JTable {
//default constructor
public MyTable() {
super();
}
//constructor to create a table with given number of rows and columns
public MyTable(int row, int col) {
super(row, col);
}
public MyTable(Object[][] rowData,Object[] columnNames){
super(rowData,columnNames);
}
public void changeSelection(int rowIndex, int columnIndex,boolean toggle, boolean extend){
super.changeSelection(rowIndex,columnIndex,toggle,extend);
//cell获得焦点时自动进入编辑状态
super.editCellAt(rowIndex,columnIndex,null);
//得到该表格的celleditor
final CellEditor ce=super.getCellEditor();
//table失去焦点时自动存储最后cell中的值,防止数据丢失
this.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent e) {
} public void focusLost(FocusEvent e) {
ce.stopCellEditing();
}
});
}
public static void main(String[] args){
JFrame jf=new JFrame();
MyTable mt=new MyTable(100,2);
Object[] gender={"男","女"};
mt.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(new JComboBox(gender)));
JScrollPane js=new JScrollPane(mt);
jf.getContentPane().add(js,BorderLayout.CENTER);
jf.setTitle("下拉菜单");
jf.pack();
jf.setVisible(true);
jf.addWindowListener(new WindowAdapter(){
public void windwoClosing(WindowEvent e){
System.exit(0);
}
});
}
}
import javax.swing.*;import java.awt.*;
import java.awt.event.*;
import java.util.*;public class MyTable extends JTable {
//default constructor
public MyTable() {
super();
}
//constructor to create a table with given number of rows and columns
public MyTable(int row, int col) {
super(row, col);
}
public MyTable(Object[][] rowData,Object[] columnNames){
super(rowData,columnNames);
}
public void changeSelection(int rowIndex, int columnIndex,boolean toggle, boolean extend){
super.changeSelection(rowIndex,columnIndex,toggle,extend);
//cell获得焦点时自动进入编辑状态
super.editCellAt(rowIndex,columnIndex,null);
//得到该表格的celleditor
final CellEditor ce=super.getCellEditor();
//table失去焦点时自动存储最后cell中的值,防止数据丢失
this.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent e) {
} public void focusLost(FocusEvent e) {
// ce.stopCellEditing();//打开下拉菜单时,表格会失去焦点,相反焦点会到JComboBox中去
}
});
}
public static void main(String[] args){
JFrame jf=new JFrame();
MyTable mt=new MyTable(100,2);
Object[] gender={"男","女"};
mt.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(new JComboBox(gender)));
JScrollPane js=new JScrollPane(mt);
jf.getContentPane().add(js,BorderLayout.CENTER);
jf.setTitle("下拉菜单");
jf.pack();
jf.setVisible(true);
jf.addWindowListener(new WindowAdapter(){
public void windwoClosing(WindowEvent e){
System.exit(0);
}
});
}
}