欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-06 11:46:04
dbPanel面板的配置告一段落。 接下来配置taskPanel 面板。 / @author: lishuai @date: 2018/11/26 13:51 / public class WeimingSyncApplets { public static void main(String[] a ......

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)