看了网上好多资料,和一个热心网友胡海波发到网上共享的代码,有所启发,下面是我对其代码进行的修改,以及个人心得。
表格头部设置有好几种,这种是把表头设置成ui,再设置进表格中
package tableHead;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicTableHeaderUI;
import javax.swing.table.JTableHeader;
public class TableHeadUI extends BasicTableHeaderUI {
private JTableHeader header;
public void paint(Graphics g, JComponent c) {
header = (JTableHeader) c;
JLabel label=getLabel("个人信息");
rendererPane.paintComponent(g, label, header, getX(0), 0, getWidth(0)+getWidth(1), 20, true);
label=getLabel("名称");
rendererPane.paintComponent(g, label, header, getX(0), 20, getWidth(0), 20, true);
label=getLabel("年龄");
rendererPane.paintComponent(g, label, header, getX(1), 20, getWidth(1), 20, true);
label=getLabel("工资");
rendererPane.paintComponent(g, label, header, getX(2), 0, getWidth(2), 40, true);
label=getLabel("编号");
rendererPane.paintComponent(g, label, header, getX(3), 0, getWidth(3), 40, true);
}
// 得到指定列的起始坐标
private int getX(int column){
int x=0;
for(int i=0;i<column;i++)
x+=header.getColumnModel().getColumn(i).getWidth();
return x;
}
//得到指定列的宽度
private int getWidth(int column){
return header.getColumnModel().getColumn(column).getWidth();
}
//得到具有指定文本的标签
private JLabel getLabel(String text){
JLabel label = new JLabel(text, JLabel.CENTER);
label.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
return label;
}
}
这是表头ui的代码,继承了BasicTableHeaderUI类,主要修改的,就是中间paint中每个单元格布局的逻辑,其他的可以直接引用即可。paintComponent的参数,前3个不用变,第4个是该所在的列数,调用下面的方法,可以直接获得所在的起始坐标,第5个参数为
离最顶端的距离,如果是0,那么就是第一列,因为第一行与顶端距离为0,以此类推,第2行这个值就是第1行的行高。第6个参数为该单元的宽,第7个参数为该单元格的高,最后一个写true即可。
下面代码是实例出来,加入表格的展示
package tableHead;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Table {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(new Dimension(600,400));
JScrollPane jsp = new JScrollPane();
jf.setContentPane(jsp);
Object[][] t = {{"","","",""},{"","","",""}};
String[]h = {"","","",""};
//建表
JTable jt = new JTable(new DefaultTableModel(t,h));
//建头组件
TableHeadUI ui = new TableHeadUI();
//获得头组件并设置
jt.getTableHeader().setUI(ui);
//设置表头的大小,要够长,高度最好要和表头的高度一样,否则会出现多余部分
jt.getTableHeader().setPreferredSize(new Dimension(400,40));
jsp.setViewportView(jt);
jf.setVisible(true);
}
}
下面是效果图,很简单但是可以变换一下就达到别的效果了
分享到:
相关推荐
swing表头合并简单教程,包含源码.详细介绍了表格合并功能的完成
java swing 表头不可拖动 基础篇 我根据课程慢慢上传的 适合初学者 实用的好东西 大家快来呀!!!
Swing超漂亮UI 图片 源码下载地址:
material-ui-swing, 面向 Java Swing的现代材料设计 UI material-ui-swing面向 Java Swing的现代材料设计 UI外观JComponents具有材质设计外观和感觉。 大多数组件都是响应性的,具有悬停效果,并单击"效果( 没有波纹...
swing框架之uidelegate之一.doc
swing组件封装重写
SwingUI-JFC好书
账户名密码都是1,写代码时com.zjyt.run是主main出口类,在com.zjyt.ui里写各个程序员的javax.swing.JPanel 每增加一个JPanel 模块就在com.zjyt.logic里new一个(在Logic类里写) else if (nameString.equals("标签打印...
用于Java Swing的现代材质设计UI 总览 资料库 Maven < groupId>io.github.vincenzopalazzo < artifactId>material-ui-swing < version>1.1.1 Gradle(Groovy) implementation ' io.github.vincenzopalazzo:
Swing样式大全 主题 皮肤包(全56种经典)LookAndFeel 本样式合集共有56种样式,包括使用说明和实例,即装即用 5种经典的Alloy和liquidlnf包 7种另类风格和实例包 20种样式风格包 24种样式合集包
table表头点击可实现排序,用JavaScript编写,可修改使用
Swing9patch, 一组很酷的Java Swing可重用组件或UI效果。
java_swing表格分页
quaqua swing UI theme 主题类似为Mac OS,不一定适合win。
Java Swing自定义观感的一个小例子(仅以自定义treeUI为例)。仅仅举例如何实现java SWing自定义观感,并不完整,童鞋可以根据treeUI编写其他控件的UI。
学生信息学号,籍贯级联,性别分组,计算器。
在swing的组件,如JLabel,JButton等,设置背景图片自适应自检的大小。
这段代码实现了连连看游戏的 Swing UI。点击相同的方块可以消除它们。游戏面板是一个 8x8 的网格,其中每个方格都显示一个数字按钮。游戏开始时,随机生成两个不同的方块,并将其放置在网格中的两个不同位置。每次...
中级SWING-J中级中级SWING-JTable属性SWING-JTable属性Table属性