渲染器:
class CheckBoxRenderer implements TableCellRenderer{
private NCheckBox checkBox;
private NLabel label;
public CheckBoxRenderer(NCheckBox checkBox) {
this.checkBox = checkBox;
}
public CheckBoxRenderer(NCheckBox checkBox, NLabel label){
this.checkBox = checkBox;
this.label = label;
}
/**
* getTableCellRendererComponent
*
* @param table JTable
* @param value Object
* @param isSelected boolean
* @param hasFocus boolean
* @param row int
* @param column int
* @return Component
*/
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if(column == 0){
// checkBox.setSelected(true);
checkBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
checkBox.setSelected(true);
logger.info("发生事件");
} });
if(isSelected){
checkBox.setSelected(true);
}else{
checkBox.setSelected(false);
}
return checkBox;
}else{
label.setText(value.toString());
label.setBorder(BorderFactory.createEtchedBorder());
return label;
} } }程序中调用:JTableHeader tableHeader = table.getTableHeader();
tableHeader.setDefaultRenderer(new CheckBoxRenderer(new NCheckBox("全选"), new NLabel()));出现的复选框不可选,不响应鼠标事件。
请问如何解决,谢谢
class CheckBoxRenderer implements TableCellRenderer{
private NCheckBox checkBox;
private NLabel label;
public CheckBoxRenderer(NCheckBox checkBox) {
this.checkBox = checkBox;
}
public CheckBoxRenderer(NCheckBox checkBox, NLabel label){
this.checkBox = checkBox;
this.label = label;
}
/**
* getTableCellRendererComponent
*
* @param table JTable
* @param value Object
* @param isSelected boolean
* @param hasFocus boolean
* @param row int
* @param column int
* @return Component
*/
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if(column == 0){
// checkBox.setSelected(true);
checkBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
checkBox.setSelected(true);
logger.info("发生事件");
} });
if(isSelected){
checkBox.setSelected(true);
}else{
checkBox.setSelected(false);
}
return checkBox;
}else{
label.setText(value.toString());
label.setBorder(BorderFactory.createEtchedBorder());
return label;
} } }程序中调用:JTableHeader tableHeader = table.getTableHeader();
tableHeader.setDefaultRenderer(new CheckBoxRenderer(new NCheckBox("全选"), new NLabel()));出现的复选框不可选,不响应鼠标事件。
请问如何解决,谢谢
请问editorR如何加,好像不可以往一个JTableHeader里加editor,往table里editor是加一列。
请详细指教...
_______________________________________
但你可以监听JTableHeader的鼠标事件,JTableHeader也继承JComponent.
然后利用JTableHeader的columnAtPoint(Point point)来确定这个点击在那一列。
然后repaint()一下!但CheckBoxRenderer要重新实现一下,让他跟踪记录哪些列被选中,哪些没有。你可以让CheckBoxRenderer来实现鼠标监听器。不过这个方法还是有一个问题,鼠标点击只能精确到列而不是CheckBox的小方框。
不知道这是不是一个问题!