Swing 中 Jtable的表头 放置一个 JTextField组件显示出来了,但是却输入不了?求大神告知:
Swing 中 Jtable的表头 放置一个 JTextField组件显示出来了,但是却输入不了?求大神告知:
代码1:
package com.njust.zht.test;
import java.awt.Component;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellRenderer;
public class MyHeaderButtonRenderer extends JTextField implements TableCellRenderer{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent( JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column ) {
// Boolean b = (Boolean) value;
// this.setSelected(b.booleanValue());
this.setEnabled(true);
this.setText("12345");
return this;
}
}
代码2:
package com.njust.zht.test;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import com.njust.zht.table.TableHeaderRenderer;
public class Test4JTable {
private JTable initTable(JTable table) {
DefaultTableModel dtm = new DefaultTableModel(new Object [] {"xxc","姓名", "年龄", "班级", "性别"},0);
dtm.addRow(new Object[] {"cxx","fox","12","050101","男"});
table.setModel(dtm);
TableColumnModel tcm = table.getColumnModel();
JTableHeader header =table.getTableHeader();
header.setUpdateTableInRealTime(true);
header.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
System.out.println("qqq");
int colIndex = table.getColumnModel().getColumnIndexAtX(e.getX());
System.out.println("coIndex="+colIndex);
if( colIndex==1 )
{
JTextField tf=new JTextField("asdasdasd");
tf.setEnabled(true);
table.getColumnModel().getColumn(1).setHeaderValue(tf);
header.repaint();
header.repaint();
}
}
});
header.setReorderingAllowed(true);
// table.getColumnModel().getColumn(0).setHeaderRenderer(new MyHeaderButtonRenderer());
tcm.getColumn(1).setHeaderRenderer(new MyHeaderButtonRenderer());
tcm.getColumn(1).setCellEditor(new DefaultCellEditor(new JTextField()));
tcm.getColumn(0).setPreferredWidth(30);
tcm.getColumn(0).setWidth(60);
tcm.getColumn(0).setMaxWidth(60);
return table;
}
public Test4JTable() {
JFrame frame = new JFrame("Table");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}});
// Take the dummy data from SwingSet.
// final Object[] names = new Object[3];
// final Object[][] data = {
// {"Mark", "Andrews", "Red", new Integer(2), Boolean.TRUE},
// {"Tom", "Ball", "Blue", new Integer(99), Boolean.FALSE} ,
// {"Tom", "Ball", "Blue", new Integer(99), Boolean.FALSE}
// };
//
// MyHeaderButtonRenderer m1button=new MyHeaderButtonRenderer();
// names[0]=m1button;
// MyHeaderButtonRenderer m2button=new MyHeaderButtonRenderer();
// names[1]=m2button;
// MyHeaderButtonRenderer m3button=new MyHeaderButtonRenderer();
// names[2]=m3button;
JTable tableView = new JTable();
initTable(tableView);
// ComboTableHeader cth = new ComboTableHeader();
JScrollPane scrollpane = new JScrollPane(tableView);
scrollpane.setPreferredSize(new Dimension(700, 300));
frame.getContentPane().add(scrollpane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new Test4JTable();
}
}