標籤:count() 就會 文本 簡單 使用 eve jtable long 繪製
原創不易,轉載請註明出處。
上一篇《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); }}View Code
其實,這裡的痛點就是如何顯示資料,根據教材的代碼,能夠大致模仿寫出,然後就根據就把背景資料顯示出來就好了。為了實現讓表格裡面的行為不可編輯的狀態,所以自己定義一個類,繼承至DefaultTableMode,重寫了isCellEditable方法,設定為了false。其他的都沒有變。如果當時靜下心再想想,可能就會重寫很多的方法(還好這些在使用者管理裡面做了),使用的時候也會更簡單,代碼也會更少。
其它的部分還有就是根據條件搜尋,下面的JRadioButton和搜尋方塊中顯示的提示訊息相對應等,之前考慮的是點擊添加、刪除、修改按鈕,是彈出一個新的表單來進行,無奈當時試了幾次也不行(還好使用者管理裡面是這樣實現的),只有模仿書上面的例子來做了,在表格的下面多增加了一排,裡麵包含了歌曲資訊的輸入框和增加、修改、刪除的按鈕,模仿例子來實現的。
先來看設計圖:
Java實驗--基於Swing的簡單的歌曲資訊管理系統(四)