您好,我在百度上看了你的回答java多表头的问题,觉得你做的不错,能够给我源代码吗?谢谢
2个回答
展开全部
我回顾了下,是曾经答过一个表格的问题,下面就是所有的源代码了。大体思路是设置表格的表头渲染器<getTableHeader().setUI(new UI());>下面这种做法能满足特定表格需求,但没法作为一个通用的模板。按这个做法把内容换一下应该就行了。
import javax.swing.*;
import javax.swing.plaf.basic.BasicTableHeaderUI;
import javax.swing.table.JTableHeader;
import java.awt.*;
/************************************************************
* 仓储(一日游、普通客户)操作的表格。
* @author 胡海波
*
*/
public class StoreTable extends JTable {
public StoreTable() {
super(0, 13);
this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
this.getTableHeader().setUI(new UI());
}
// 表头绘制器*********************************************************************
private class UI extends BasicTableHeaderUI {
private JTableHeader header;
public void paint(Graphics g, JComponent c) {
header = (JTableHeader) c;
getTableHeader().setPreferredSize(new Dimension(StoreTable.this.getWidth(), 45));// 设置表头大小。横坐标必须足够大,
//否则会出现绘制不完全以及闪烁现象
//分类
JLabel label=getLabel("分类");
rendererPane.paintComponent(g, label, header, 0, 0, getWidth(0), 45, true);
//到货日期
label=getLabel("到货日期");
rendererPane.paintComponent(g, label, header, getX(1), 0, getWidth(1), 45, true);
//送货日期
label=getLabel("送货日期");
rendererPane.paintComponent(g, label, header, getX(2), 0, getWidth(2), 45, true);
//收款代理
label=getLabel("收款代理");
rendererPane.paintComponent(g, label, header, getX(3), 0, getWidth(3), 45, true);
//客户**************************************************************************
label=getLabel("客户");
rendererPane.paintComponent(g, label, header, getX(4), 0, getWidth(4)+getWidth(5), 30, true);
label=getLabel("上游");
rendererPane.paintComponent(g, label, header, getX(4), 30, getWidth(4), 15, true);
label=getLabel("下游");
rendererPane.paintComponent(g, label, header, getX(5), 30, getWidth(5), 15, true);
//报关单号**********************************************************************
label=getLabel("报关单号");
rendererPane.paintComponent(g, label, header, getX(6), 0, getX(10)-getX(6), 15, true);
label=getLabel("上游");
rendererPane.paintComponent(g, label, header, getX(6), 15, getWidth(6)+getWidth(7), 15, true);
label=getLabel("下游");
rendererPane.paintComponent(g, label, header, getX(8), 15, getWidth(8)+getWidth(9), 15, true);
label=getLabel("进口");
rendererPane.paintComponent(g, label, header, getX(6), 30, getWidth(6), 15, true);
label=getLabel("出口");
rendererPane.paintComponent(g, label, header, getX(7), 30, getWidth(7), 15, true);
label=getLabel("进口");
rendererPane.paintComponent(g, label, header, getX(8), 30, getWidth(8), 15, true);
label=getLabel("出口");
rendererPane.paintComponent(g, label, header, getX(9), 30, getWidth(9), 15, true);
//业务员
label=getLabel("业务员");
rendererPane.paintComponent(g, label, header, getX(10), 0, getWidth(10), 45, true);
//操作员
label=getLabel("操作员");
rendererPane.paintComponent(g, label, header, getX(11), 0, getWidth(11), 45, true);
//审核人
label=getLabel("审核人");
rendererPane.paintComponent(g, label, header, getX(12), 0, getWidth(12), 45, 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;
}
}
public static void main(String[] args){
JFrame frame=new JFrame();
frame.setSize(800,300);
frame.setDefaultCloseOperation(3);
frame.getContentPane().add(new JScrollPane(new StoreTable()));
frame.setVisible(true);
}
}
import javax.swing.*;
import javax.swing.plaf.basic.BasicTableHeaderUI;
import javax.swing.table.JTableHeader;
import java.awt.*;
/************************************************************
* 仓储(一日游、普通客户)操作的表格。
* @author 胡海波
*
*/
public class StoreTable extends JTable {
public StoreTable() {
super(0, 13);
this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
this.getTableHeader().setUI(new UI());
}
// 表头绘制器*********************************************************************
private class UI extends BasicTableHeaderUI {
private JTableHeader header;
public void paint(Graphics g, JComponent c) {
header = (JTableHeader) c;
getTableHeader().setPreferredSize(new Dimension(StoreTable.this.getWidth(), 45));// 设置表头大小。横坐标必须足够大,
//否则会出现绘制不完全以及闪烁现象
//分类
JLabel label=getLabel("分类");
rendererPane.paintComponent(g, label, header, 0, 0, getWidth(0), 45, true);
//到货日期
label=getLabel("到货日期");
rendererPane.paintComponent(g, label, header, getX(1), 0, getWidth(1), 45, true);
//送货日期
label=getLabel("送货日期");
rendererPane.paintComponent(g, label, header, getX(2), 0, getWidth(2), 45, true);
//收款代理
label=getLabel("收款代理");
rendererPane.paintComponent(g, label, header, getX(3), 0, getWidth(3), 45, true);
//客户**************************************************************************
label=getLabel("客户");
rendererPane.paintComponent(g, label, header, getX(4), 0, getWidth(4)+getWidth(5), 30, true);
label=getLabel("上游");
rendererPane.paintComponent(g, label, header, getX(4), 30, getWidth(4), 15, true);
label=getLabel("下游");
rendererPane.paintComponent(g, label, header, getX(5), 30, getWidth(5), 15, true);
//报关单号**********************************************************************
label=getLabel("报关单号");
rendererPane.paintComponent(g, label, header, getX(6), 0, getX(10)-getX(6), 15, true);
label=getLabel("上游");
rendererPane.paintComponent(g, label, header, getX(6), 15, getWidth(6)+getWidth(7), 15, true);
label=getLabel("下游");
rendererPane.paintComponent(g, label, header, getX(8), 15, getWidth(8)+getWidth(9), 15, true);
label=getLabel("进口");
rendererPane.paintComponent(g, label, header, getX(6), 30, getWidth(6), 15, true);
label=getLabel("出口");
rendererPane.paintComponent(g, label, header, getX(7), 30, getWidth(7), 15, true);
label=getLabel("进口");
rendererPane.paintComponent(g, label, header, getX(8), 30, getWidth(8), 15, true);
label=getLabel("出口");
rendererPane.paintComponent(g, label, header, getX(9), 30, getWidth(9), 15, true);
//业务员
label=getLabel("业务员");
rendererPane.paintComponent(g, label, header, getX(10), 0, getWidth(10), 45, true);
//操作员
label=getLabel("操作员");
rendererPane.paintComponent(g, label, header, getX(11), 0, getWidth(11), 45, true);
//审核人
label=getLabel("审核人");
rendererPane.paintComponent(g, label, header, getX(12), 0, getWidth(12), 45, 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;
}
}
public static void main(String[] args){
JFrame frame=new JFrame();
frame.setSize(800,300);
frame.setDefaultCloseOperation(3);
frame.getContentPane().add(new JScrollPane(new StoreTable()));
frame.setVisible(true);
}
}
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询