Swing 中 Jtable的表头 放置一个 JTextField组件显示出来了,但是却输入不了?求大神告知:

zhu_9527 2016-05-27 04:46:19
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();
}
}
...全文
148 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐先生 2016-06-08
  • 打赏
  • 举报
回复
在描述器是不是不设置该列为只读属性了?

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧