我先要在单元格中显示JComboBox,也不能。//SimpleTableFrame.java
//Demo the simple usage of JTableimport javax.swing.*;
import javax.swing.table.*;public class SimpleTableFrame extends JFrame {
JTable table;
public SimpleTableFrame() {
AbstractTableModel dataModel = new AbstractTableModel() {
public int getColumnCount() { return 10; }
public int getRowCount() { return 10;}
public Object getValueAt(int row, int col) { return new Integer(row*col); }
}; table = new JTable(dataModel);
TableColumn column1 = table.getColumnModel().getColumn(1);
String[] str1 = {"one", "two", "three"};
JComboBox comboBox = new JComboBox(str1);
column1.setCellEditor(new DefaultCellEditor(comboBox)); JScrollPane scrollpane = new JScrollPane(table);
this.getContentPane().add(scrollpane);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400,200);
this.setVisible(true);
} public static void main(String[] args) {
SimpleTableFrame simpleTableFrame = new SimpleTableFrame();
}
}
//Demo the simple usage of JTableimport javax.swing.*;
import javax.swing.table.*;public class SimpleTableFrame extends JFrame {
JTable table;
public SimpleTableFrame() {
AbstractTableModel dataModel = new AbstractTableModel() {
public int getColumnCount() { return 10; }
public int getRowCount() { return 10;}
public Object getValueAt(int row, int col) { return new Integer(row*col); }
}; table = new JTable(dataModel);
TableColumn column1 = table.getColumnModel().getColumn(1);
String[] str1 = {"one", "two", "three"};
JComboBox comboBox = new JComboBox(str1);
column1.setCellEditor(new DefaultCellEditor(comboBox)); JScrollPane scrollpane = new JScrollPane(table);
this.getContentPane().add(scrollpane);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400,200);
this.setVisible(true);
} public static void main(String[] args) {
SimpleTableFrame simpleTableFrame = new SimpleTableFrame();
}
}
TableColumnModel tcm = table.getColumnModel();
TableColumn tc = tcm.getColumn(genderColumn);// genderColumn为你的性别的例序号。
tc.setCellRenderer(new GenderRenderer());
tc.setCellEditor(new GenderEditor());
限制如下,该列类型为boolean。/**
* GenderEditor.java
*/
import java.awt.Component;
import java.util.EventObject;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;public class GenderEditor extends JComboBox implements TableCellEditor { protected EventListenerList listenerList = new EventListenerList();
protected ChangeEvent changeEvent = new ChangeEvent(this); public GenderEditor() {
super();
addItem("Male");
addItem("Female");
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
fireEditingStopped();
}
});
} public void addCellEditorListener(CellEditorListener listener) {
listenerList.add(CellEditorListener.class, listener);
} public void removeCellEditorListener(CellEditorListener listener) {
listenerList.remove(CellEditorListener.class, listener);
} protected void fireEditingStopped() {
CellEditorListener listener;
Object[] listeners = listenerList.getListenerList();
for (int i = 0; i < listeners.length; i++) {
if (listeners[i] == CellEditorListener.class) {
listener = (CellEditorListener)listeners[i + 1];
listener.editingStopped(changeEvent);
}
}
} protected void fireEditingCanceled() {
CellEditorListener listener;
Object[] listeners = listenerList.getListenerList();
for (int i = 0; i < listeners.length; i++) {
if (listeners[i] == CellEditorListener.class) {
listener = (CellEditorListener)listeners[i + 1];
listener.editingCanceled(changeEvent);
}
}
} public void cancelCellEditing() {
fireEditingCanceled();
} public boolean stopCellEditing() {
fireEditingStopped();
return true;
} public boolean isCellEditable(EventObject event) {
return true;
} public boolean shouldSelectCell(EventObject event) {
return true;
} public Object getCellEditorValue() {
return new Boolean(getSelectedIndex() == 0 ? true : false);
} public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
boolean isMale = ((Boolean)value).booleanValue();
setSelectedIndex(isMale ? 0 : 1);
return this;
} }
/**
* GenderRender.java
*/
import java.awt.Component;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;public class GenderRenderer extends JComboBox implements TableCellRenderer { public GenderRenderer() {
super();
addItem("Male");
addItem("Female");
} public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) { if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
} boolean isMale = ((Boolean)value).booleanValue();
setSelectedIndex(isMale ? 0 : 1);
return this;
} }
一个人摸索真的很难搞定,有人帮忙就快多了,多谢楼上诸位了!