原创不易,转载请注明出处。
上一篇《Java实验--基于Swing的简单的歌曲信息管理系统(三) 》中,我们绘制了登录、注册和管理员主界面,本片主要讲解歌曲管理界面。第一次涉及到对表格的操作,参见的教材上的代码,具体代码如下:
package test.swing; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.table.DefaultTableModel; public class ExampleFrame_06 extends JFrame { /** * */ private static final long serialVersionUID = 1L; private DefaultTableModel tableModel;// 定义表格模型对象 private JTable table;// 定义表格对象 private JTextField aTextField; private JTextField bTextField; public static void main(String args[]) { ExampleFrame_06 frame = new ExampleFrame_06(); frame.setVisible(true); } public ExampleFrame_06() { super(); setTitle("维护表格模型"); setBounds(100, 100, 500, 375); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); String[] columnNames = { "A", "B" };// 定义表格列名数组 String[][] tableValues = { { "A1", "B1" }, { "A2", "B2" }, { "A3", "B3" } };// 定义表格数据数组 // 创建指定表格列名和表格数据的表格模型 tableModel = new DefaultTableModel(tableValues, columnNames); table = new JTable(tableModel);// 创建指定表格模型的表格 // table.setRowSorter(new TableRowSorter(tableModel));// 设置表格的排序器 // 设置表格的选择模式为单选 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 为表格添加鼠标事件监听器 table.addMouseListener(new MouseAdapter() { // 发生了点击事件 public void mouseClicked(MouseEvent e) { // 获得被选中行的索引 int selectedRow = table.getSelectedRow(); // 从表格模型中获得指定单元格的值 Object oa = tableModel.getValueAt(selectedRow, 0); // 从表格模型中获得指定单元格的值 Object ob = tableModel.getValueAt(selectedRow, 1); aTextField.setText(oa.toString());// 将值赋值给文本框 bTextField.setText(ob.toString());// 将值赋值给文本框 } }); scrollPane.setViewportView(table); final JPanel panel = new JPanel(); getContentPane().add(panel, BorderLayout.SOUTH); panel.add(new JLabel("A:")); aTextField = new JTextField("A4", 10); panel.add(aTextField); panel.add(new JLabel("B:")); bTextField = new JTextField("B4", 10); panel.add(bTextField); final JButton addButton = new JButton("添加"); addButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String[] rowValues = { aTextField.getText(), bTextField.getText() };// 创建表格行数组 tableModel.addRow(rowValues);// 向表格模型中添加一行 int rowCount = table.getRowCount() + 1; aTextField.setText("A" + rowCount); bTextField.setText("B" + rowCount); } }); panel.add(addButton); final JButton updButton = new JButton("修改"); updButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int selectedRow = table.getSelectedRow();// 获得被选中行的索引 if (selectedRow != -1) {// 判断是否存在被选中行 tableModel.setValueAt(aTextField.getText(), selectedRow, 0);// 修改表格模型当中的指定值 tableModel.setValueAt(bTextField.getText(), selectedRow, 1);// 修改表格模型当中的指定值 } } }); panel.add(updButton); final JButton delButton = new JButton("删除"); delButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int selectedRow = table.getSelectedRow();// 获得被选中行的索引 if (selectedRow != -1)// 判断是否存在被选中行 // 从表格模型当中删除指定行 tableModel.removeRow(selectedRow); } }); panel.add(delButton); } }
其实,这里的难点就是如何显示数据,根据教材的代码,能够大致模仿写出,然后就根据就把后台的数据显示出来就好了。为了实现让表格里面的行为不可编辑的状态,所以自己定义一个类,继承至DefaultTableMode,重写了isCellEditable方法,设置为了false。其他的都没有变。如果当时静下心再想想,可能就会重写很多的方法(还好这些在用户管理里面做了),使用的时候也会更简单,代码也会更少。
其它的部分还有就是根据条件搜索,下面的JRadioButton和搜索框中显示的提示消息相对应等,之前考虑的是点击添加、删除、修改按钮,是弹出一个新的窗体来进行,无奈当时试了几次也不行(还好用户管理里面是这样实现的),只有模仿书上面的例子来做了,在表格的下面多增加了一排,里面包含了歌曲信息的输入框和增加、修改、删除的按钮,模仿例子来实现的。
先来看设计图: