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);
请大家指点下!
楼主【flysky305】截止到2008-06-24 18:18:14的历史汇总数据(不包括此帖):
发帖数:15 发帖分:930
结贴数:14 结贴分:910
未结数:1 未结分:20
结贴率:93.33 % 结分率:97.85 %
值得尊敬
我觉得代码有误。
super类JTable没有方法valueChanged(ListSelectionEvent e)
我这儿编译错误百出
在 public void valueChanged(ListSelectionEvent e){这行上面添加就可以了,估计是弄的时候不小心给搞掉了
不过我关注的是为什么valueChanged下的lbSelRow.setText(null);一开始编译的时候会出现异常。这行删除也能通过、感觉这行行写不写无所谓!