java swing 表格控件_java swing 开发 -JTable

最近利用空闲时间自己琢磨了一下java swing 编程,其实在从事javaweb之前我一直向往的就是java swing 开发,不知道为什么可能当时觉得Windows上的exe程序很是神奇,关于windows上制作exe我之前也有介绍

java swing开发都是自己琢磨的,有的地方写的不规范,不过大多都是网上借鉴的,应该不算离谱的。今天看了看自己的java swing的程序,感觉写的还不错,但是发现现在遇到一个瓶颈问题,就是jtable的使用,由于一开始概念不理解现在jtable得重新写,之前我吧数据放在jtable上了,但是真正开发的java swing数据都是放在TableModel上的。下面就Jtable的使用,好好整理了一番,途中参考的文章我都会放在下面列出,读者可以自己参考

JTable结构梳理

JTable=TableHeader+TableColumn

顾名思义我们知道表格是由表头和表列组成的,这两个都是单独的控件。但是JTable中如果想让表头显示仅仅将JTable加入Jpanel或者Jframe中是不行的,我这里提供两种方式实现

1、分别将TableHeader和TableColumn加入控件中单独的显示,这种情况不常见

2、先将JTable加入jscrollpane(滚动条)中,然后在将滚动条加入到对应的控件中(Jpanel或者是Jframe).java swing 开发中加入滚动条是很常见的操作,所以这种方式的加入表格还是很推荐的。

table = new JTable(data, columnNames);

table.setBackground(Color.gray);

table.setPreferredScrollableViewportSize(new Dimension(800, 100));

table.setFillsViewportHeight(false);

pane = new JScrollPane(table);

this.add(pane);

上面的代码就是简单的实现将表格以显示表头的方式加入到jframe中显示。其中我们能够看到多了几个设置,setPreferredScrollableViewportSize可有可无的,无所谓,但是setFillsViewportHeight是设置表格在纵向上的铺展情况,什么意思呢,如果这里设置为true则表格就会在纵向上铺满jframe,如果是false,表格则会按照自己的实际占地面积显示,不会多占的。

e2e79e2c6311e4f15a71eaec2bc9c931.png

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JTable 是一个非常常见的 Java Swing 控件,它可以方便地展示数据。如果数据量比较大,我们往往需要进行分页查看。下面是 JTable 分页查询的完整实现: 首先,我们需要定义一个分页类 PagingModel,用来管理分页相关的信息,如当前页码、每页显示的行数、总记录数等等。代码如下: ```java public class PagingModel { private int currentPage; // 当前页码 private int pageSize; // 每页显示的行数 private int totalRecords; // 总记录数 private int totalPages; // 总页数 public PagingModel(int pageSize, int totalRecords) { this.currentPage = 1; this.pageSize = pageSize; this.totalRecords = totalRecords; this.totalPages = (totalRecords + pageSize - 1) / pageSize; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalRecords() { return totalRecords; } public void setTotalRecords(int totalRecords) { this.totalRecords = totalRecords; this.totalPages = (totalRecords + pageSize - 1) / pageSize; } public int getTotalPages() { return totalPages; } public void setTotalPages(int totalPages) { this.totalPages = totalPages; } public int getFirstResult() { return (currentPage - 1) * pageSize; } public int getMaxResults() { return pageSize; } public boolean isFirstPage() { return currentPage == 1; } public boolean isLastPage() { return currentPage == totalPages; } public void nextPage() { if (!isLastPage()) { currentPage++; } } public void previousPage() { if (!isFirstPage()) { currentPage--; } } } ``` 接下来,我们需要定义一个数据模型类,用来管理 JTable 的数据。代码如下: ```java public class MyTableModel extends AbstractTableModel { private List<Object[]> data; private String[] columnNames; public MyTableModel(List<Object[]> data, String[] columnNames) { this.data = data; this.columnNames = columnNames; } @Override public int getRowCount() { return data.size(); } @Override public int getColumnCount() { return columnNames.length; } @Override public String getColumnName(int columnIndex) { return columnNames[columnIndex]; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return data.get(rowIndex)[columnIndex]; } public void setData(List<Object[]> data) { this.data = data; fireTableDataChanged(); } } ``` 其中,data 是一个 List,用来存储 JTable 的数据。每个元素都是一个 Object[],代表一行数据。columnNames 是一个 String[],用来存储 JTable 的列名。 接下来,我们需要定义一个分页查询的方法,用来查询数据并更新 JTable。代码如下: ```java public void queryDataByPage(int pageNum) { PagingModel pagingModel = new PagingModel(pageSize, totalRecords); pagingModel.setCurrentPage(pageNum); List<Object[]> data = // 执行查询语句,获取数据 myTableModel.setData(data); jTable.setModel(myTableModel); updatePageStatus(pagingModel); } private void updatePageStatus(PagingModel pagingModel) { currentPageLabel.setText(pagingModel.getCurrentPage() + ""); totalPagesLabel.setText(pagingModel.getTotalPages() + ""); totalRecordsLabel.setText(pagingModel.getTotalRecords() + ""); previousButton.setEnabled(!pagingModel.isFirstPage()); nextButton.setEnabled(!pagingModel.isLastPage()); } ``` 其中,pageSize 表示每页显示的行数,totalRecords 表示总记录数。我们先根据当前页码和总记录数计算出总页数,然后执行查询语句,获取数据。最后,更新 JTable 的数据模型和分页相关的信息。 最后,我们需要在界面上添加一些组件,如 JTable、分页按钮、分页信息等等。代码如下: ```java JTable jTable = new JTable(); MyTableModel myTableModel = new MyTableModel(new ArrayList<>(), new String[]{/* 列名 */}); int pageSize = 10; int totalRecords = // 执行查询语句,获取总记录数 PagingModel pagingModel = new PagingModel(pageSize, totalRecords); JButton previousButton = new JButton("上一页"); JButton nextButton = new JButton("下一页"); JLabel currentPageLabel = new JLabel(pagingModel.getCurrentPage() + ""); JLabel totalPagesLabel = new JLabel(pagingModel.getTotalPages() + ""); JLabel totalRecordsLabel = new JLabel(pagingModel.getTotalRecords() + ""); previousButton.addActionListener(e -> { pagingModel.previousPage(); queryDataByPage(pagingModel.getCurrentPage()); }); nextButton.addActionListener(e -> { pagingModel.nextPage(); queryDataByPage(pagingModel.getCurrentPage()); }); JPanel pagePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); pagePanel.add(previousButton); pagePanel.add(currentPageLabel); pagePanel.add(new JLabel("/")); pagePanel.add(totalPagesLabel); pagePanel.add(nextButton); JPanel infoPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); infoPanel.add(new JLabel("共 " + totalRecordsLabel + " 条记录")); JFrame frame = new JFrame(); frame.add(new JScrollPane(jTable), BorderLayout.CENTER); frame.add(pagePanel, BorderLayout.SOUTH); frame.add(infoPanel, BorderLayout.NORTH); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); ``` 其中,上一页和下一页按钮的 ActionListener 中分别调用 queryDataByPage 方法来更新 JTable 和分页信息。界面上方显示分页信息,下方显示 JTable 和分页按钮。 以上就是 JTable 分页查询的完整实现。需要注意的是,这里只是一个简单的示例,实际应用中可能需要处理更多的异常情况和分页相关的细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值