說明:這篇博客是在上一篇的基礎上的,因為上一篇已經將界面的框架搭好了,這篇主要是將里面的組件完善。
分為三個部分,北邊的組件、中間的組件、南邊的組件?
// 放置北邊的組件layoutNorth(contentPane);// 放置中間的 JtablelayoutCenter(contentPane);// 放置南邊的組件layoutSouth(contentPane);
首先北邊和南邊的組件比較簡單,就是一些按鈕和輸入框?
1. 北邊?
// 北邊的面板JPanel northPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));JButton addButton = new JButton("添加");JButton updateButton = new JButton("修改");JButton deleteButton = new JButton("刪除");JTextField searchTxt = new JTextField(15);JButton queryButton = new JButton("查詢");
private void layoutNorth(Container contentPane) {northPanel.add(addButton);northPanel.add(updateButton);northPanel.add(deleteButton);northPanel.add(searchTxt);northPanel.add(queryButton);contentPane.add(northPanel, BorderLayout.NORTH);}
2. 南邊
// 南邊的面板JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));JButton preButton = new JButton("上一頁");JButton nextButton = new JButton("下一頁");
private void layoutSouth(Container contentPane) {southPanel.add(preButton);southPanel.add(nextButton);contentPane.add(southPanel, BorderLayout.SOUTH);}
3. 中間的jtable
?首先要知道使用JTable, 就需要有tableModel, 然后表格的樣式和渲染方式也都是需要設置的, 所以需要定義另外三個類。
(1)MainViewTableModel?
public class MainViewTableModel extends DefaultTableModel {static Vector<String> column = new Vector<>();static {column.addElement("編號");column.addElement("姓名");column.addElement("學號");column.addElement("家鄉");column.addElement("語文");column.addElement("數學");column.addElement("英語");column.addElement("總分");}public MainViewTableModel() {super(null, column);}private static MainViewTableModel mainViewTableModel = new MainViewTableModel(); // 餓漢式public static MainViewTableModel assembleModel(Vector<Vector<Object>> data){ // 組裝數據 -> 肯定有返回對象,即要設置返回類型mainViewTableModel.setDataVector(data,column);return mainViewTableModel;}@Overridepublic boolean isCellEditable(int row, int column) {return false;}// 添加get方法 獲取列名public static Vector<String> getColumn() {return column;}
}
?(2)MainViewTable
public class MainViewTable extends JTable {public MainViewTable() {// 設置表頭的樣式JTableHeader tableHeader = getTableHeader();tableHeader.setFont(new Font("微軟雅黑", Font.BOLD, 18));tableHeader.setForeground(Color.red);// 設置表格體的樣式setFont(new Font("微軟雅黑", Font.PLAIN, 14));setForeground(Color.black);setGridColor(Color.black); // 設置表格線顏色setRowHeight(30); // 設置行高// 設置多行選擇getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);}public void renderRule() {//設置表格列的渲染方式Vector<String> column = MainViewTableModel.getColumn();MainViewCellRender mainViewCellRender = new MainViewCellRender();for (int i=0; i<column.size(); i++) {TableColumn c = getColumn(column.get(i));c.setCellRenderer(mainViewCellRender);if (i == 0) {c.setPreferredWidth(10);c.setResizable(false);}}}
}
?(3)在MainViewTable中使用的MainViewCellRender(),需要在這邊創建
public class MainViewCellRender extends DefaultTableCellRenderer {// 在每一行每一列顯示之前都會調用@Overridepublic Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {if (row % 2 == 0 ) {setBackground(Color.LIGHT_GRAY);} else {setBackground(Color.WHITE);}setHorizontalAlignment(DefaultTableCellRenderer.CENTER); // 設置水平居中return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);}
}
(4)在主函數中
MainViewTable mainViewTable = new MainViewTable(); // 首先實例化對象
private void layoutCenter(Container contentPane) {// 測試數據Vector<Vector<Object>> data = new Vector<>();Vector<Object> rowVector1 = new Vector<>();rowVector1.addElement("1");rowVector1.addElement("張三");rowVector1.addElement("2112001136");rowVector1.addElement("江蘇");rowVector1.addElement("89");rowVector1.addElement("92");rowVector1.addElement("80");rowVector1.addElement("261");Vector<Object> rowVector2 = new Vector<>();rowVector2.addElement("2");rowVector2.addElement("李四");rowVector2.addElement("2112001137");rowVector2.addElement("北京");rowVector2.addElement("89");rowVector2.addElement("92");rowVector2.addElement("85");rowVector2.addElement("266");data.addElement(rowVector1);data.addElement(rowVector2);MainViewTableModel mainViewTableModel = MainViewTableModel.assembleModel(data);mainViewTable.setModel(mainViewTableModel);mainViewTable.renderRule();JScrollPane jScrollPane = new JScrollPane(mainViewTable);contentPane.add(jScrollPane, BorderLayout.CENTER);}
?
4. 運行結果