我要在JTable列表单元格中显示JCheckBox、JTextField等组件。能显示,但无法获得焦点(无法点击、输入)该如何解决?万分感谢。部分代码如下:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if (column != 0)
return super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
else {
JTextField jTextField = new JTextField("123456");
return jTextField;
}
}
});
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if (column != 0)
return super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
else {
JTextField jTextField = new JTextField("123456");
return jTextField;
}
}
});
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.*;
class ATableClass extends JTable {
public Class getColumnClass(int column) {
try {
if (column == 0) {
return Class.forName("java.lang.Boolean");
}
return Class.forName("java.lang.Object");
}
catch (ClassNotFoundException ex) {
ex.printStackTrace();
return null;
}
}
}
public class TableExample1 extends JFrame {
JScrollPane jScrollPane1 = new JScrollPane();
ATableClass tableOne = new ATableClass();
DefaultTableModel model = new DefaultTableModel();
Boolean [] boolArray=new Boolean[] {
new Boolean(true),
new Boolean(false),
new Boolean(true),
new Boolean(false),
new Boolean(true),
new Boolean(false)
}; public TableExample1() {
try {
jbInit();
tableOne.setModel(model);
model.addColumn("CbxColumn", boolArray);
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TableExample1 tex = new TableExample1();
tex.setBounds(10,10,300,200);
tex.setVisible(true);
}
private void jbInit() throws Exception {
this.getContentPane().add(jScrollPane1, BorderLayout.CENTER);
jScrollPane1.getViewport().add(tableOne, null);
}
}
给个例子
import java.awt.*;
import javax.swing.table.*;
import java.util.EventObject;
import javax.swing.event.CellEditorListener;/**
* <p>Title: Gym</p>
* <p>Description: program snippets for exercise</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: sjallejavamanscomany</p>
* @author sjalle
* @version 1.0
*/
class ATableClass extends JTable {
public Class getColumnClass(int column) {
try {
if (column == 0) {
return Class.forName("java.lang.Boolean");
} else if (column == 1) {
return Class.forName("java.lang.Integer");
}return Class.forName("java.lang.Object");
}
catch (ClassNotFoundException ex) {
ex.printStackTrace();
return null;
}
}
}
public class TableExample1 extends JFrame {
JScrollPane jScrollPane1 = new JScrollPane();
ATableClass tableOne = new ATableClass();
DefaultTableModel model = new DefaultTableModel();
JCheckBox cbx=new JCheckBox();
String [] sArray =new String [] {
"lalala","lala"
};Integer [] intArray = new Integer[] {
new Integer(2),
new Integer(77),
new Integer(34),
new Integer(5)
};
Boolean [] boolArray=new Boolean[] {
new Boolean(true),
new Boolean(false),
new Boolean(true),
new Boolean(false),
new Boolean(true),
new Boolean(false)
};public TableExample1() {
try {
jbInit();tableOne.setModel(model);
model.addColumn("CbxColumn", boolArray);
model.addColumn("IDs", intArray);
model.addColumn("Names", sArray);
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TableExample1 tex = new TableExample1();
tex.setBounds(10,10,300,200);
tex.setVisible(true);
}
private void jbInit() throws Exception {
this.getContentPane().add(jScrollPane1, BorderLayout.CENTER);
jScrollPane1.getViewport().add(tableOne, null);
}
}