菜鸟求助:
我想通过delete键删除JTable中选中的行,用了KeyEvent.getKeyCode() == KeyEvent.VK_DELETE,
按下delete键无法删除,发出“丁”的提示音,这是怎么回事?
解决方案 »
- 请教:一段简单的继承和重载代码,报错
- 请问如何在JComboBox中添加JCheckBox组件
- java 连接 oracle 11g的问题
- 关于java的反射机制的问题
- 用正则怎么表示这个字串<meta http-equiv="content-type" content="text/html; charset=utf-8">
- 急!按32位异或问题?高手请进!!
- JTable可以不放在JScrollPane中而且产生列头吗?
- SQL 多行子查询的问题
- 历史遗留问题!!!高分高分
- 大家看看这段代码有什么问题
- C学的还可以,但还未深入学习C++,能学JAVA吗,如何快速起步?
- firefox 中如何使用js获取当前应用名
额,感觉不是代码的问题,我把键盘响应代码删掉依然是这样。不过我发现按下DELETE键后会使单元格进入可编辑状态,就像按下backspace键会删除单元格内的最后一个字符,而DELETE键是删除光标后面的字符,而默认光标是在最后面的,所以没有可以删除的字符,所以会提示“丁”的声音不知道是不是这样。唉,这是书上的一道习题,我竟不会做啊。求高手
额,绑定到JTable和JFrame都试过了
public class TableModelDemo extends JFrame implements ActionListener
{
//data field
private JLabel jlblSelectionMode = new JLabel("SelectionMode",JLabel.RIGHT);
private JComboBox jcboSelectionMode;
private JCheckBox jchkRowSelectionAllowed = new JCheckBox("RowSelectionAllowed",true);
private JCheckBox jchkColumnSelectionAllowed = new JCheckBox("ColumnSelectionAllowed",false);
private JTable jtable;
private JButton jbtSave,jbtClear,jbtRestore,jbtAddRow,jbtAddColumn,jbtDelRow,jbtDelColumn;
private JPanel jpanelNorth,jpanel1,jpanel2,jpanelCenter,jpanelSouth;
private DefaultTableModel model;
//method field
TableModelDemo()
{
//开辟空间
jcboSelectionMode = new JComboBox(new String[] {"SINGLE_SLECTION","SINGEL_INTERVAL_SELECTION","MULTIPLE_INTERVAL_SELECTION"});
jbtSave = new JButton("保存");
jbtClear = new JButton("清空");
jbtRestore = new JButton("恢复");
jbtAddRow = new JButton("添加新行");
jbtAddColumn = new JButton("添加新列");
jbtDelRow = new JButton("删除选中行");
jbtDelColumn =new JButton("删除选中列");
jpanelNorth = new JPanel();
jpanel1 = new JPanel(new GridLayout(1,2,5,5));
jpanelCenter = new JPanel(new BorderLayout());
jpanel2 = new JPanel();
jpanelSouth = new JPanel(new GridLayout(2,2,5,5));
Object[][] data = new Object[][] {
{"USA" , "Washington DC" ,280,true},
{"Canada" , "Ottawa" ,60,true},
{"United Kingdom" , "London" ,60,true},
{"Germany" , "Berlin" , 83, true},
{"France" , "Paris" , 60 , true},
{"Norway" , "Oslo" , 4.5 , true},
{"India" , "New Deli" , 1046 , true}
};
String[] names = new String[]{"Country","Capital","Population in Millons","Democracy"};
model = new DefaultTableModel(data,names);
jtable = new JTable(model);
jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//注册监听
jbtSave.addActionListener(this);
jbtClear.addActionListener(this);
jbtRestore.addActionListener(this);
jbtAddRow.addActionListener(this);
jbtAddColumn.addActionListener(this);
jbtDelRow.addActionListener(this);
jbtDelColumn.addActionListener(this);
jchkRowSelectionAllowed.addActionListener(this);
jchkColumnSelectionAllowed.addActionListener(this);
jcboSelectionMode.addActionListener(this);
jtable.addKeyListener( new KeyAdapter()
{
public void keyPressed(KeyEvent event)
{
if(event.getKeyCode() == KeyEvent.VK_DELETE)
{
int[] selectedRowIndices = jtable.getSelectedRows();
for(int i = 0; i < selectedRowIndices.length; i++)
model.removeRow(i);
}
}
});
//排布组件
jpanelNorth.add(jlblSelectionMode);
jpanelNorth.add(jcboSelectionMode);
jpanel1.add(jchkRowSelectionAllowed);
jpanel1.add(jchkColumnSelectionAllowed);
jpanel2.add(jbtSave);
jpanel2.add(jbtClear);
jpanel2.add(jbtRestore);
jpanelCenter.add(jpanel1,BorderLayout.NORTH);
jpanelCenter.add(new JScrollPane(jtable),BorderLayout.CENTER);
jpanelCenter.add(jpanel2,BorderLayout.SOUTH);
jpanelSouth.add(jbtAddRow);
jpanelSouth.add(jbtAddColumn);
jpanelSouth.add(jbtDelRow);
jpanelSouth.add(jbtDelColumn);
add(jpanelNorth,BorderLayout.NORTH);
add(jpanelCenter,BorderLayout.CENTER);
add(jpanelSouth,BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent event)
{
Object source = event.getSource();
if(source == jcboSelectionMode)
{
if(jcboSelectionMode.getSelectedItem().equals("SINGLE_SELECTION"))
jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
else if(jcboSelectionMode.getSelectedItem().equals("SINGLE_INTERVAL_SELECTION"))
jtable.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
else
jtable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
}
if(source == jchkRowSelectionAllowed)
jtable.setRowSelectionAllowed(jchkRowSelectionAllowed.isSelected());
if(source == jchkColumnSelectionAllowed)
jtable.setColumnSelectionAllowed(jchkColumnSelectionAllowed.isSelected());
if(source == jbtSave)
{
try
{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("tablemodel.dat"));
out.writeObject( model.getDataVector());
out.writeObject(getColumnNames());
out.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
if(source == jbtClear)
model.setRowCount(0);
if(source == jbtRestore)
{
try
{
ObjectInputStream in = new ObjectInputStream(new FileInputStream("tablemodel.dat"));
model.setDataVector( ((java.util.Vector)in.readObject()),((java.util.Vector)in.readObject()) );
in.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
if(source == jbtAddRow)
model.addRow(new java.util.Vector());
if(source == jbtAddColumn)
{
String head = JOptionPane.showInputDialog(this,"输入列名","输入",JOptionPane.QUESTION_MESSAGE);
model.addColumn(head);
}
if(source == jbtDelRow)
{
if(jtable.getSelectedRowCount() > 0)
{
int[] selectedRowIndices = jtable.getSelectedRows();
for(int i = 0; i < selectedRowIndices.length; i++)
model.removeRow(i);
}
}
if(source == jbtDelColumn)
{
TableColumnModel columnModel = (TableColumnModel)jtable.getColumnModel();
if(jtable.getSelectedColumnCount() > 0)
{
int[] selectedColumnIndices = jtable.getSelectedColumns();
for(int i = 0; i < selectedColumnIndices.length; i++)
columnModel.removeColumn(columnModel.getColumn(i));
}
}
}
private Vector getColumnNames()
{
Vector<String> names = new Vector<String>();
for(int i = 0; i < model.getColumnCount(); i++)
names.add(jtable.getColumnName(i));
return names;
}
public static void main(String[] args)
{
TableModelDemo frame = new TableModelDemo();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}