码迷,mamicode.com
首页 > 编程语言 > 详细

Java Swing实战(五)表格组件JTable(1)

时间:2018-12-19 01:11:48      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:count   图片   main   sele   factor   val   ini   date   ack   

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);
    }

}

效果如图:
技术分享图片

Java Swing实战(五)表格组件JTable(1)

标签:count   图片   main   sele   factor   val   ini   date   ack   

原文地址:https://www.cnblogs.com/pianistedward/p/10140927.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!