import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.table.*;import java.awt.*;
import java.awt.event.*;
import java.util.*;public class TableEventEX extends JFrame { Object[][] bookData = {
{"Java 2 入门进阶 - 适用JDK5.0", "风卷残云", 590.0,
 "P4137", "2005-5-1"},
{"Visual C++.NET 入门进阶", "风卷残云讯", 750.0, 
 "P3237", "2003-9-1"},
{"Access 2003 过┏╯", "风卷残云", 590.0, 
 "A4023", "2004-3-1"},
{"Access 2003 祘Α砞璸", "风卷残云", 660.0, 
 "A4033", "2004-5-1"},
{"JSP 笆篈呼龟叭", "风卷残云", 720.0, 
 "W3135", "2003-12-1"},
{"ASP 笆篈呼龟叭", "风卷残云", 580.0, 
 "W4075", "2004-7-1"}}; String[] colName = {"书名", "出版社", "售价", "书号", "出版日期"}; JLabel lbSelRow = new JLabel(), lbSelCol = new JLabel();         public void valueChanged(ListSelectionEvent e){ super.valueChanged(e);
//呼叫基础类别valueChanged()方法, 
//否则行选取动作无法正常运作 //判断是否允许行选取,允许才显示被选取列的索引号
if(getRowSelectionAllowed()){
lbSelRow.setText(Arrays.toString(getSelectedRows()));
//将选取行的索引号设定给标签
}
else{
lbSelRow.setText(null);
}
} public void columnSelectionChanged(ListSelectionEvent e){ super.columnSelectionChanged(e);
//呼叫基础类别columnSelectionChanged(方法, 
//否则列选取动作无法正常运作 //判断是否允许列选取,允许才显示被选取列的索引号
if(getColumnSelectionAllowed()){
lbSelCol.setText(Arrays.toString(getSelectedColumns()));
//将选取列的索引号设定给标签
}
else{
lbSelCol.setText(null);
}
}
}; JCheckBox cbCell = new JCheckBox(),
cbRow = new JCheckBox(),
cbCol = new JCheckBox();

public TableEventEX() { tbBook.setSelectionBackground(Color.RED);
//设置选取时的背景色 tbBook.setSelectionForeground(Color.WHITE);
TableColumn colTitle = 
tbBook.getColumnModel().getColumn(0); colTitle.setPreferredWidth(200); cbRow.setSelected(tbBook.getRowSelectionAllowed()); cbCell.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){ tbBook.setCellSelectionEnabled(
(e.getStateChange() ==  ItemEvent.SELECTED)); cbRow.setSelected(tbBook.getRowSelectionAllowed());
cbCol.setSelected(tbBook.getColumnSelectionAllowed());
}
}); cbRow.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ boolean blSel = 
(e.getStateChange() ==  ItemEvent.SELECTED); tbBook.setRowSelectionAllowed(blSel); cbCell.setSelected(tbBook.getCellSelectionEnabled());
}
}); cbCol.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){ boolean blSel = 
(e.getStateChange() ==  ItemEvent.SELECTED); tbBook.setColumnSelectionAllowed(blSel); cbCell.setSelected(tbBook.getCellSelectionEnabled());
}
}); JButton btnSelAll = new JButton("选取全部"),
  btnUnSel = new JButton("取消选取");

btnSelAll.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tbBook.selectAll(); 
}
}); btnUnSel.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tbBook.clearSelection(); 
}
}); Box bxSel = new Box(BoxLayout.X_AXIS);
bxSel.add(new JLabel("选取方式的设定: "));
bxSel.add(cbCell);
bxSel.add(new JLabel("单元格"));
bxSel.add(Box.createHorizontalStrut(5));
bxSel.add(cbRow);
bxSel.add(new JLabel("行"));
bxSel.add(Box.createHorizontalStrut(5));
bxSel.add(cbCol);
bxSel.add(new JLabel("列"));
bxSel.add(Box.createHorizontalStrut(20));
bxSel.add(btnSelAll);
bxSel.add(Box.createHorizontalStrut(5));
bxSel.add(btnUnSel); Box bxSelRow = new Box(BoxLayout.X_AXIS);
bxSelRow.add(new JLabel("选取行: "));
bxSelRow.add(Box.createHorizontalStrut(5));
bxSelRow.add(lbSelRow); 
bxSelRow.add(Box.createHorizontalGlue()); Box bxSelCol = new Box(BoxLayout.X_AXIS);
bxSelCol.add(new JLabel("选取列: "));
bxSelCol.add(Box.createHorizontalStrut(5));
bxSelCol.add(lbSelCol); 
bxSelCol.add(Box.createHorizontalGlue()); Box bxSelStatus = new Box(BoxLayout.Y_AXIS);
bxSelStatus.add(bxSelRow);
bxSelStatus.add(bxSelCol); Container cp = getContentPane();  cp.setLayout(new BorderLayout(10, 10)); cp.add(bxSel, BorderLayout.NORTH);
cp.add(new JScrollPane(tbBook));
cp.add(bxSelStatus, BorderLayout.SOUTH);

getRootPane().setBorder(new EmptyBorder(5, 5, 5, 5));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 249);
setVisible(true);
} public static void main(String args[]) {
new TableEventEX();
}
}
这段代码中为什么要 super.valueChanged(e);
请大家指点下!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【flysky305】截止到2008-06-24 18:18:14的历史汇总数据(不包括此帖):
    发帖数:15                 发帖分:930                
    结贴数:14                 结贴分:910                
    未结数:1                  未结分:20                 
    结贴率:93.33 %            结分率:97.85 %            
    值得尊敬
      

  2.   

    super.valueChanged(e) : 调用基础类已经封装好的选择行功能的方法。参数ListSelectEvent 是事件类型。
      

  3.   

    你编译了吗?
    我觉得代码有误。
    super类JTable没有方法valueChanged(ListSelectionEvent e)
    我这儿编译错误百出
      

  4.   

    少了一行 JTable tbBook=new JTable(bookData,colName){
    在 public void valueChanged(ListSelectionEvent e){这行上面添加就可以了,估计是弄的时候不小心给搞掉了
    不过我关注的是为什么valueChanged下的lbSelRow.setText(null);一开始编译的时候会出现异常。这行删除也能通过、感觉这行行写不写无所谓!
      

  5.   

    这里super.valueChanged(ListSelectionEvent e)继承父类方法中valueChanged的功能。你下面的是在此基础上新添加的功能。个人感觉是这意思