Java Swing實戰(五)表格組件JTable(1)


dbPanel面板的配置告一段落。

接下來配置taskPanel 面板。

/**
 * @author: lishuai
 * @date: 2018/11/26 13:51
 */
public class WeimingSyncApplets {
    public static void main(String[] args) {
        // 面板組件
        JPanel taskPanel = new JPanel();
        JPanel dbPanel = new JPanel();
        JTabbedPane tabbedPane = buildJTabbedPane(taskPanel, dbPanel);
        buildFrame(tabbedPane);
    }

    private static JTabbedPane buildJTabbedPane(JPanel taskPanel, JPanel dbPanel) {
        // 選項卡面板
        JTabbedPane tabbedPane = new JTabbedPane();
        // 通過BorderFactory來設置邊框的特性
        tabbedPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        tabbedPane.add("執行任務", taskPanel);
        tabbedPane.add("數據源配置", dbPanel);

        // 創建面板容器
        JPanel tablePanel = new JPanel();
        // 設置BorderLayout布局方式
        tablePanel.setLayout(new BorderLayout());
        // 創建表格
        JTable table = configTable();
        // 使用普通的中間容器添加表格時,表頭 和 內容 需要分開添加
        tablePanel.add(table.getTableHeader(), BorderLayout.NORTH);
        tablePanel.add(table, BorderLayout.CENTER);
        // 將容器放入taskPanel面板
        taskPanel.add(tablePanel);

        return tabbedPane;
    }

    private static JTable configTable() {
        // 創建 table
        JTable table = getTable();
        // 獲取 model
        DefaultTableModel model = getTableModel();
        table.setModel(model);
        for (int i = 0; i < model.getRowCount(); i++) {
            // 獲得表格的值
            String taskName = (String) model.getValueAt(i, 0);
            // 設置表格的值
            model.setValueAt(taskName + "執行時間:" + i + "分鍾后", i, 2);
        }
        int[] columnWidth = {135, 165, 350, 150, 150, 100};
        for (int i = 0; i < columnWidth.length; i++) {
            // 設置表格各欄各行的尺寸
            table.getColumnModel().getColumn(i).setPreferredWidth(columnWidth[i]);
        }
        return table;
    }

    private static JTable getTable() {
        JTable table = new JTable() {
            @Override
            public void updateUI() {
                // 刷新
                super.updateUI();
                // 表格行高
                setRowHeight(36);
            }

            @Override
            public boolean isCellEditable(int row, int column) {
                // 第3列、第4列設置可以編輯,其余列不可編輯
                if (column != 4 && column != 5) {
                    return false;
                }
                return true;
            }
        };
        // 設置表頭不可移動
        table.getTableHeader().setReorderingAllowed(false);
        // 一次只能選擇一項
        table.setSelectionMode(SINGLE_SELECTION);
        return table;
    }

    private static DefaultTableModel getTableModel() {
        int rowCount = 4;
        Object[] columnNames = {"任務名稱", "執行規則", "任務執行時間", "狀態", "操作", "SQL"};
        Object[][] rowData = new Object[rowCount][columnNames.length];
        // 向表格中填充數據
        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < columnNames.length; j++) {
                switch (j) {
                    case 0:
                        rowData[i][j] = "任務" + i;
                        break;
                    case 1:
                        rowData[i][j] = "0 0 0/" + i + " * * ? ";
                        break;
                    default:
                        rowData[i][j] = null;
                }
            }
        }
        return new DefaultTableModel(rowData, columnNames);
    }


    private static void buildFrame(JComponent component) {
        // 窗體容器
        JFrame frame = new JFrame("數據同步工具");
        frame.add(component);
        //  JFrame.EXIT_ON_CLOSE  退出
        //  JFrame.HIDE_ON_CLOSE  最小化隱藏
        frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
        // 設置布局
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(BorderLayout.CENTER, component);
        // 設置窗口最小尺寸
        frame.setMinimumSize(new Dimension(1060, 560));
        // 調整此窗口的大小,以適合其子組件的首選大小和布局
        frame.pack();
        // 設置窗口相對於指定組件的位置
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        // 設置窗口尺寸是否固定不變
        frame.setResizable(true);
    }

}

效果如圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM